原文:
https://blog.csdn.net/poxiaonie/article/details/78820015
virtualenv详解及使用virtualenv复制虚拟独立的python环境
2017年12月16日 15:09:08 haughty_xiao 阅读数 6457
<article class="baidu_pl" style="box-sizing: inherit; outline: 0px; margin: 0px; padding: 16px 0px 0px; display: block; position: relative; color: rgba(0, 0, 0, 0.75); font-family: -apple-system, "SF UI Text", Arial, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif; font-size: 14px; font-style: normal; font-variant-ligatures: common-ligatures; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;">
virtualenv 用来创建隔离的Python环境。
处理python环境的多版本和模块依赖,以及相应的权限是一个很常见的问题。比如,你有个应用使用的是LibFoo V1.0,但另一个应用却要用到LibFoo V2.0。 如何处理呢?如果把所有模块都安装到 /usr/lib/python2.7/site-packages (或是你本机python默认的模块安装目录),那你极有可能无意中升级一些不该升级的模块。
更普遍的是,就算你成功安装了某个应用,那么接下来又会怎样?只要它开始运行了,那么只要其所依赖的模块发生任何改动,亦或升级,都可能打断该应用。这还没完,要是你无法在 site-packages 目录下安装模块呢?比如共享主机。上述这几种场合都适用 virtualenv 。它会创建一个拥有独立安装目录的python环境,该隔离环境不会与其他virtualenv环境共享模块(可选择是否访问全局库目录)。
一、安装
运行
pip install virtualenv
即可安装virtualenv,想用 最新开发版 就运行
pip install virtualenv==dev
还可以用 easy_install 安装,即使是没有安装任何Python包管理器,也可以直接获取 virtualenv.py 并运行 python virtualenv.py ,效果一样。
二、 virtualenv基本使用
$ python virtualenv.py ENV
在已安装virtualenv的情况下,可以直接运行 virtualenv ENV 。
该操作会创建 ENV/lib/pythonX.X/site-packages 目录 和 ENV/bin/python , 前者用来存放要安装的模块,后者就是隔离环境的Python解释器。 在virtualenv环境下使用此解释器(包括以 #!/path/to/ENV/bin/python 开头的脚本)时,使用的都是隔离环境下的模块。
该操作还在隔离环境下安装了 Setuptools 或 distribute 。要用Distribue取代setuptools的话,只要运行:
$ python virtualenv.py --distribute ENV
选项:
--version
显示当前版本号。
-h, --help
显示帮助信息。
-v, --verbose
显示详细信息。
-q, --quiet
不显示详细信息。
-p PYTHON_EXE, --python=PYTHON_EXE
指定所用的python解析器的版本,比如 --python=python2.5 就使用2.5版本的解析器创建新的隔离环境。 默认使用的是当前系统安装(/usr/bin/python)的python解析器
--clear
清空非root用户的安装,并重头开始创建隔离环境。
--no-site-packages
令隔离环境不能访问系统全局的site-packages目录。
--system-site-packages
令隔离环境可以访问系统全局的site-packages目录。
--unzip-setuptools
安装时解压Setuptools或Distribute
--relocatable
重定位某个已存在的隔离环境。使用该选项将修正脚本并令所有.pth文件使用相当路径。
--distribute
使用Distribute代替Setuptools,也可设置环境变量VIRTUALENV_DISTRIBUTE达到同样效要。
--extra-search-dir=SEARCH_DIRS
用于查找setuptools/distribute/pip发布包的目录。可以添加任意数量的–extra-search-dir路径。
--never-download
禁止从网上下载任何数据。此时,如果在本地搜索发布包失败,virtualenv就会报错。
--prompt==PROMPT
定义隔离环境的命令行前缀。
环境变量和配置文件
三、激活脚本
刚创建的隔离环境下会有一个 bin/activate 命令行脚本。在Windows下,激活脚本要在CMD.exe或Powershell.exe中使用。
$ source bin/activate
注意到命令提示符变了,有个(venv)前缀,表示当前环境是一个名为venv的Python环境。在venv环境下,用pip安装的包都被安装到venv这个环境下,系统Python环境不受任何影响。也就是说,venv环境是专门针对myproject这个应用创建的。
退出当前的venv环境,使用deactivate命令;
四、虚拟环境复制迁移
直接压缩生成的venv文件夹:
tar -zcvf venv.tar.gz ./venv
然后拷贝迁移至其他服务器下进行解压:
进入./venv/bin/下修改activate文件中参数:
VIRTUAL_ENV="/home/venv"
export VIRTUAL_ENV
将上述VIRTUAL_ENV修改为当前venv文件夹正确的路径,然后执行:
source activate
然后执行:
which python
或者
which pip
查看是否是虚拟venv路径下的工具,如果是的话,则成功。
</article>