我有以下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图像中完美工作,但在高山图像中不使用。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
中导入该项目也很好,这很奇怪。
问题:
是否有人可以解释为什么尽管在Interpeter中安装并正确导入PKG,但仍无法在运行时间导入PKG。我该如何修复。
对我有用的解决方案是设置PYTHONPATH
变量。
PYTHONPATH=${PYTHONPATH}:/usr/local/lib/python3.6/site-packages
仍然觉得只是一个肮脏的解决方法,因为站点包的路径位于sys.path
中,并且软件包已正确安装在那里,但是现在它解决了问题。