如何向virtualenv添加新的默认包?

时间:2012-08-19 07:59:27

标签: python virtualenv ipython

当我创建virtualenv时,它会安装setuptools和pip。是否可以将新包添加到此列表中?

用例示例:

  • this solution以后在virtualenv中使用ipython(来自this question)需要在每个virtualenv中安装ipython(除非我允许使用system-site-packages)。
  • 或者,如果我正在进行唯一的烧瓶/ pygame / frameworkp开发,我会在每个virtualenv中都想要它。

3 个答案:

答案 0 :(得分:2)

您可以编写一个Python脚本,例如说context,它扩展了personalize_venv.py类并覆盖了EnvBuilder方法,用于安装所需的任何默认软件包。

您可以从https://docs.python.org/3/library/venv.html#an-example-of-extending-envbuilder中获取基本示例。

这不需要钩子。使用指向您的venv目录的命令行参数post_setup()直接运行脚本。挂钩是dirs类的post_setup()方法本身。

答案 1 :(得分:1)

您可以使用引导脚本来执行任何操作 见https://virtualenv.pypa.io/en/latest/reference.html#creating-your-own-bootstrap-scripts

我没有使用它的经验,但它似乎是您想要的,来自手册。

答案 2 :(得分:1)

我从选择的正确答案中采取了不同的方法。

我选择了我的目录,例如~/.virtualenv/deps,并通过

在那里安装了软件包
pip install -U --target ~/.virtualenv/deps ...

接下来postmkvirtualenv我提出以下内容:

# find directory
SITEDIR=$(virtualenvwrapper_get_site_packages_dir)
PYVER=$(virtualenvwrapper_get_python_version)

# create new .pth file with our path depending of python version
if [[ $PYVER == 3* ]];
then
    echo "/Users/home/.virtualenvs/elpydeps3/" > "$SITEDIR/extra.pth";
else
    echo "/Users/home/.virtualenvs/elpydeps/" > "$SITEDIR/extra.pth";
fi

Post that basically says the same thing