venv vs virtualenv-为什么venv不使用当前的pip和setuptools?

Lio*_*hon 5 python pip virtualenv python-venv ubuntu-16.04

当使用python -m venv env创造python3.X一个新的虚拟环境中,env不包含pipsetuptools版本我期望的那样。相反,它包含很“旧”版本:pip (8.1.1)setuptools (20.7.0)为2018年6月的。

在另一方面,当使用virtualenv env(通过安装pip install virtualenv),画中画和setuptools的包都是最新的,即pip (10.0.1)setuptools (39.2.0)为2018年6月的。

据我了解,它venv构建虚拟环境首选模块,因为它无需创建Python解释器的新实例,并且无需安装任何内容即可使用现有模块(Linux中的符号链接,Windows中的副本)(https: //www.reddit.com/r/learnpython/comments/4hsudz/pyvenv_vs_virtualenv/d2s2cda)。

为什么说venvpip版本不匹配当前的系统吗?而且使用的行为virtualenv是如此不同?

PS:

短期的解决方案是使用pip install --upgrade pipenv。但这对我来说似乎不对。最小可行的解决方案

$ 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 env
$ . env/bin/activate
(env) $ # Here I am at version 8.1.1 of pip. Why did venv create its own pip,
(env) $ # instead of linking to the system one? As seen before, that was 10.0.1.
(env) $ 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
(env) $ pip list
Package       Version
------------- -------
pip           10.0.1 
pkg-resources 0.0.0  
setuptools    20.7.0 
(env) $ # Solved, now pip is the one I was expecting!
Run Code Online (Sandbox Code Playgroud)

小智 4

不是试图恢复旧线程,但这是我发现的答案,解释为什么使用 venv 时会发生这种情况-简短答案-

venv 调用 Ensurepip.version() 来获取获取捆绑 pip 版本的版本。

来自此处的原始答案的学分