python setup.py安装不';无法在阿尔卑斯山图像上正常工作
我有以下dockerfile:python setup.py安装不';无法在阿尔卑斯山图像上正常工作,python,docker,setuptools,alpine,python-packaging,Python,Docker,Setuptools,Alpine,Python Packaging,我有以下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.p
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安装
或pip安装。
将正确安装软件包,但当我运行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'
回溯(最近一次呼叫最后一次):
文件“pkg_name/app.py”,第6行,在
从pkg_name.api导入api
ModuleNotFoundError:没有名为“pkg_name”的模块
运行pip freeze
将显示已安装软件包列表中的项目。尝试在python解释器中导入项目>import pkg_name
也可以,这很奇怪
问题:
有人解释为什么尽管pkg已在interpeter中正确安装和导入,但无法在运行时导入它吗。如何修复它。一个对我有效的解决方案是设置
PYTHONPATH
变量
PYTHONPATH=${PYTHONPATH}:/usr/local/lib/python3.6/site-packages
Still feel只是一个肮脏的解决方法,因为站点包路径位于
sys.path
中,并且包正确安装在那里,但现在它解决了这个问题。我创建了一个,运行它时没有问题。您的setup.py是否可能有问题?如果在容器中运行Python解释器,是否可以导入pkg_name
?找到pkg_name/app.py
。失败的是pkg_name.api导入api中的。如果您在容器中运行Python解释器,您可以从pkg_name.api导入api
中执行吗?@six8如上所述从pkg_name.api导入api
在解释器中正常工作。在您的示例中,您没有从pkg_name.api import api
显式导入此类。在发布后,我在示例的app.py
中尝试了从pkg_name.api import api
。结果还是一样,没有问题。上面您说在解释器中只尝试了import pkg\u name
——而不是pkg\u name.api import api中的。