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

时间:2019-09-06 12:48:35

标签: python python-3.x pip python-venv

让我在开始之前先说一下我已经读过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返回:

(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的安装,以防万一甚至打破了某些东西。

任何建议都值得赞赏。

1 个答案:

答案 0 :(得分:0)

我有一个临时的解决方法。

/etc/pip.conf包含:

[global]
user = true

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

这感觉不是一个正确的解决方案,因为它在2天前可以正常工作,并且一个月以来没有更改全局文件。谁知道,也许更新会破坏某些东西。如果其他人有更好的解决方案,请随时分享。