Tox устанавливает неверную версию pip для виртуального env
Я использую tox для управления некоторыми средами тестирования. У меня есть зависимость (backports.ssl-match-hostname), которую я не могу загрузить с использованием последней версии пипса, поэтому мне нужно вернуться к пункту 8.0.3, чтобы позволить установке работать.
Я включил версию кода версии 8.0.3 внутри моего файла tox.ini для зависимостей.
deps=
pip==8.0.3
Однако, когда я бегу
source .tox/py27/bin/activate
и войдите в виртуальную среду тестирования, а затем запустите
pip --version
Я в итоге
8.1.2
Однако, вне моей токсической среды, когда я запускаю ту же команду, я получаю
8.0.3
Есть ли что-то особенное, что ток делает при захвате пипса? Почему я не могу указать версию пипса, которую я хочу использовать в качестве зависимости?
EDIT: чтобы добавить к этому, кажется, что я могу захватить зависимость pip == 8.0.3, но для других зависимостей они все еще работают из команды, запущенной с помощью pip == 8.1.2
Итак, мне нужно сначала захватить pip == 8.0.3, а затем установить его, захватить все остальное. Все еще не уверены, почему ток начинается с pip == 8.1.2
Ответы
Ответ 1
Это, по-видимому, было результатом пакета "virtualenvs" python, содержащего предварительно выбранную группу пакетов python, на которую он ссылается, один из которых был последним и самым лучшим пипсом.
Я не знаю, является ли это предпочтительным способом сделать это, но я нашел успех, запустив
pip uninstall virtualenv
А затем переустановить с версией, которая работала
pip install virtualenv==15.0.1
С "правильной" версией virtualenv на месте я смог запустить свою команду tox
source .tox/py27/bin/activate
и посмотреть желаемую версию пипса
pip --version
pip 8.0.3
Ответ 2
Обходной путь для этого можно найти здесь: https://github.com/pypa/pip/issues/3666
Хотя для его работы мне пришлось написать "pip install pip == 8.1.1" в моем скрипте. Так что напомню:
Добавьте в проект сценарий pip.sh:
#!/bin/bash
pip install pip==8.1.1
pip install "[email protected]"
Добавьте к вашему tox.ini:
install_command = {toxinidir}/pip.sh {opts} {packages}
Ответ 3
Я недавно столкнулся с этой проблемой. У меня это было какое-то время, но он просто не регистрировался, потому что у меня были такие случайные сбои с кодом Python 2/3. Другой способ, которым это может случиться, - это, как и я, изменить виртуальный интерфейс между различными версиями Python и не очищать.
Проверьте /bin
или /Scripts
чтобы узнать, указывает ли python2
на python
. Если virtualenv - это Python 3, то это будет означать, что python2
самом деле вызывает Python 3. И наоборот, если вы virtualenv - это Python 2, и вы хотите протестировать код Python 3.
Ответ 4
Новые версии virtualenv предлагают загрузить последние версии pip
, setuptools
и wheel
- вы можете отключить это поведение при работе через tox с помощью пакета tox-virtualenv-no-download. См.: https://github.com/asottile/tox. -virtualenv-нет-скачать # поживем почему