Python 使virtualenv从全局站点包继承特定包

Python 使virtualenv从全局站点包继承特定包,python,virtualenv,Python,Virtualenv,我正在寻找一种方法来制作一个virtualenv,它只包含一些基本python安装的库(我选择了这些库) 更具体地说,我试图在创建virtualenv的过程中将matplotlib导入virtualenv。无法使用pip或easy_install高效地安装它,因为它缺少一些fortran编译器库。到目前为止,我的做法是从 /usr/lib/python2.7/dist-packages/ to virtualenv_name/lib/python2.7/dist-packages/ 但是,这会

我正在寻找一种方法来制作一个virtualenv,它只包含一些基本python安装的库(我选择了这些库)

更具体地说,我试图在创建virtualenv的过程中将matplotlib导入virtualenv。无法使用pip或easy_install高效地安装它,因为它缺少一些fortran编译器库。到目前为止,我的做法是从

/usr/lib/python2.7/dist-packages/ to virtualenv_name/lib/python2.7/dist-packages/
但是,这会阻止手动导入的链接由yolk注册(它在virtualenv中打印所有当前可用的LIB)

那么,有没有一种方法可以对基因进行选择性变异

virtualenv --system-site-packages

您可以使用
--系统站点包
,然后为您的virtualenv“过度安装”特定的东西。这样,您安装到virtualenv中的所有内容都将从此处获取,否则将从您的系统获取。

您可以使用
virtualenv--clear
。它不会安装任何软件包,然后安装所需的软件包。

使用
virtualenv--system-site-packages
创建环境。然后,激活virtualenv,当您希望在virtualenv而不是系统python中安装东西时,使用
pip install--ignore installed
pip install-I
。这样,即使存在系统范围的版本,pip也会在本地安装您所请求的内容。python解释器将首先查看virtualenv的包目录,因此这些包应该隐藏在全局包的后面。

使用安装virtual env

virtualenv --system-site-packages

并使用
pip install-U安装matplotlib

我不太清楚是什么,但会尝试:如果您使用--system site packages选项创建一个virtualenv,系统将首先尝试在您的virtualenv中查找包,如果在那里找不到,它将尝试在您的系统python安装中查找。只有当它在那里也找不到它时,它才会引发并导入恐怖。这种方法的唯一问题是,您现在拥有所有的系统库。您可能希望对安装内容进行严格控制。目前尚不清楚的是,这实际上是如何实现的!如果在系统中存在myprog的系统站点软件包中创建的virtualenv中安装myprog,则不会“过度安装”myprog。它只会发现myprog存在,并说“需求已经满足”。所以。。。您的意思是什么?要“过度安装”系统站点软件包中已经存在的软件包,请在virtualenv中运行pip,并附带
--强制重新安装
一个温和的提醒--如果以下选项之一似乎有效,请选择一个答案。看起来过去几个月有12个人为您进行了测试…为什么要纠缠OP?我们都可以看到哪个是最流行的答案;他是否接受真的重要吗?我认为他自己测试的正直性应该受到赞赏,而不是简单地勾选最流行的答案。2013:正确答案和错误答案之间的答案分数非常相似。奥普说他会测试。2016年:Michael Scheper对OP(三年前)所说的测试印象深刻。2017年:我再次遇到这个问题,我觉得很有趣。没有正确的答案。OP要求选择
--系统站点包
。答案建议使用非选择性的
--系统站点软件包
,然后在本地过度安装一些软件包,这是不同的,具有不同的含义。通过使用-I,您将始终重新安装软件包,即使它们已经存在于系统范围的站点软件包目录中。如果改用-U,它将在您的virtualenv中安装更新版本的软件包,但不会以所需版本重新安装系统中已有的任何软件包。您知道在以前创建的虚拟环境中是否有“激活--system site packages”选项的方法吗?我想避免重新安装所有本地软件包的麻烦!是的,我发现这个答案很有趣,但是我有一个非常奇怪的例子,它不起作用。我有一个未启用全局站点包的virtualenv。但出于某种原因,我不知道有一个软件包是从全球系统中使用的。从virtualenv内部对包使用
pip install-I
不起作用。最后,我临时卸载了virtualenv和全局系统中的包,然后我可以将它重新安装到virtualenv和系统中(按顺序)。因此,现在它可以正常工作了。-1问题要求使某些包可见,而不是所有包,除了阴影包。将有限的数据集列入白名单比将所有数据都列入白名单要安全得多,因为它允许保证除明确列入白名单的数据包外,所有数据包都必须存在于venv中。这与问题的要求相反。这并不是对如何使用某些系统范围软件包的实际问题的回答