Я пытаюсь создать образ для своего фляжного сервера, я создал файл requirements.txt с помощью pipreqs.

Требования.txt содержит cryptography==2.8 и каждый раз, когда сборка завершается сбоем при попытке установить эту версию. Не слишком уверен, почему, это даже показывает, что версия здесь.

Вот ошибка сборки докера

 22.90 ERROR: Could not find a version that satisfies the requirement cryptography==2.8 
(from versions: 0.1, 0.2, 0.2.1, 0.2.2, 0.3, 0.4, 0.5, 0.5.1, 0.5.2, 0.5.3, 0.5.4, 0.6, 0.6.1, 0.7, 0.7.1, 0.7.2, 0.8, 0.8.1, 0.8.2, 0.9, 0.9.1, 0.9.2, 0.9.3, 1.0, 1.0.1, 1.0.2, 1.1, 1.1.1, 1.1.2, 1.2, 1.2.1, 1.2.2, 1.2.3, 1.3, 1.3.1, 1.3.2, 1.3.3, 1.3.4, 1.4, 1.5, 1.5.1, 1.5.2, 1.5.3, 1.6, 1.7, 1.7.1, 1.7.2, 1.8, 1.8.1, 1.8.2, 1.9, 2.0, 2.0.1, 2.0.2, 2.0.3, 2.1, 2.1.1, 2.1.2, 2.1.3, 2.1.4, 2.2, 2.2.1, 2.2.2, 2.3, 2.3.1, 2.4, 2.4.1, 2.4.2, 2.5, 2.6, 2.6.1, 2.7, 2.8, 2.9, 2.9.1, 2.9.2, 3.0, 3.1, 3.1.1, 3.2, 3.2.1, 3.3, 3.3.1, 3.3.2, 3.4, 3.4.1, 3.4.2, 3.4.3, 3.4.4, 3.4.5, 3.4.6, 3.4.7, 3.4.8, 35.0.0, 36.0.0, 36.0.1)
#8 22.90 ERROR: No matching distribution found for cryptography==2.8
#8 22.92 WARNING: You are using pip version 21.2.4; however, version 21.3.1 is available.
#8 22.92 You should consider upgrading via the '/usr/local/bin/python -m pip install --upgrade pip' command.
------
executor failed running [/bin/sh -c pip3 install -r requirements.txt]: exit code: 1

РЕДАКТИРОВАТЬ: даже без копирования какого-либо кода фляги следующая сборка не работает

FROM python:3.8.10-alpine3.13
RUN pip install cryptography==2.8

Пожалуйста, посмотрите и дайте мне знать, если нужна дополнительная информация или где я ошибаюсь. Спасибо

0
jmvaswani 21 Янв 2022 в 17:14
Работает на меня. Что произойдет, если вы вручную запустите pip install cryptography==2.8 вместо установки из файла requirements.txt?
 – 
K.Mat
21 Янв 2022 в 17:35
@K.Mat pip install cryptography==2.8 работает на моем локальном компьютере, но не в образе во время его сборки, я попробовал RUN pip install cryptography==2.8 в файле докеров, но результат тот же (сбой сборки). Я использую python:3.9.10-alpine3.15, если это помогает
 – 
jmvaswani
21 Янв 2022 в 17:45
Пожалуйста, поделитесь минимальным воспроизводимым примером, который иллюстрирует вашу проблему. См. stackoverflow.com/help/minimal-reproducible-example, чтобы узнать, как это сделать.
 – 
Paolo
21 Янв 2022 в 17:50
Я внес изменения и добавил файл докеров, который вызывает ошибку
 – 
jmvaswani
21 Янв 2022 в 17:58

3 ответа

Лучший ответ

Я думаю, что ваша проблема связана с образом alpine linux, я имею в виду базовый образ, используемый для сборки python: 3.9.10-alpine3.15, вы должны попытаться установить криптографию вручную, следуя приведенному ниже коду:

RUN apk add --no-cache \
    libressl-dev \
    musl-dev \
    libffi-dev && \
pip install --no-cache-dir cryptography==2.8 && \
apk del \
    libressl-dev \
    musl-dev \
    libffi-dev

Документация Cryptography также содержит информацию о том, как ее загрузить.

RUN apk add gcc musl-dev libffi-dev openssl-dev cargo

0
Soheb 21 Янв 2022 в 18:07
Вы правы, возникла проблема с базовым образом. Он отлично работает с python:3.8.10-slim-buster . Предоставленная вами команда RUN не имела значения, она по-прежнему выдавала ту же ошибку. В любом случае, есть идеи, в чем именно проблема с предыдущим базовым образом?
 – 
jmvaswani
21 Янв 2022 в 18:13

Кажется, есть проблема с базовым изображением, как указал @Soheb, оно отлично работает с python:3.8.10-slim-buster. Не совсем уверен, в чем проблема с предыдущим базовым образом.

0
jmvaswani 21 Янв 2022 в 18:19

Проблема в том, что в образе alpine не установлено gcc, как вы можете видеть в полном сообщении об ошибке (не показано в вашем вопросе, но легко воспроизводится с помощью докера):

Unable to execute 'gcc': No such file or directory
error: command 'gcc' failed with exit status 1

Исправьте это, установив gcc и зависимости cryptography:

FROM python:3.8.10-alpine3.13
RUN apk add --no-cache \
    build-base \
    libressl-dev \
    musl-dev \
    libffi-dev
RUN pip install cryptography==2.8 

Вы все еще можете задаться вопросом, почему вы получаете (сбивающее с толку) сообщение:

ERROR: Could not find a version that satisfies the requirement cryptography==2.8 
(from versions: 0.1, 0.2, 0.2.1, 0.2.2, 0.3, 0.4, 0.5, 0.5.1, 0.5.2, 0.5.3, 0.5.4, 0.6, 0.6.1, 0.7, 0.7.1, 0.7.2, 0.8, 0.8.1, 0.8.2, 0.9, 0.9.1, 0.9.2, 0.9.3, 1.0, 1.0.1, 1.0.2, 1.1, 1.1.1, 1.1.2, 1.2, 1.2.1, 1.2.2, 1.2.3, 1.3, 1.3.1, 1.3.2, 1.3.3, 1.3.4, 1.4, 1.5, 1.5.1, 1.5.2, 1.5.3, 1.6, 1.7, 1.7.1, 1.7.2, 1.8, 1.8.1, 1.8.2, 1.9, 2.0, 2.0.1, 2.0.2, 2.0.3, 2.1, 2.1.1, 2.1.2, 2.1.3, 2.1.4, 2.2, 2.2.1, 2.2.2, 2.3, 2.3.1, 2.4, 2.4.1, 2.4.2, 2.5, 2.6, 2.6.1, 2.7, 2.8, 2.9, 2.9.1, 2.9.2, 3.0, 3.1, 3.1.1, 3.2, 3.2.1, 3.3, 3.3.1, 3.3.2, 3.4, 3.4.1, 3.4.2, 3.4.3, 3.4.4, 3.4.5, 3.4.6, 3.4.7, 3.4.8, 35.0.0, 36.0.0, 36.0.1)

Сообщение об ошибке просто констатирует факты: pip не удалось найти версию,

  1. соответствует вашим требованиям
  2. Может быть установлен без ошибок

Единственная версия, которая удовлетворила 1. (и была загружена, см. полный лог установки), не поддерживала 2. и поэтому была отброшена. Затем возникает ошибка со списком всех версий, которые pip проверял на соответствие условиям 1. и 2., то есть все версии на pypi, где есть кандидаты для вашей ОС и версии python.

0
FlyingTeller 21 Янв 2022 в 19:24