Почему Python сбрасывает pip до версии 10.0.1 в каждой новой виртуальной среде?

tl; dr: Почему версия pip сбрасывается на 10.0.1 каждый раз, когда я создаю новую виртуальную среду, а не автоматически клонируюсь из моей глобальной установки 18.0?

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

 $ pip install --upgrade pip 

И получите следующий вывод:

 Collecting pip Using cached https://files.pythonhosted.org/packages/5f/25/e52d3f31441505a5f3af41213346e5b6c221c9e086a166f3703d2ddaf940/pip-18.0-py2.py3-none-any.whl Installing collected packages: pip Found existing installation: pip 10.0.1 Uninstalling pip-10.0.1: Successfully uninstalled pip-10.0.1 Successfully installed pip-18.0 

Запуск pip -V за пределами виртуальной среды возвращает

 pip 18.0 from /usr/lib/python3.7/site-packages/pip (python 3.7) 

Таким образом, устаревшая версия создается только при создании новой виртуальной среды.

Это особенность модуля виртуальной среды python?

Для справки, я запускаю команду для создания новой виртуальной среды:

 $ python -m venv  

Я установил его, запустив

 $ pacman -S python python-pip 

Я запускаю его в Arch, и выводом python -V является Python 3.7.0 .

pip не сбрасывается при создании новой виртуальной среды. Когда вы создаете новую виртуальную среду, venv выполняет новую установку pip и setuptools в этой среде. Откуда берется версия pip ? Когда вы запускаете python -m venv , за установку pip отвечает модуль ensurepip который загружает новую установку pip . Вы можете проверить, какая версия pip связана с Python 3.7:

 $ python3 -c "import ensurepip; print(ensurepip.version())" 10.0.1 

Это ничего, что вы можете обновить или изменить самостоятельно; модуль является частью стандартной библиотеки. Когда был выпущен Python 3.7, последний pip был версии 10.0.1, поэтому он был в комплекте ( связанная проблема ). Версия 18 была выпущена позже. В следующий раз он, вероятно, будет обновлен в следующем выпуске Python (3.7.1).

Альтернатива: использование virtualenv

Если вы хотите, чтобы последний pip был установлен в новой виртуальной среде, вы можете переключиться на virtualenv :

 $ pip install --user virtualenv 

или установите всю систему, используя pacman :

 $ pacman -S python-virtualenv 

virtualenv обновляется чаще, чем Python, поэтому последняя версия устанавливает последние пакеты. Пример использования:

 $ virtualenv myenv --python=python3 --quiet $ source myenv/bin/activate (myenv) $ pip --version pip 18.0 from /Users/hoefling/.virtualenvs/myenv/lib/python3.7/site-packages/pip (python 3.7)