Python 如何将全局安装的软件包导入virtualenv文件夹

Python 如何将全局安装的软件包导入virtualenv文件夹,python,ubuntu,virtualenv,Python,Ubuntu,Virtualenv,因此,我有一个名为venv的virtualenv文件夹用于我的python项目 我可以跑: venv/bin/pip install -r requirements.txt 它安装了除M2Crypto之外的项目所需的所有需求。安装它的唯一方法是通过apt get: apt-get install python-m2crypto 如何将通过apt安装的软件包添加到venv文件夹 venv/bin/pip install -I M2Crypto -I强制将其也安装到virtualenv中,即使

因此,我有一个名为venv的virtualenv文件夹用于我的python项目

我可以跑:

venv/bin/pip install -r requirements.txt
它安装了除M2Crypto之外的项目所需的所有需求。安装它的唯一方法是通过apt get:

apt-get install python-m2crypto
如何将通过apt安装的软件包添加到venv文件夹

venv/bin/pip install -I M2Crypto
-I
强制将其也安装到virtualenv中,即使它已经在全球范围内安装

--system-site-packages
允许访问虚拟环境的全局站点包模块

你可以做:

$ sudo apt-get install python-m2crypto
$ virtualenv env --system-site-packages
。。。然后您就可以访问virtualenv中的
m2crypto
(以及所有其他系统范围安装的软件包)。

我到底做了什么:

cp -R /usr/lib/python2.7/dist-packages/M2Crypto /home/richard/hello-project/venv/lib/python2.7/site-packages/
cp -R /usr/lib/python2.7/dist-packages/OpenSSL /home/richard/hello-project/venv/lib/python2.7/site-packages/

toggleglobalsitepackages
将切换对系统范围
站点软件包的访问


注意:您需要获取此命令;香草
virtualenv
不包括它。使用
virtualenvwrapper
您还可以获得非常有用的
mkvirtualenv
rmvirtualenv
命令,以及其他命令。

真正简单的解决方案

在虚拟环境目录中,编辑文件
pyvenv.cfg
。设置参数
include system site packages=true
,然后保存文件。 下次激活(
source venv/bin/activate
)您的环境时,将显示全局安装的模块

可通过
pip列表
进行验证


享受吧

我试试看。为什么它没有记录在pip--help的输出中。它记录在
pip-help-install
中。
-I
标志特定于
安装
命令,因此不显示在全局标志列表中(还有许多其他命令特定的标志)。谢谢。这不是很有效。你看,M2Crypto实际上可以通过pip安装,但是库中有一个bug使得Ubuntu 12.04 LTS的安装失败。他们发布了一个补丁,但对我不起作用。。。因此,当我尝试您的命令时,它会尝试从pip存储库下载库并安装它,而不仅仅是复制apt软件包。在这种情况下,您可能会希望对这一实例使用
--system site packages
。只要您小心地只安装希望在基本python安装中全局共享的软件包,这就是方法。但是如果虚拟环境可以访问全局站点软件包,那么使用虚拟环境又有什么意义呢?Richard Knop,这样您就可以在自己的virtualenv中安装其他软件包,而无需使用root,而不会干扰系统python。如果您的虚拟环境已经设置好,您不想重新创建,并且正在使用,或者打开使用VirtualEnvrapper来管理您的虚拟环境,您可以通过运行@RichardKnop添加对
--系统站点包的访问权限。
这有什么意义?这里有一个例子。我有多个不同库的项目,但我对所有项目都使用
auto\u py\u to\u exe
,只有在安装VirtualNVRapper时才使用。否则,您将获得
toggleglobalsitepackages:command not found
截至今天,它现在是
toggleglobalsitepackages
virtualenvwrapper
已安装,但我仍然获得
toggleglobalsitepackages:command not found
。那些虚拟人真的需要设计得更好。似乎是IMHO的一项基本必备功能。这应该内置到虚拟环境中是的,我想知道是否有一种virualenv方法可以在创建环境后将安装到主机上的系统级软件包安装到环境中。这是我能找到的唯一不需要sudo访问的解决方案。我的问题是,我需要在virtualenv中导入一个预安装的全局软件包(这需要sudo),我想在其中以可编辑模式安装其他软件包。这在使用
--系统站点包创建virtualenv时是不可能的。所以这对我帮助很大,谢谢!