Периодическая ошибка установки pip в virtualenv?

Для команд ниже:

virtualenv --system-site-packages `pwd`/.test

# load virtual environment
source `pwd`/.test/bin/activate

# install required python modules
# for some reason argparse is not included with credstash install but required at runtime :(
#PYPI_REPO=http://${PYPI_DNS}/aes/release/+simple/
#PYPI_DNS is internal company DNS 
pip install pip --upgrade -i ${PYPI_REPO} --quiet
pip install argparse==1.4.0 -i ${PYPI_REPO} --trusted-host ${PYPI_DNS} --quiet
pip install credstash==1.14.0 -i ${PYPI_REPO} --trusted-host ${PYPI_DNS} --quiet

Иногда это срабатывает.

  1. Однако иногда это не удается при установке argparse:

    Не удалось найти версию, удовлетворяющую требованию argparse==1.4.0 (из версий:) Соответствующий дистрибутив для argparse ==1.4.0 не найден

  2. В других случаях установка credstash не удастся:

    Не удалось найти версию, удовлетворяющую требованию boto3>=1.1.1 (из credstash==1.14.0) (из версий:) Соответствующий дистрибутив не найден для boto3>=1.1.1 (из credstash==1.14.0)

Я не могу найти причину, когда это не удается, а когда удается.

Обратите внимание, что приведенные выше команды взяты из файла xxx.sh, который запускается как часть сценария EC2 UserData - он работает почти на 90% во время запуска EC2.

Однако он работает в 10% случаев, когда я запускаю xxx.sh вручную (sh запускает доступную playbook после установки credstash - следовательно, запуск вручную - более быстрый способ протестировать playbook), а SSHing на экземпляре EC2 - ошибка переключает между двумя сообщениями об ошибках, которые я указал выше. Я не разработчик на Python, поэтому мне может чего-то не хватать, пожалуйста, не могли бы вы указать мне правильное направление?

1 ответ

Решение

Скорее всего, этот периодический сбой может быть из-за медленного ответа от вашего внутреннего PYPI_REPO. Чтобы подтвердить это, вы можете использовать-vв вашей команде pip install, чтобы увеличить подробность вывода pip. Затем вы можете проанализировать вывод пипса, чтобы проверить, где происходит сбой.

Вы также можете установить большее значение тайм-аута, используя --timeout 60в вашей команде pip. Значение тайм-аута по умолчанию - 15 секунд. Это значение тайм-аута также можно установить с помощью файла конфигурации pip (%VIRTUAL_ENV%\pip.ini).

[global]
timeout = 60
Другие вопросы по тегам