使用 Python virtualenv --system-site-packages 安装本地包

Installing local packages with Python virtualenv --system-site-packages

我知道这个话题已经被打死了,但我无法找到解决我在 SO 或其他地方遇到的问题的方法,所以我怀疑我的系统中某处可能存在错误。

我使用的是 Python 3.4 的旧版 RHEL 6 平台。我正在开发一个将 运行 在此使用 Qt 的平台上的应用程序。我已经通过 yum(例如 qt-develpyqt4-devel 等)安装了所有相关库,现在想使用 "editable" 安装我的应用程序包 pip install -e mypkg。我还有一些不在 yum 上的依赖要求,必须通过 pip.

安装

我想做的是创建一个 virtualenv,"inherits" 通过 yum 安装的系统包,但允许我 pip install 我自己的包到我家的 virtualenv 目录目录。

从我的谷歌搜索看来,最好的方法是使用系统的站点包目录创建一个虚拟环境:

$ python3 -m venv --system-site-packages ~/venv

但是,当我尝试将软件包安装到此 virtualenv 的 site-packages 目录时,它会尝试将其安装在 /usr/lib 下,但出现 Permission denied 错误。

所以看起来 --system-site-packages 选项使我的 virtualenv 完全共享我系统中的站点包目录,而不是将其用作 "base",其中可以在顶部分层更多包。

This answer 声明使用 pip install -I 应该做我想做的,但事实并非如此:

(venv) $ pip3 install -I bitstring
...
error: could not create '/usr/lib/python3.4/site-packages/bitstring.py': Permission denied

创建没有 --system-site-packages 开关的虚拟环境。创建环境后,转到创建环境的文件夹。它应该有一个文件 pyvenv.cfg。编辑此文件。它有(除其他文本外)一行

include-system-site-packages = false

将此行更改为:

include-system-site-packages = true

激活环境。模块安装现在将进入虚拟环境,系统站点包也可见。

在 Python 3.8 中,--system-site-packages 似乎按预期工作:

python3 -m venv --system-site-packages myProject
cat myProject/pyvenv.cfg 

home = /usr/bin
include-system-site-packages = true
version = 3.8.5

安装后astroid, isort, wrapt,我得到:

pip list -v
Package                Version              Location                                                Installer
---------------------- -------------------- ------------------------------------------------------- ---------
apturl                 0.5.2                /usr/lib/python3/dist-packages                                   
astroid                2.4.2                /home/to/no/MR/auto-gen/lib/python3.8/site-packages pip      
isort                  5.6.4                /home/to/no/MR/auto-gen/lib/python3.8/site-packages pip      
jedi                   0.15.2               /usr/lib/python3/dist-packages                                   
keyring                18.0.1               /usr/lib/python3/dist-packages                                   
wrapt                  1.12.1               /home/to/no/MR/auto-gen/lib/python3.8/site-packages pip

已安装的 'system' 软件包取自 /usr/lib/python3/dist-packages 而本地 (venv) 安装的软件包来自:/home/to/no/MR/auto-gen/lib/python3.8/site-packages