【问题标题】:Docker: pip install -e . works but pip install -r requirements.txt does not work码头工人: pip install -e 。有效,但 pip install -r requirements.txt 不起作用
【发布时间】:2019-10-29 07:53:52
【问题描述】:

我有一个烧瓶 python 3.7 应用程序,我想在 docker 和 Kubernetes 上运行。

我有以下 Docker 文件

这个工作(使用python鸡蛋)

FROM python:3-stretch
WORKDIR /app
ADD . /app/
RUN pip install -e . 
EXPOSE 5000
CMD ["python", "myapp/application.py"]

但这不是(但我想坚持这个)

FROM python:3-stretch
WORKDIR /app
ADD . /app/
RUN pip -r requirements.txt
EXPOSE 5000
CMD ["python", "myapp/application.py"]

运行此命令(构建容器后) docker run -it -p 5000:5000 myapp-python:latest 出现以下错误

Traceback (most recent call last):
  File "myapp/application.py", line 3, in <module>
    import myapp.config as config
ModuleNotFoundError: No module named 'myapp'

但如上所述,这与之前的 Docker 文件完美匹配。任何帮助深表感谢。

补充说明:

  • 构建 Docker 容器时没有错误

这是我的 requirements.txt

flask
requests
flask-restful
flask-migrate
flask-sqlalchemy
flask-marshmallow
flask-jwt-extended
marshmallow-sqlalchemy
python-dotenv
passlib
tox
neomodel==3.2.9
marshmallow>=3.0.0b11
apispec
phonenumbers
pillow
emailage>=1.1.2
emailage-official==1.0.2
boto3
geopy
fuzzywuzzy
py2neo>=4.1.0
python-dotenv
eth_utils
neo4j>=1.7.0
neotime>=1.7.1
python-jose
eth-utils
eth-hash[pycryptodome]
python-Levenshtein
jsonpatch
google-cloud-vision
google-cloud-translate
pycountry
sspyjose>=0.2.5
pysinglesource>=0.1.0
flask-cors
pynamodb

【问题讨论】:

  • 第二个只安装需求,不安装应用本身。
  • 非常感谢。你能详细说明一下吗?我该如何解决。我对python鸡蛋不是很熟悉。
  • 我认为第二个在PYTHONPATH 中找不到您的项目,因为它似乎正在运行CMD 中指定的application.py 文件,但无法导入config.py 文件。
  • 如果是python3,不应该是pip3 install吗?
  • @suren。没有。我刚刚为 python:3-stretch 运行了那个 docker 图像来检查,并且 pip 工作得很好 - 它默认为pip 19.2.3 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)

标签: python docker pip


【解决方案1】:

我找到了解决办法。

  1. 我分别构建了两个容器
  2. 然后在每个容器内运行以下命令。
root@64118c352a3e:/app# python
[GCC 6.3.0 20170516] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print(sys.path)
['', '/app', '/usr/local/lib/python37.zip', '/usr/local/lib/python3.7', '/usr/local/lib/python3.7/lib-dynload', '/usr/local/lib/python3.7/site-packages']

然后在我的第二个配置中发现我缺少第二个容器中的 '/app' 路径。

然后我添加了路径

ENV PYTHONPATH "${PYTONPATH}:/app"

完整的 Dockerfile 如下所示。

FROM python:3-stretch
WORKDIR /app
ADD . /app/
RUN pip install -r requirements.txt
ENV PYTHONPATH "${PYTONPATH}:/app"
EXPOSE 5000
CMD ["python", "myapp/application.py"]

现在可以了。

希望这会对某人有所帮助

【讨论】:

  • requirements.txt的内容是什么?看起来您实际上并没有安装应用程序,而只是安装了它的要求。不需要更改PYTHONPATH。这一点的证明是它适用于pip install -e .。看起来你需要一个pip install . 在某个地方。
  • @sinoroc 不确定我是否理解这个“看起来您实际上并没有安装您的应用程序,而只是安装了它的要求”。其他人也提到了这一点,但我不知道如何解决这个问题。我尝试添加它,但它不起作用pip install .。谢谢你的时间。 :)
  • 在不了解您的确切设置的情况下很难确定,但有些地方似乎不对。首先,很少有充分的理由来修改PYTHONPATH。您的项目是否有一个正常运行的setup.py?你能用requirements.txt的内容更新问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-01
  • 1970-01-01
相关资源
最近更新 更多