使用 Python virtualenv --system-site-packages 安装本地包
Installing local packages with Python virtualenv --system-site-packages
我知道这个话题已经被打死了,但我无法找到解决我在 SO 或其他地方遇到的问题的方法,所以我怀疑我的系统中某处可能存在错误。
我使用的是 Python 3.4 的旧版 RHEL 6 平台。我正在开发一个将 运行 在此使用 Qt 的平台上的应用程序。我已经通过 yum
(例如 qt-devel
、pyqt4-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
我知道这个话题已经被打死了,但我无法找到解决我在 SO 或其他地方遇到的问题的方法,所以我怀疑我的系统中某处可能存在错误。
我使用的是 Python 3.4 的旧版 RHEL 6 平台。我正在开发一个将 运行 在此使用 Qt 的平台上的应用程序。我已经通过 yum
(例如 qt-devel
、pyqt4-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