【问题标题】:Docker not recognising psycopg2-binary as psycopg2Docker 无法将 psycopg2-binary 识别为 psycopg2
【发布时间】:2022-01-12 18:45:12
【问题描述】:

使用 pipenv 我有以下 pipfile:

[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
flask = "*"
uuid = "*"
gunicorn = "*"
psycopg2-binary = "*"

[dev-packages]

[requires]
python_version = "3.8"

然后我的 Dockerfile 设置如下:

FROM python:3.8.3-slim-buster

RUN useradd deploy_trial

WORKDIR /home/deploy_trial

RUN pip install pipenv

COPY . /home/deploy_trial/

RUN pipenv install --deploy

CMD ["python","./app/text.py"]

但是,虽然构建似乎成功,但当我运行映像时,我收到一条错误消息:

Traceback (most recent call last):
  File "./app/text.py", line 1, in <module>
    import psycopg2
ModuleNotFoundError: No module named 'psycopg2'

所以它显然认为 psycopg2 尚未安装...这真的很奇怪,因为当我在本地机器上使用 psycopg2-binary 并且我的所有程序在代码运行时将安装识别为 psycopg2 时。有谁知道如何解决这个问题?

【问题讨论】:

  • 你试过了吗:apt install -y python3-psycopg2
  • @K4liber 所以从 pipfile 中删除 psycopg2-binary ,然后在 CMD 之前的行上添加你在 dockerfile 中写的内容?
  • 忽略我之前的评论,尝试在pipenv install之后添加RUN python -m pip list并检查psycopg2-binary是否在列表中。
  • 所以当我这样做时得到的只是: certifi 2021.10.8 distlib 0.3.4 filelock 3.4.2 pip 20.1.1 pipenv 2022.1.8 platformdirs 2.4.1 setuptools 47.1.1 6 1.16.0 virtualenv 20.13.0 virtualenv-clone 0.5.7 轮子 0.34.2
  • 你为什么在容器中使用pipenv,似乎是多余的......,同样基于pip 列出的内容,很明显python 没有指向pipenv 所在的任何位置安装这些包

标签: python postgresql docker ubuntu psycopg2


【解决方案1】:

我的码头文件:

FROM python:3.8.3-slim-buster

RUN python -m pip install pipenv

COPY script.py script.py
COPY Pipfile Pipfile
RUN pipenv install

CMD ["pipenv", "run", "python", "script.py"]

脚本.py:

import psycopg2

print('it is ok')

点文件:

[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
psycopg2-binary = "*"

[dev-packages]

[requires]
python_version = "3.8"

它适用于这样的配置。

【讨论】:

    猜你喜欢
    • 2021-11-06
    • 2021-04-06
    • 2016-07-08
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多