在所有 virtualenvs 中安装某些包

Install certain packages in all virtualenvs

最近我开始使用virtualenv,它改变了我的生活,让很多事情变得如此简单。但是,有些包我希望在所有 virtualenvs 中都可用,但我还没有想出如何做到这一点。每次我创建一个新的 virtualenv 时,有没有办法让 pip 安装某些包?

来自 documentation:如果您使用 virtualenv --system-site-packages ENV 构建,您的虚拟环境将从 /usr/lib/python2.7/site-packages(或您的全球站点的任何位置)继承包-packages 目录是).

如果有一个您一直想要的特定集合,它不同于全局站点包集合,您可以编写一个简单的包装脚本来设置环境、激活它并安装这些包。

#!/bin/sh
virtualenv ""
. ""/bin/activate
pip install six  # f'rinstance

如果您将此保存为 venvwrapper,您会在 .bashrc 或类似文件中找到 alias virtualenv=venvwrapper

虽然这个问题的其他答案都非常有价值且信息丰富,但我一直在寻找类似于@Sergey Gornostaev 建议的解决方案。但是,我在 Ubuntu 上并通过 apt 安装了我的大部分 Python 软件包(至少是我希望在全球范围内可用的软件包)。这意味着我的包裹最终在 dist-packagessite-packages 仍然是空的,所以我不能使用@Sergey 的解决方案。相反,我使用了 this answer.

中的解决方案

基本上,如果可能的话,我会通过 apt 安装我希望在所有环境中可用的软件包。然后我将以下(或它的一些变体)添加到我的 .bashrc:

export PYTHONPATH=/usr/lib/python2.7/dist-packages:/usr/local/lib/python2.7/dist-packages

这样所有这些包都可用,然后我可以通过 pipvirtualenv 中将单独的包安装到给定的虚拟环境中。它可能不是一个理想的解决方案,但它满足了我当前的需求,所以这就是我现在将要使用的。