telegram-python-bot ImportError 没有名为 'cryptography' Alpine Docker 的模块



我正在尝试运行脚本,该脚本使用python电报bot模块向电报发送消息。剧本在阿尔卑斯山的码头上运行。

脚本无法导入Telegram,我收到一个错误ModuleNotFoundError:没有名为"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行添加到dockerfile中,但没有起到任何作用。

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

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

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

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

在Linux上构建密码学

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

$ pip install cryptography

如果您在Alpine上,或者只是想自己编译它,那么密码学需要编译器、Python的头(如果您没有使用pypy(以及系统上可用的OpenSSLlibffi库的头。

Alpine

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

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

如果openssl-dev出现错误,您可能必须使用libressl-dev.

因此,在Dockerfile中对上面的apk给定包进行更改应该是可行的。

以防万一,如果您想了解其他操作系统发行版的更多详细信息,可以在加密官方网站密码GitHub上的在Linux上构建加密一节中找到。

最新更新