python setup.py 安装在 alpine 图像上无法正常工作
python setup.py install doesn't work properly on alpine image
我有以下 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 中正确安装和导入。我该如何解决它。
对我有用的解决方案是设置 PYTHONPATH
变量。
PYTHONPATH=${PYTHONPATH}:/usr/local/lib/python3.6/site-packages
仍然觉得这只是一个肮脏的解决方法,因为 site-packages 路径在 sys.path
中并且软件包已正确安装在那里,但现在它解决了问题。
我有以下 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 中正确安装和导入。我该如何解决它。
对我有用的解决方案是设置 PYTHONPATH
变量。
PYTHONPATH=${PYTHONPATH}:/usr/local/lib/python3.6/site-packages
仍然觉得这只是一个肮脏的解决方法,因为 site-packages 路径在 sys.path
中并且软件包已正确安装在那里,但现在它解决了问题。