python setup.py安装不';无法在阿尔卑斯山图像上正常工作

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

我有以下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安装
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中的