Проблема с поиском файла в файле ресурсов в проекте Python внутри докераPython

Программы на Python
Ответить
Anonymous
 Проблема с поиском файла в файле ресурсов в проекте Python внутри докера

Сообщение Anonymous »

Я написал скрипт Python, инициализированный с использованием поэзии для подключения к Gdrive API, и закрепил его с помощью этого Dockerfile:

Код: Выделить всё

# First stage: build the application
FROM python:3.10.2-slim as builder

# Set the working directory
WORKDIR /app

# Install Poetry and dependencies for building packages
RUN apt-get update && apt-get install -y libpq-dev gcc \
&& pip install --no-cache-dir --upgrade pip \
&& pip install --no-cache-dir poetry

# Copy necessary files
COPY .  .

# Install Python dependencies in /.venv
RUN poetry config virtualenvs.create true \
&& poetry config virtualenvs.in-project true \
&& poetry install --no-interaction --no-ansi

# Second stage: create the final image
FROM python:3.10.2-slim

# Set the working directory
WORKDIR /home/appuser

# Install the libpq-dev package
RUN apt-get update && apt-get install -y libpq-dev

# Copy the virtual environment from the builder stage
COPY --from=builder /app/.venv /.venv
ENV PATH="/.venv/bin:$PATH"

# Copy only the necessary files to the image
COPY qdm_report_project/ qdm_report_project/

RUN ls ./qdm_report_project/

# Create a new user (to avoid security risks with the root user)
RUN useradd --create-home appuser \
&& mkdir -p /home/appuser/.config \
&& chown -R appuser:appuser /home/appuser/

# Create a new entrypoint script - Used for output files ownership
RUN echo '#!/bin/bash' > /entrypoint.sh \
&& echo 'if [ "$(id -u)" = "0" ]; then' >> /entrypoint.sh \
&& echo '  groupadd -g ${USER_GID} appusergrp' >> /entrypoint.sh \
&& echo '  usermod -u ${USER_UID} -g ${USER_GID} appuser' >> /entrypoint.sh \
&& echo '  exec runuser -u appuser -- python qdm_report_project/main.py "$@"' >> /entrypoint.sh \
&& echo 'else' >> /entrypoint.sh \
&& echo '  exec python qdm_report_project/main.py "$@"' >> /entrypoint.sh \
&& echo 'fi' >> /entrypoint.sh \
&& chmod +x /entrypoint.sh

# Switch to appuser
USER appuser

ENTRYPOINT ["/entrypoint.sh"]
Структура проекта внутри контейнера выглядит следующим образом:
[img]https:/ /i.sstatic.net/phmkWtfg.png[/img]

main.py содержит:

Код: Выделить всё

from googleDrive import GoogleApi
def main():
google_api = GoogleApi(settings)
и GoogleApi.py содержит:

Код: Выделить всё

import pkg_resources

def get_resource_path(package_name: str, file_name: str):
"""
Gets file's path at the top-level of resources folder
:param package_name:
:param file_name:
:return:
"""
return pkg_resources.resource_filename(package_name, os.path.join("resources", file_name))

class GoogleApi:
def __init__(self, config: LazySettings):
...
credentials_path = get_resource_path(Path(__file__).parent.name, "serv_acc_google.json")
print(credentials_path)
...
код работает нормально, если выполняется локально, а не внутри контейнера.

Код: Выделить всё

root@7dea7641260b:/home/appuser/qdm_report_project# python main.py --config "/some_path"
Traceback (most recent call last):
File "/.venv/lib/python3.10/site-packages/pkg_resources/__init__.py", line 416, in get_provider
module = sys.modules[moduleOrReq]
KeyError: 'qdm_report_project'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/home/appuser/qdm_report_project/main.py", line 486, in 
main()
File "/home/appuser/qdm_report_project/main.py", line 416, in main
google_api = GoogleApi(settings)
File "/home/appuser/qdm_report_project/googleDrive.py", line 129, in __init__
credentials_path = get_resource_path(Path(__file__).parent.name, "serv_acc_google.json")
File "/home/appuser/qdm_report_project/googleDrive.py", line 117, in get_resource_path
return pkg_resources.resource_filename(package_name, os.path.join("resources", file_name))
File "/.venv/lib/python3.10/site-packages/pkg_resources/__init__.py", line 1375, in resource_filename
return get_provider(package_or_requirement).get_resource_filename(
File "/.venv/lib/python3.10/site-packages/pkg_resources/__init__.py", line 418, in get_provider
__import__(moduleOrReq)
ModuleNotFoundError: No module named 'qdm_report_project'
есть ли у вас идеи, что это может быть?
Спасибо

Подробнее здесь: https://stackoverflow.com/questions/793 ... ide-docker
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»