pyvenv устанавливает неправильную версию pip

Я создаю virtualenv с pyvenv env, но установленная версия pip устарела. Я могу вручную обновить pip в виртуальной среде, но я бы хотел, чтобы правильная версия была установлена ​​автоматически.

Без активации venv:

~> pip -V
pip 7.1.2 from /usr/lib/python3.4/site-packages (python 3.4)

Установка венва:

~> pyvenv env
~> source env/bin/activate.fish

При активированном venv:

~> pip -V
pip 6.0.8 from /home/syntonym/test/env/lib/python3.4/site-packages (python 3.4)

Я использую Arch, и pip управляется как pip, так и pacman (диспетчером пакетов Arch), что, вероятно, не очень хорошая идея. Я до сих пор понятия не имею, откуда pyvenv получает версию pip 6.0.8 или как это исправить. Переустановка через пакман не помогла.

РЕДАКТИРОВАТЬ:

surepip утверждает, что он уже обновлен:

~> python -m ensurepip --upgrade
Ignoring indexes: https://pypi.python.org/simple
Requirement already up-to-date: setuptools in /usr/lib/python3.4/site-packages
Requirement already up-to-date: pip in /usr/lib/python3.4/site-packages

person syntonym    schedule 30.08.2015    source источник


Ответы (1)


Вы можете обновить pip в виртуальной среде вручную, выполнив

pip install -U pip

Вы столкнулись с этой проблемой, поскольку venv использует ensurepip для добавления pip в новые среды:

Если не указан параметр --without-pip, будет вызываться surepip для начальной загрузки pip в виртуальную среду.

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

Surepip предназначен не для того, чтобы предоставить вам новейшие pip, а просто «a» pip. Чтобы получить новейшую версию, используйте ручной способ, описанный в начале этого поста.

person Alik    schedule 30.08.2015
comment
Ручное обновление pip в venv работает. surepip утверждает, что он уже актуален (см. редактирование). Или ignoring indexes указывает на какую-то ошибку? Я не нахожу так много информации о том, что это значит. - person syntonym; 30.08.2015
comment
@syntonym мой плохой, я неправильно понял твой вопрос. Что ж, нет простого способа обновить pip без обновления его компонентов, поставляемых в комплекте с surepip. - person Alik; 30.08.2015
comment
Если я правильно прочитал ваш ответ, вы правильно поняли мой вопрос. pip актуален так же, как и surepip (если я правильно прочитал вывод surepip). Но если я создам virtualenv через pyvenv, версия pip будет 6.0.8, которая устарела. Я бы хотел, чтобы этот пункт в venv был обновленным пунктом (7.1.2) без ручного обновления пункта в venv. Ваш ответ на обновление surepip звучал хорошо, но... это не сработало. - person syntonym; 30.08.2015
comment
@syntonym Я уверен, что вы получаете старые версии pip в своих виртуальных средах из-за гарантии. Однако я не знаю хороших способов обновить pip внутри этого пакета. - person Alik; 30.08.2015
comment
@syntonym, чтобы проверить это, вы можете ввести в консоль Python import ensurepip print(ensurepip.version()) - person Alik; 30.08.2015
comment
Ты прав! ensurepip.version() дает 6.0.8. python -m ensurepip --upgrade действительно обновляет версию pip в системе (если она ниже версии в surepip). Спасибо, что указали мне правильное направление! - person syntonym; 30.08.2015
comment
@syntonym, вы можете попробовать обновить surepip вручную, используя файлы из этой недавней фиксации в CPython - person Alik; 30.08.2015