电报-python-bot ImportError No module named 'cryptography' Alpine Docker

telegram-python-bot ImportError No module named 'cryptography' Alpine Docker

我正在尝试 运行 使用 python-telegram-bot 模块将消息发送到电报的脚本。 脚本 运行s in docker on alpine。

脚本无法导入 Telegram,出现错误 ModuleNotFoundError: No module named 'cryptography'

我的docker文件

FROM nickgryg/alpine-pandas:3.7.7 as base
FROM base as builder

RUN pip install --upgrade pip

RUN mkdir /install
RUN apk update && apk add postgresql-dev gcc musl-dev python3-dev libffi-dev openssl-dev 
WORKDIR /install
COPY requirements.txt /requirements.txt
RUN pip install --install-option="--prefix=/install" -r /requirements.txt
FROM base
COPY --from=builder /install /usr/local
COPY src /app
RUN apk --no-cache add libpq 
WORKDIR /app

requirements.txt低于

certifi==2020.4.5.1
chardet==3.0.4
Django==3.0.3
future==0.18.2
idna==2.9
pandas==1.0.3
pycountry==19.8.18
python-dateutil==2.8.1
pytz==2019.3
requests==2.23.0
six==1.14.0
sqlparse==0.3.1
urllib3==1.25.8
vertica-python==0.10.3
currencyconverter==0.14.1
python-telegram-bot==12.6.1
psycopg2==2.8.5

我也尝试将行 add apk py3-cryptography 添加到 docker 文件,但这没有帮助。

我发现了许多与密码学问题相关的问题,但没有解决方案。

您使用的图片是高山图片。如果您依赖于加密模块,请按照以下步骤进行修复。

在 Linux

上构建密码学

Cryptography 运送 manylinux 轮子(自 2.0 起),因此包括所有依赖项。对于使用 manylinux1manylinux2010 兼容发行版(几乎所有 Alpine 除外)的 pip 8.1 或更高版本 运行 的用户,您需要做的就是:

$ pip install cryptography

如果你在 Alpine 上或者只是想自己编译它,那么密码学需要一个编译器,headers 用于 Python(如果你不使用 pypy),并且 headers 用于您系统上可用的 OpenSSLlibffi 库。

高山

如果您使用 Python,请将 python3-dev 替换为 python-dev 2.

$ sudo apk add gcc musl-dev python3-dev libffi-dev openssl-dev

如果 openssl-dev 出错,您可能需要使用 libressl-dev.

因此,在您的 Dockerfile 中对上述 apk 给定的包进行更改应该有效。

以防万一,如果您想了解其他 OS 发行版的更多详细信息,可以在 Building cryptography on Linux on the Cryptography Official Site and Cryptography GitHub.

部分找到

自己设法解决了。由于图像是分两个阶段构建的,所以我现在不在第一阶段安装密码学,它被打包到一个 wheel 文件中。然后将其复制并安装在新映像中。

FROM nickgryg/alpine-pandas as base
FROM base as builder

RUN pip install --upgrade pip

RUN mkdir /install
RUN apk update && apk add gcc musl-dev python3-dev libffi-dev openssl-dev libc-dev postgresql-dev 
WORKDIR /install
COPY requirements.txt /requirements.txt
RUN pip install --install-option="--prefix=/install" -r /requirements.txt

RUN mkdir /wheels
WORKDIR /wheels
RUN pip wheel cryptography

FROM base
RUN apk add libressl
COPY --from=builder /install /usr/local
COPY --from=builder /wheels /wheels
RUN pip install /wheels/*.whl
COPY src /app
RUN apk --no-cache add libpq 
WORKDIR /app