telegram- python -bot ImportError Нет модуля с именем «криптография» Alpine Docker - PullRequest
3 голосов
/ 23 апреля 2020

Я пытаюсь запустить скрипт, который отправляет сообщение в telegram с помощью модуля python -telegram-bot. Скрипт работает в docker на альпийском.

Сценарий не может импортировать 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

needs.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, но это не помогло.

Я нашел много вопросов, связанных с проблемами криптографии, но решения не помогли.

Ответы [ 2 ]

4 голосов
/ 27 апреля 2020

удалось решить сам. Поскольку изображение строится в два этапа, я не устанавливаю криптографию на первом этапе, теперь он упакован в файл 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
2 голосов
/ 26 апреля 2020

Используемое вами изображение альпийское. Если у вас есть зависимость от модуля криптографии, выполните следующие шаги, чтобы исправить это.

Построение криптографии на Linux

Cryptography кораблях manylinux колеса (по состоянию на 2.0), поэтому все зависимости включены. Для пользователей с pip 8.1 или выше, работающих в manylinux1 или manylinux2010 совместимом дистрибутиве (почти все, кроме Alpine), все, что вам нужно сделать, это:

$ pip install cryptography

Если вы находитесь на Alpine или просто хотите скомпилировать его самостоятельно, тогда для криптографии требуется компилятор, заголовки для Python (если вы не используете pypy) и заголовки для библиотек OpenSSL и libffi, доступных в вашей системе.

Alpine

Замените python3-dev на python-dev, если вы используете Python 2.

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

Если вы получили ошибку с openssl-dev, возможно, вам придется использовать libressl-dev.

Таким образом, внесение изменений в указанные выше apk указанных пакетов в вашем Dockerfile должно работать.

На всякий случай, если вам нужны дополнительные сведения о других дистрибутивах ОС, это может быть находится в разделе Построение криптографии на Linux на официальном сайте Криптография и Криптография GitHub .

...