【问题标题】:How to correctly install custom package in Docker with docker-compose?如何使用 docker-compose 在 Docker 中正确安装自定义包?
【发布时间】:2020-05-01 06:54:46
【问题描述】:

我正在构建一个烧瓶 api,并想为其创建一个 docker 映像。但是,当我执行 docker-compose run(构建后)时,它找不到模块。

错误:

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'

我的文件夹结构如下:

- api
-- classify
--- classify.py
-- app.py
-- Dockerfile
-- requirements.txt
-- setup.py

setup.py 如下所示:

from setuptools import setup, find_packages


setup(
    name='image_api',
    keywords='',
    version='0.1',
    packages=find_packages()
)

Dockerfile 看起来像这样:

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 映像时安装自定义包的最佳做法是什么?

【问题讨论】:

    标签: python docker docker-compose package dockerfile


    【解决方案1】:

    你不应该像那样覆盖 PYTHONPATH,而是附加你的路径,否则系统将找不到已安装的 Python 包。

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

    1. 运行导出 PYTHONPATH="$PYTHONPATH:/api"
    2. ENV PYTHONPATH="$PYTHONPATH:/api"

    另外你的 Dockerfile 应该是 api 级别的,它不能在当前的目录结构中查找它。

    【讨论】:

    • 如果没有 Docker,它已经失败了。当我尝试使用 pip install 安装包 image_api 时。有两个问题:它没有安装 requirements.txt 并且仍然找不到包。
    • 是的,这是因为你写完了pythonpath。将 dockerfile 中的命令更改为我编写的选项之一。让我知道它是否有效
    • 不,在我刚刚创建的另一个项目中。我有一个 setup.py 和 requirements.txt。但是当我做 pip install 。它确实安装了本地软件包,但没有安装要求。最重要的是,包的导入功能仍然报错。附:我在这里不使用 PYTHONPATH。
    • 将 PYTHONPATH 命令更改为我提到的那个时遇到的错误是什么。您是否尝试了这两个选项?
    • 我现在就试试。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    相关资源
    最近更新 更多