让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中打印所有当前可用的库)。

那么,有没有办法做一个选择性的变种

virtualenv --system-site-packages
131511 次浏览

你可以使用--system-site-packages,然后为你的virtualenv“过度安装”特定的东西。这样,您安装到virtualenv中的所有内容都将从那里获取,否则将从您的系统中获取。

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

安装虚拟环境

virtualenv --system-site-packages

并使用pip install -U to install matplotlib

我在Ubuntu 20.04上使用python.3.8和pip3已经晚了。

摆脱烦人的.local安装的唯一方法是设置一个环境变量(bash):

export PYTHONNOUSERSITE="true"

这并不需要是“真实的”;任何方法都可以。我不会选0。: -)