pip 包安装和 virtualenv

pip 包安装和 virtualenv

早上好!

快速摘要:我在使用 pip 和 virtualenv 时遇到了问题。无论我的 virtualenv 是否已激活,我的 pip 都会将软件包安装到 venv 的 site-packages 中,但当我在 venv 之外时,python 会从完全不同的文件夹(详细信息如下)读取软件包,这使得我无法在 venv 之外为我的 python 安装软件包。我猜我需要确保 pip 在 venv 内部或外部安装在不同的地方。我似乎找不到为我的 pip 指定此位置的配置文件,而且我查看过的大多数 wabpages 要么与我的问题无关,要么远远超出了我的理解范围……

一些细节(我对使用 ubuntu、linux 和 python 的细节还不熟悉,所以如果我遗漏了任何重要信息,请告诉我,我会尽力填补缺失的内容):在 venv 之外:

$which python

结果是

usr/bin/python

$which pip

给出

/home/username/.local/bin/pip

我发现 python 站点包可以识别它在哪里寻找包,所以这是使用它时的输出(我还包括了通知我问题的内容):

$ python
Python 3.6.9 (default, Nov  7 2019, 10:44:02) 
[GCC 8.3.0] on linux
>>> import site
>>> print(site.getsitepackages())
['/usr/local/lib/python3.6/dist-packages', '/usr/lib/python3/dist-packages', '/usr/lib/python3.6/dist-packages']
>>> import numpy
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'numpy'
>>> exit()
$ pip install numpy
Requirement already satisfied: numpy in ./projectFolder/venv/lib/python3.6/site-packages (1.17.4)

查看目录,我找不到 python 的 site-package 目录,但我可以找到 dist-packages(如上所示),而在 venv 中有一个 site-packages,pip 在其中安装包。

激活我的 venv 会产生以下结果:

(venv)$ which python
/home/username/projectFolder/venv/bin/python
(venv)$ which pip
/home/username/projectFolder/venv/bin/pip

使用 venv 下的站点可得到:

(venv)$ python
Python 3.6.9 (default, Nov  7 2019, 10:44:02) 
[GCC 8.3.0] on linux
>>> import site
>>> print(site.getsitepackages())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'site' has no attribute 'getsitepackages'

答案1

virtualenv 维护者在这里很好地描述了这个问题:https://github.com/pypa/virtualenv/issues/737#issuecomment-319078189

我将在这里引用他的评论:

问题(据我所知)是 virtualenv 实现了它自己的 site.py 版本,它不能完美地跟踪核心 Python 版本(这是上面提到的#355 背后的问题 - 如果您点击该链接,以及从那里链接的各种问题的链接,您就会了解背景情况)。

修复这个问题并不像“同步到核心 site.py”那么简单,因为我们需要支持多个 Python 版本,并且 site.py 在它们之间发生了变化。

相关内容