Python 如何使用Docker compose在Docker中正确安装自定义软件包?

Python 如何使用Docker compose在Docker中正确安装自定义软件包?,python,docker,docker-compose,package,dockerfile,Python,Docker,Docker Compose,Package,Dockerfile,我正在构建一个FlaskAPI,并希望创建它的docker映像。但是,当我运行docker compose(构建后)时,它找不到模块 错误: api_1 | Traceback (most recent call last): api_1 | File "app.py", line 6, in <module> api_1 | from api.classify.classify import get_prediction api_1 | ModuleNotFou

我正在构建一个FlaskAPI,并希望创建它的docker映像。但是,当我运行docker compose(构建后)时,它找不到模块

错误:

api_1  | Traceback (most recent call last):
api_1  |   File "app.py", line 6, in <module>
api_1  |     from api.classify.classify import get_prediction
api_1  | ModuleNotFoundError: No module named 'api'
setup.py如下所示:

- api
-- classify
--- classify.py
-- app.py
-- Dockerfile
-- requirements.txt
-- setup.py
from setuptools import setup, find_packages


setup(
    name='image_api',
    keywords='',
    version='0.1',
    packages=find_packages()
)
FROM python:3
WORKDIR /user/src/app
ENV PYTHONPATH=/api
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
RUN python setup.py install
CMD ["python", "app.py"]
Dockerfile如下所示:

- api
-- classify
--- classify.py
-- app.py
-- Dockerfile
-- requirements.txt
-- setup.py
from setuptools import setup, find_packages


setup(
    name='image_api',
    keywords='',
    version='0.1',
    packages=find_packages()
)
FROM python:3
WORKDIR /user/src/app
ENV PYTHONPATH=/api
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
RUN python setup.py install
CMD ["python", "app.py"]

如何修复此问题,以及在构建Docker映像时安装自定义软件包的最佳做法是什么?

您不应该像这样重写PYTHONPATH,请单击“附加路径”,否则系统将找不到已安装的Python软件包

您可以执行以下任一操作以使其正常工作:

  • 运行export PYTHONPATH=“$PYTHONPATH:/api”
  • ENV PYTHONPATH=“$PYTHONPATH:/api”

  • 此外,Dockerfile应该处于api级别,它将无法在当前目录结构中查找它。

    没有Docker,它已经失败。当我尝试使用pip安装安装包image_api时。有两件事出了问题:它没有安装requirements.txt,仍然找不到包。是的,这是因为你写的pythonpath太多了。将dockerfile中的命令更改为我编写的选项之一。让我知道它是否有效不,在我刚刚创建的另一个项目中。我有一个setup.py和requirements.txt。但是当我安装pip时。它确实安装了本地软件包,但没有安装要求。最重要的是,包的导入函数仍然会给出一个错误。另外,我这里不使用PYTHONPATH。将PYTHONPATH命令更改为我提到的命令时出现了什么错误。你两个选项都试过了吗?我现在就试。非常感谢。