【发布时间】:2018-08-01 08:09:47
【问题描述】:
我有以下 dockerfile:
FROM python:alpine3.6
ENV PORT 5000
ENV APP /usr/src
ENV FLASK_APP pkg_name/app.py
RUN apk update
RUN apk upgrade
RUN apk add build-base postgresql-dev git gcc
RUN apk add musl-dev python3-dev libffi-dev
ADD . /
RUN python setup.py install
# RUN pip install .
EXPOSE $PORT
CMD flask run
上述配置在标准 python 图像中完美运行,但在 alpine 图像中无法正常运行。 python setup.py install 或 pip install . 都会正确安装软件包,但是当我运行 flask run 时,它会抱怨找不到安装的模块:
Traceback (most recent call last):
File "pkg_name/app.py", line 6, in <module>
from pkg_name.api import api
ModuleNotFoundError: No module named 'pkg_name'
运行pip freeze 表明该项目在已安装包列表中。尝试在 python 解释器>>> import pkg_name 中导入项目也可以,这很奇怪。
问题:
有没有人解释为什么 pkg 无法在运行时导入,尽管它已在 interpeter 中正确安装和导入。我该如何解决它。
【问题讨论】:
-
我创建了一个minimal example,运行它没有问题。你的 setup.py 可能有问题吗?如果你在容器中运行 Python 解释器,你可以
import pkg_name吗? -
pkg_name/app.py被发现。from pkg_name.api import api失败了。 -
如果你在容器中运行 Python 解释器可以
from pkg_name.api import api吗? -
@six8 如上所述
from pkg_name.api import api在解释器中工作正常。在您的示例中,您没有进行显式导入,例如from pkg_name.api import api。 -
在发布后,我在示例中的
app.py中尝试了from pkg_name.api import api。结果还是一样,没有问题。上面你说只有import pkg_name在解释器中被尝试过——而不是from pkg_name.api import api。
标签: python docker setuptools alpine python-packaging