虚拟环境中的pip版本不匹配

3
我对虚拟Python环境的工作方式感到困惑(Python 3.6,使用venv)。我已经设置好了我的虚拟环境,并在命令行中激活它。我期望从此之后的所有操作都使用虚拟环境中的python和pip命令(因为这些目录在激活时已添加到PATH中)。
问题是,当我在我的venv中运行pip --version时,它返回pip 10.0.1。但是,当我尝试用python -m pip install --upgrade pip升级它时,我得到了Requirement already up-to-date的提示。
(venv) PS C:\Python\files\myproj> pip --version
> pip 10.0.1 from c:\python\files\myproj\venv\lib\site-packages\pip-10.0.1-py3.6.egg\pip (python 3.6)
(venv) PS C:\Python\files\myproj> python -m pip install --upgrade pip
> Requirement already up-to-date: pip in c:\python\files\myproj\venv\lib\site-packages (18.0)

那么出了什么问题呢?为什么命令行命令没有针对与Python相同的pip?如何解决这个问题呢?


1
你的 pip 命令指向的是一个与你的虚拟环境中的版本不同的 pip 版本。而 python -m pip 命令使用的则是你的虚拟环境中的版本。 - Klaus D.
那么,当处于活动状态的 venv 时,pip 版本是全局版本吗?只有全局 python 被替换为 venvpython 吗? - Bram Vanroy
您的PATH变量似乎没有正确设置。 - Klaus D.
你能详细说明一下吗? - Bram Vanroy
应该通过“更新”卸载pip 10.0.1,然后在您的venv中运行pip listpip uninstall pip 10.0.1,再次进行更新。 - Gang
@KlausD。但是为什么当我在已激活的环境中使用pip install a-package时,该软件包被安装在环境中而不是全局呢? - Bram Vanroy
1个回答

0

pip 在虚拟环境中仍然指向全局版本。但是,python 不会这样做,而是使用虚拟环境。

这意味着当您运行 pip --version 时,您将获得全局 pip 版本。当您运行 python -m pip install --upgrade pip 时,您正在使用 venv 版本的 python,该版本显然已经具有最新的 pip。要确认这一点,您可以运行 python -m pip --version,您应该会得到最新版本的输出。


但是为什么当我在激活的环境中使用 pip install a-package 时,该软件包会安装在该环境中而不是全局呢? - Bram Vanroy
嘿,@BramVanroy,你为什么取消了我的答案?你在评论中提出的问题是另一个问题。 - Azrael
至少在我的设置中,这不是发生的情况。$ python3 -m pip --version pip 19.3.1 from /usr/local/lib/python3.7/site-packages/pip (python 3.7) $ source env/bin/activate $ python3 -m pip --version pip 19.2.3 from /Users/mtopol/python/env/lib/python3.7/site-packages/pip (python 3.7) - Marko Topolnik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接