python virtualenv使用 解决依赖、版本等问题

默北 pythonpython virtualenv使用 解决依赖、版本等问题已关闭评论28,8411字数 2254阅读7分30秒阅读模式

virtualenv通过创建独立Python开发环境的工具, 来解决依赖、版本以及间接权限
问题. 比如一个项目依赖Django1.3 而当前全局开发环境为Django1.7, 版本跨度过大, 导致不兼容使项目无法正在运行, 使用virtualenv可以解决这些问题.

virtualenv创建一个拥有自己安装目录的环境, 这个环境不与其他虚拟环境共享库, 能够方便的管理python版本和管理python库文章源自运维生存时间-https://www.ttlsa.com/python/python-virtualenv/

1. 安装Virtualenv

使用pip安装Virtualenv, 使用过python的都应该知道pip包管理神器吧, 即使不知道, 网站也有大把的教程, 不过推荐查看官方安装指南文章源自运维生存时间-https://www.ttlsa.com/python/python-virtualenv/

$ pip install virtualenv
 //或者由于权限问题使用sudo临时提升权限
 $ sudo pip install virtualenv

2. virtualenv基本使用

现在开始使用virtualenv管理python环境文章源自运维生存时间-https://www.ttlsa.com/python/python-virtualenv/

➜ Test git:(master) ✗ virtualenv ENV #创建一个名为ENV的目录, 并且安装了ENV/bin/python, 创建了lib,include,bin目录,安装了pip
 New python executable in
 Installing setuptools, pip...done.
 ➜ Test git:(master) ✗ cd ENV
 ➜ ENV git:(master) ✗ ll
 drwxr-xr-x 14 andrew_liu staff 476 12 8 08:49 bin
 drwxr-xr-x 3 andrew_liu staff 102 12 8 08:49 include
 drwxr-xr-x 3 andrew_liu staff 102 12 8 08:49 lib
  • lib,所有安装的python库都会放在这个目录中的lib/pythonx.x/site-packages/
  • bin,bin/python是在当前环境是使用的python解释器

如果在命令行中运行virtualenv --system-site-packages ENV, 会继承/usr/lib/python2.7/site-packages下的所有库, 最新版本virtualenv把把访问全局site-packages作为默认行为
default behavior.文章源自运维生存时间-https://www.ttlsa.com/python/python-virtualenv/

2.1. 激活virtualenv

#使用pip查看当前库
 (ENV)➜ ENV git:(master) ✗ pip list
 pip (1.5.6)
 setuptools (3.6)
 wsgiref (0.1.2) #发现在只有这三个
 pip freeze #显示所有依赖
 pip freeze > requirement.txt #生成requirement.txt文件
 pip install -r requirement.txt #根据requirement.txt生成相同的环境

2.2. 关闭virtualenv

使用下面命令文章源自运维生存时间-https://www.ttlsa.com/python/python-virtualenv/

$ deactivate

 文章源自运维生存时间-https://www.ttlsa.com/python/python-virtualenv/

2.3. 指定python版本

可以使用-p PYTHON_EXE选项在创建虚拟环境的时候指定python版本文章源自运维生存时间-https://www.ttlsa.com/python/python-virtualenv/

1
2
3
4
5
#创建python2.7虚拟环境
➜ Test git:(master) ✗ virtualenv -p /usr/bin/python2.7 ENV2.7
Running virtualenv with interpreter /usr/bin/python2.7
New python executable in ENV2.7/bin/python
Installing setuptools, pip...done.
1
2
3
4
5
6
7
#创建python3.4虚拟环境
➜ Test git:(master) ✗ virtualenv -p /usr/local/bin/python3.4 ENV3.4
Running virtualenv with interpreter /usr/local/bin/python3.4
Using base prefix '/Library/Frameworks/Python.framework/Versions/3.4'
New python executable in ENV3.4/bin/python3.4
Also creating executable in ENV3.4/bin/python
Installing setuptools, pip...done.

到此已经可以解决python版本冲突问题和python库不同版本的问题文章源自运维生存时间-https://www.ttlsa.com/python/python-virtualenv/

3. 其他

3.1. 生成可打包环境

某些特殊需求下,可能没有网络, 我们期望直接打包一个ENV, 可以解压后直接使用, 这时候可以使用virtualenv -relocatable指令将ENV修改为可更改位置的ENV文章源自运维生存时间-https://www.ttlsa.com/python/python-virtualenv/

1
2
3
4
5
6
7
#对当前已经创建的虚拟环境更改为可迁移
➜ ENV3.4 git:(master) ✗ virtualenv --relocatable ./
Making script ./bin/easy_install relative
Making script ./bin/easy_install-3.4 relative
Making script ./bin/pip relative
Making script ./bin/pip3 relative
Making script ./bin/pip3.4 relative

3.2. 获得帮助

1
$ virtualenv -h

当前的ENV都被修改为相对路径, 可以打包当前目录, 上传到其他位置使用文章源自运维生存时间-https://www.ttlsa.com/python/python-virtualenv/

这并不能使虚拟环境跨平台使用文章源自运维生存时间-https://www.ttlsa.com/python/python-virtualenv/

 参考:http://docs.python-guide.org/en/latest/dev/virtualenvs/文章源自运维生存时间-https://www.ttlsa.com/python/python-virtualenv/ 文章源自运维生存时间-https://www.ttlsa.com/python/python-virtualenv/

weinxin
我的微信
微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~
默北
  • 本文由 发表于 29/06/2015 13:23:47
  • 转载请务必保留本文链接:https://www.ttlsa.com/python/python-virtualenv/