在虚拟环境中将包安装到全局站点包

Pip installing packages to global site-packages when inside virtual environment

首先声明我已阅读 pip installing in global site-packages instead of virtualenv 但它没有解决我的问题。

当使用 python -m venv venv(或任何其他名称)创建虚拟环境然后使用 source venv/bin/activate 激活所述 venv 时,运行 pip install [package] 实际上将软件包安装到(用户)全局 python 站点包,位于 ~/.local/lib/python3.7/site-packages/.

有趣的是,它总是尝试安装包,但无法识别它们是全局安装的,这意味着它最初是在正确的位置寻找包。

我是运行 Manjaro Linux,运行最新更新。

我在 ~/Stuff/tests/venv 中创建了这个虚拟环境。 运行 which pipwhich python returns:

(venv) angelin@asgard:~/Stuff/tests/venv $ which pip
/home/angelin/Stuff/tests/venv/bin/pip
(venv) angelin@asgard:~/Stuff/tests/venv $ which python
/home/angelin/Stuff/tests/venv/bin/python

检查所述 pip 可执行文件显示正确的 shebang:

(venv) angelin@asgard:~/Stuff/tests/venv $ cat bin/pip
#!/home/angelin/Stuff/tests/venv/bin/python
# -*- coding: utf-8 -*-
...

我的路径,在 virtualenv 中,也首先指向虚拟环境:

(venv) angelin@asgard:~/Stuff/tests/venv $ echo $PATH
/home/angelin/Stuff/tests/venv/bin:/home/angelin/.local/bin:...

手动 运行 python -m pipvenv/bin/python venv/bin/pip 产生相同的结果。
PYTHONPATH 变量未设置。
我已经尝试使用 pacman -S python python-pip 重新安装 python 和 pip,但我相信这只会重新安装全局包(位于 /usr/bin 中,我不想弄乱 .local安装以防万一我破坏了比实际更多的东西。

如有任何建议,我们将不胜感激。

我有临时解决方法。

/etc/pip.conf 包含:

[global]
user = true

没有本地 pip 配置文件,这导致它总是通过 --user 选项。我不确定如何正确配置我的本地文件,但我创建了它并设置了 user = false 并且只会在 venvs 之外手动传递 --user 选项。

感觉这不是一个正确的修复,因为它在 2 天前工作正常,并且全局文件已经一个多月没有更改。也许更新破坏了某些东西,谁知道呢。如果大家有更好的解决方案,欢迎分享。