virtualenv学习

virtualenv ENV 创建虚拟环境

会创建/ENV/lib/pythonX.X/site-packages,之后所安装的所有包都会再这个目录中。同时也会创建/ENV/bin/python,即这个环境中都会使用这个python解释器,在文件加上#! /path/to/ENV/bin/python,则该脚本就会使用该解释器执行。

同时,也会安装Setuptools或者distribute在这个环境中,如下使用: $ python virtualenv.py -- distribute env
在虚拟环境中也安装了pip,用来安装包。

新创建的虚拟环境中有一个/bin/activate 脚本,使用$source bin/activate运行脚本。这会修改终端提示符shell prompt来标识哪个虚拟环境正在使用,会改变$PATH,进入虚拟环境的 bin/ 目录,这是为了方便,也可以使用虚拟环境的目录来执行脚本,如:path/to/env/bin/python script.py来执行也是一样的,这样就不需要执行activate脚本,但是这样会很不方便。

–system-site-packages 选项

如果使用 virtualenv --system-site-packages ENV创建虚拟环境,则虚拟环境会使用系统的包,如/usr/lib/python2.7/site-packages,当想虚拟环境使用系统的包的时候,可以这么做,但是如果想创建一个完全隔离的虚拟环境,就不要这么做。我一般不会使用这个选项,那样的可以保持系统环境的干净,既然要使用系统环境中的很多包,那么就不需要创建虚拟环境,直接在系统环境中开发就好了。

环境变量和配置文件

使用名称格式如:VIRTUALENV_ 可以在系统中设置使用虚拟环境中的环境变量:

$ export VIRTUALENV_DISTRIBUTE=true  

接着使用命令: $ python virtualenv.py ENV 的效果与 $ python virtualenv.py --distribute ENV相同。 同样,

$ export VIRTUALENV_EXTRA_SEARCH_DIR="/path/to/dists /path/to/other/dists"
$ virtualenv ENV

$ python virtualenv.py --extra-search-dir=/path/to/dists --extra-search-dir=/path/to/other/dists ENV  

效果相同.

*nix系统中配置文件为:$HOME/.virtualenv/virtualenv.ini,使用virtualenv --help可以查看所有的选项。

配置文件中的内容为:

[virtualenv]
distribute = true
添加多行的配置可以如下:
[virtualenv]
extra-search-die =
  /path/to/dists
  /path/to/other/dists

virtualenv可以按照自己的需求修改启动脚本,具体参见文档Creating Your Own Bootstrap Scripts,上面有具体例子。

使虚拟环境可移植[windows下该功能不可用]

一般虚拟环境会绑定到特定的路径,这就意味着不能移动该虚拟环境或者复制到另外的电脑中,可以使用以下命令来使虚拟环境可移植:

$ virtualenv --relocatable ENV   

这会使一些用setuptools安装的文件和distribute使用相对路径,也会使用activate_this.py脚本代替使用所选择的虚拟环境中的python解释器。 注意:必须在安装了所有包到虚拟环境中之后运行该命令,如果安装了新包,则需要再运行一次。但是,虽然这样可以使虚拟环境可以移植,但是不意味着可以跨平台。也就是说,如果是linux中的虚拟环境只能移植到linux平台下。

–extra-search-dir 选项

一般创建的时候,当虚拟环境安装好,会使用virtualenv_support目录下所绑定的包。但是单独执行virtualenv.py创建的时候virtualenv_support是不可用的。

可以使用 –extra-search-dir选项来制定包的位置,避免从网上下载。

$ virtualenv --extra-search-dir=/path/to/distributions ENV  

路径 /path/to/distributions 指的是包含setuptools,distributepip distributions. setuptoolsdistributions是.egg文件,pip的distributions是.tar.gz源文件,而distribute两者都可能,如果有.egg文件则优先使用.egg文件. 如果制定的目录中也没有相应的包,则还是会从网上下载,如果想永远不下载,则可以使用 --never-download选项,如:

$ virtualenv --extra-search-dir=/path/to/distrubutions --never-dowoad ENV  
Go Top
comments powered by Disqus