Автоматическое изменение версии пакета, когда нужная версия не может быть найдена

#python #docker #installation #pip #requirements.txt

Вопрос:

Я создаю образ Докера с помощью requirements.txt файл. Каждый раз, когда я создаю образ, он продолжает отказывать из-за отсутствия какой-либо версии пакета. Например

 ARG BASE_CONTAINER=tensorflow/tensorflow
FROM $BASE_CONTAINER


# 2) change to root to install packages
USER root

COPY requirements.txt requirements.txt


# 3) install packages
RUN pip install -r requirements.txt
 
 ERROR: Could not find a version that satisfies the requirement msrestazure==0.5.4 
(from -r requirements.txt (line 66)) (from versions: 0.0.1, 0.0.2, 0.1.0, 0.1.1, 0.1.2,
 0.2.0, 0.2.1, 0.3.0, 0.4.0rc1, 0.4.0, 0.4.1, 0.4.2, 0.4.3, 0.4.4, 0.4.5, 0.4.6, 0.4.7, 
0.4.8, 0.4.9, 0.4.10, 0.4.11, 0.4.12, 0.4.13, 0.4.14, 0.4.15, 0.4.16, 0.4.17, 0.4.18, 
0.4.19, 0.4.20, 0.4.21, 0.4.22, 0.4.23, 0.4.24, 0.4.25, 0.4.26, 0.4.27, 0.4.28, 0.4.29, 
0.4.30, 0.4.31, 0.4.32, 0.4.33, 0.4.34, 0.5.0, 0.5.1, 0.6.0, 0.6.1, 0.6.2, 0.6.3, 0.6.4)
#6 9.178 ERROR: No matching distribution found for msrestazure==0.5.4 (from -r requirements.txt (line 66))
 

Чтобы обойти это, я просто изменил версию пакета в своем requirements.txt до самой последней версии, которую может найти докер. Мне было интересно, есть ли способ сделать это программно. Например, есть ли какой-то флаг или опция, которую я могу использовать для автоматической установки последней версии пакета, которую docker может найти, если версия, которая у меня есть в моем requirements.txt файл не существует/не может быть найден?

Ответ №1:

Отсутствие указания какой-либо версии вообще в a requirements.txt приведет к использованию самой последней версии, при условии, что она не конфликтует.

В вашем случае я бы предложил запустить docker run -it tensorflow/tensorflow интерактивную оболочку в среде, а затем установить все ваши пакеты без указанной версии. Проверьте, работает ли это, и если да, запустите pip freeze > requirements.txt , чтобы создать новый файл требований, который работает в этой среде, чтобы ваши требования были стабильными.

Вам также придется закрепить tensorflow/tensorflow изображение, так как, если вы используете latest его так, как делаете сейчас, вы не можете быть уверены, что ваши требования будут доступны в будущем.

Обязательно скопируйте requirements.txt файл перед выходом из контейнера.

Комментарии:

1. О, вы совершенно правы, я совершенно забыл о том, чтобы просто оставить версию