【问题标题】:python setup.py install doesn't work properly on alpine imagepython setup.py install 在高山图像上无法正常工作
【发布时间】: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 installpip 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 解释器&gt;&gt;&gt; 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


【解决方案1】:

对我有用的解决方案是设置 PYTHONPATH 变量。

PYTHONPATH=${PYTHONPATH}:/usr/local/lib/python3.6/site-packages

仍然觉得只是一个肮脏的解决方法,因为 site-packages 路径在 sys.path 中并且软件包已正确安装在那里,但现在它解决了问题。

【讨论】:

    猜你喜欢
    • 2020-07-25
    • 2020-05-08
    • 2023-03-31
    • 1970-01-01
    • 2021-11-25
    • 2021-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多