venv vs virtualenv - Почему venv не использует текущий pip и setuptools?

Когда используешь python -m venv venv создать новую виртуальную среду в python3.X, venv не содержит pip а также setuptools версии я бы ожидал. Вместо этого он содержит довольно "старые" версии: pip (8.1.1) а также setuptools (20.7.0),

С другой стороны, при использовании virtualenv venv (устанавливается через pip install virtualenv), пакеты pip и setuptools являются самыми последними, т.е. pip (10.0.1) а также setuptools (39.2.0) по состоянию на июнь 2018 года.

Как я понял, venv является предпочтительным модулем для создания виртуальных сред, поскольку ему не нужно создавать новый экземпляр интерпретатора Python, и он использует существующие модули (символические ссылки в Linux, копии в Windows) без необходимости устанавливать что-либо ( https://www.reddit.com/r/learnpython/comments/4hsudz/pyvenv_vs_virtualenv/d2s2cda).

Как это случилось venv "s pip версия не соответствует текущей версии системы? И что поведение с помощью virtualenv так отличается?

PS:

Краткосрочное решение заключается в использовании pip install --upgrade pip в venv, Но это не кажется мне правильным. Минимальный жизнеспособный пример:

$ python --version
Python 3.6.5
$ pip --version
pip 10.0.1 from /home/lionel/.local/lib/python3.6/site-packages/pip (python 3.6)
$ python -m venv venv
$ . venv/bin/activate
(venv) $ pip install --upgrade pip
Collecting pip
  Using cached https://files.pythonhosted.org/packages/0f/74/ecd13431bcc456ed390b44c8a6e917c1820365cbebcb6a8974d1cd045ab4/pip-10.0.1-py2.py3-none-any.whl
Installing collected packages: pip
  Found existing installation: pip 8.1.1
    Uninstalling pip-8.1.1:
      Successfully uninstalled pip-8.1.1
Successfully installed pip-10.0.1
(venv) $ pip list
Package       Version
------------- -------
pip           10.0.1 
pkg-resources 0.0.0  
setuptools    20.7.0 

0 ответов

Не пытаюсь оживить старую ветку, но вот ответ, который я нашел, почему это происходит при использовании venv- короткий ответ-

venv вызывает surepip.version(), чтобы получить версию, которая получает версию связанного пакета.

Кредиты на оригинальный ответ отсюда:

Другие вопросы по тегам