【问题标题】:Why is my venv using a different pip version than I have installed为什么我的 venv 使用的 pip 版本与我安装的不同
【发布时间】:2020-05-02 02:35:26
【问题描述】:

我正在设置虚拟环境。我收到有关过时 pip (19.2) 的警告,因此我在全球 (macos) 系统上更新了 pip sudo -H python3 -m pip install --upgrade pip。它似乎有效,但是当我制作一个新的 venv 时,我仍然得到旧的 pip 版本。

% pip --version           
pip 20.1 from /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pip (python 3.8)
% python3 -m pip --version
pip 20.1 from /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pip (python 3.8)
% rm -rf .venv # make sure
% python3 -m venv .venv   
% . .venv/bin/activate    
(.venv)     % python3 -m pip --version
pip 19.2.3 from /Users/marvin/.venv/lib/python3.8/site-packages/pip (python 3.8)
(.venv)     % pip --version           
pip 19.2.3 from /Users/marvin/.venv/lib/python3.8/site-packages/pip (python 3.8)

旧版本从何而来?

【问题讨论】:

  • 每个 venv 都安装了自己的 pip 版本。因为与宽系统python完全隔离。你可以拥有 N 个不同的 Python 环境和 M 个 Python 版本。

标签: python pip


【解决方案1】:

在任何新创建的 venv 中重新安装 Pip。 venv 的默认 pip 版本与 Python 版本相关联,并且完全独立于您可能在系统上安装的任何 pip 版本。旧版本来自与 stdlib ensurepip 模块捆绑在一起的 wheel file。这允许用户在没有可用互联网连接的情况下创建 venv,正如 venv docs 提到的那样:

除非给出--without-pip 选项,否则ensurepip 将被调用以引导pip 进入虚拟环境

你可以通过ensurepip.version查看捆绑的pip版本:

>>> import ensurepip
>>> ensurepip.version()
'19.2.3'

Python 3.8.2 是 vendoring pip 19.2.3 and setuptools 41.2.0,与您看到的相符。

要使用最新的 pip 版本直接创建 venvs,而不是使用旧的 pip 创建它们然后升级 pip 版本,请参阅此答案:

How to get “python -m venv” to directly install latest pip version

【讨论】:

  • 阅读上面的句子 - 而不是探索 impl 的核心 - 有些事情没有意义(直到,也许,我想到它)。 “在没有互联网连接的情况下制作 venv。”我安装了 20.1,不需要互联网。但我意识到venv 不只是复​​制文件,它正在安装一个包。它不能只是将一些 20.1 文件复制到 venv 中。所以你关于捆绑轮的观点是缺失的部分(对我来说)。我可能会建议改写您的答案以指出这种区别。谢谢
  • @Marvin 这个“缺失的东西”实际上是答案的第一行:pip 在创建的 venv 中重新安装。如果您认为它的措辞可以更清晰,请随时编辑...
  • 我理解“pip 已重新安装”。我将我的全局 python pip 升级到 20.1,因为显然我使用的 python 是 pythonImUsing -m venv 正在安装的地方。所以不清楚的不是pip is installed anew 这就是原因。 venv 没有使用我的全局站点包中的那个(在 pythonImUsing 中)。但是,清晰是意见,你的答案,我的 tl;dr cmets,你很有帮助的参考答案可能就足够了。 ;-)
  • 在阅读了此处链接的答案后,在我看来,最直接、最干净的方法实际上就是每次手动升级 pip。在您激活新的 venv 之后但在安装其他任何东西之前,相当于在您的工作流程中添加了一行:python -m pip install -U pip
猜你喜欢
  • 1970-01-01
  • 2013-01-15
  • 1970-01-01
  • 2015-12-07
  • 2014-09-18
  • 2017-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多