使用virtualenv

virtualenv 是一个用于创建和激活独立的Python环境的工具,该环境允许在不中断生产Python环境的情况下安装和试验Python包。当使用诸如 pip install -e . 例如,强烈建议在virtualenv中这样做。这通常比在系统站点包中安装Astropy的开发版本更好,并且必须跟踪您的环境是否处于“已知良好”的配置中,以供生产/科学使用。

使用virtualenv也是一种很好的方法,可以在不中断正常生产环境的情况下,试用您没有积极进行开发工作的软件的新版本。

我们不会在这里提供关于使用virtualenv的完整教程 — 上面链接的virtualenv文档是一个更好的起点。但下面是一个快速概述,介绍如何使用默认的Python版本为Astropy开发设置virtualenv:

  1. 安装:virtualenv

    $ pip install virtualenv
    

    或者(在Debian/Ubuntu上)::

    $ sudo apt-get install python-virtualenv
    

    等。

  2. (建议)在您有写访问权限的路径下为所有虚拟机创建根目录。例如::

    $ mkdir ~/.virtualenvs
    
  3. 创建 Astropy 虚拟环境:

    $ virtualenv --distribute --system-site-packages ~/.virtualenvs/astropy-dev
    

    这个 --system-site-packages 选项继承系统站点包目录中已经安装的所有包;这使您不必在virtualenv中重新安装诸如Numpy和Scipy之类的包。但是,如果您希望您的virtualenv使用Numpy的开发版本,您仍然可以将Numpy安装到virtualenv中,并且它将优先于站点包中安装的版本。

  4. 激活virtualenv::

    $ source ~/.virtualenvs/astropy-dev/bin/activate
    

    或者如果你使用csh变体:

    $ source ~/.virtualenvs/astropy-dev/bin/activate.csh
    

    virtualenv也可以在Windows上运行 — 有关详细信息,请参阅文档。

  5. 如果virtualenv成功激活,它的名称应该出现在shell提示符中:

    (astropy-dev) $
    

    可在任何时间通过以下方式禁用VirtualAV:

    (astropy-dev) $ deactivate
    
  6. 现在只要virtualenv激活,就可以使用 pip 将自动安装到您的virtualenv而不是系统站点包中。考虑将Astropy以开发模式安装到virtualenv中,如前所述 “激活”astropy的开发版本 .

在IPython中使用virtualenv

备注

从ipython0.13开始,这个功能已经内置到IPython中了,这些步骤对于IPython识别它是在启用virtualenv的情况下运行是不必要的。

每个virtualenv都有自己的 bin/ ,因为IPython是用纯Python编写的,所以可以始终将IPython直接安装到virtualenv中。但是,如果您不希望每次创建virtualenv时都安装IPython,那么让ipythonvirtualenv感知就足够了。

  1. 检查您是否已经在中拥有IPython配置文件 ~/.ipython/profile_default/ ;如果没有,请创建一个::

    $ ipython profile create
    
  2. 编辑 ~/.ipython/profile_default/ipython_config.py 并在末尾添加以下内容:

    import os
    
    execfile(os.path.join(os.environ['HOME'], '.ipython', 'virtualenv.py'))
    
  3. 最后,创建 ~/.ipython/virtualenv.py 模块:

    import site
    from os import environ
    from os.path import join
    from sys import version_info
    
    if 'VIRTUAL_ENV' in environ:
        virtual_env = join(environ.get('VIRTUAL_ENV'),
                           'lib',
                           'python%d.%d' % version_info[:2],
                           'site-packages')
        site.addsitedir(virtual_env)
        print 'VIRTUAL_ENV ->', virtual_env
        del virtual_env
    del site, environ, join, version_info
    

现在IPython将从virtualenv导入所有适用的包。

备注

这不是魔法。如果您切换到使用与IPython主安装不同的Python版本的virtualenv,这对您没有帮助 — 相反,请为所讨论的Python版本使用适当的IPython安装。

虚拟环境包装

virtualenvwrapper 是对virtualenv的一组增强,主要通过简单的shell脚本和别名实现。它会自动将所有的虚拟机组织到一个目录下(如上所述)。要创建新的virtualenv,只需使用 'mkvirtualenv <env_name>' 命令,它将在默认位置自动创建该名称的新virtualenv。

要使用virtualenvwrapper激活virtualenv,不需要考虑文件系统的环境位置或要运行哪个激活脚本。简单地跑 'workon <env_name>' . 你也可以列出所有的虚拟人 lsvirtualenv . 这只是触及了virtualenvwrapper附带的好东西的表面。

一个警告是它不支持类似csh的Shell。存在 virtualenvwrapper-win ,它将virtualenvwrapper移植到Windows批处理脚本。

静脉注射

virtualenv在Python开发社区中非常常用,它的功能最终被添加到python3.3中的标准库中,名称是 venv . venv还没有得到广泛的应用,也没有得到virtualenvwrapper这样的工具的明确支持,但它在未来有望得到更广泛的采用。