优雅的使用python之环境管理

优雅的使用python之环境管理 html

缘起

情景1:不一样python版本的管理 python

同一电脑上的多个python版本以前的管理,为了突出问题的广泛存在,下面是有人在segmentfault上提的问题。 git

clip_image001

摘自:http://segmentfault.com/q/1010000000162043 github

情景2:同一python版本中同一库的不一样版本管理 shell

例如在python2.7应用A是基于Django1.6,应用B是基于Django1.7的,这种状况怎么管理。 segmentfault

为解决以上问题,下面隆重介绍下virtualenvvirtualenvwrapper windows

virtualenv

摘自virtualenv官网的https://virtualenv.pypa.io/en/latest/virtualenv.html一段介绍: app

The basic problem being addressed is one of dependencies and versions, and indirectly permissions. Imagine you have an application that needs version 1 of LibFoo, but another application requires version 2. How can you use both these applications? If you install everything into/usr/lib/python2.7/site-packages (or whatever your platform’s standard location is), it’s easy to end up in a situation where you unintentionally upgrade an application that shouldn’t be upgraded. python2.7

Or more generally, what if you want to install an application and leave it be? If an application works, any change in its libraries or the versions of those libraries can break the application. 工具

Also, what if you can’t install packages into the global site-packages directory? For instance, on a shared host.”

大意就是virtualenv用于在一台机器上建立多个独立的python运行环境,能够解决:

l  隔离项目之间的第三方包依赖

l  在没有权限的状况下安装新的Python软件包

除此以外,还有一个额外的好处:部署应用时,把开发环境的虚拟环境打包到生产环境便可。

安装

方式一:经过pip

[sudo] pip install virtualenv

方式二:源码方式

下载、解压

cd virtualenv-X.X

[sudo] python setup.py install

方式N…

使用

建立虚拟环境

virtualenv [虚拟环境名称] /virtualevn.exe [虚拟环境名称]

个人环境是windows python3.4,这样建立虚拟环境:

E:\>D:\Python34\Scripts\virtualenv.exe env_py3.4

Using base prefix 'D:\\Python34'

New python executable in env_py3.4\Scripts\python.exe

Installing setuptools, pip...done.

建立虚拟环境env_py3.4以后,对应目录下面有如下文件夹:

E:\env_py3.4 的目录

2014/11/26  15:38    <DIR>          .

2014/11/26  15:38    <DIR>          ..

2014/05/16  15:34    <DIR>          Include

2014/11/26  15:38    <DIR>          Lib

2014/11/26  15:38    <DIR>          Scripts

其中Lib/site-packages包含了,从系统安装的python3.4下面的库。默认状况下,虚拟环境会依赖系统环境中的site packages,就是说系统中已经安装好的第三方package也会安装在虚拟环境中,若是不想依赖这些package,那么能够加上参数 --no-site-packages创建虚拟环境

virtualenv --no-site-packages [虚拟环境名称]

 

启用虚拟环境

 

 

source bin/activate或者 Scripts\activate.bat

启用虚拟环境以后,命令行提示符将以虚拟环境名为前缀,如(env_py3.4) E:\env_py3.4>。也能够经过python打印出os.sys.path进行验证,如在个人env_py3.4虚拟环境启用以后,系统path路径以下所示:

E:\env_py3.4>Scripts\activate

(env_py3.4) E:\env_py3.4>python

Python 3.4.0 (v3.4.0:04f714765c13, Mar 16 2014, 19:24:06) [MSC v.1600 32 bit (In

tel)] on win32

Type "help", "copyright", "credits" or "license" for more information.

>>> import os

>>> print(os.sys.path)

['', 'E:\\env_py3.4\\Scripts\\python34.zip', 'E:\\env_py3.4\\DLLs', 'E:\\env_py3

.4\\lib', 'E:\\env_py3.4\\Scripts', 'D:\\Python34\\Lib', 'D:\\Python34\\DLLs', '

E:\\env_py3.4', 'E:\\env_py3.4\\lib\\site-packages']

os.sys.path中能够看出,这个环境下执行python相关的操做都是限定在虚拟环境中。

退出虚拟环境

 

bin/deactivate 或者 Scripts\deactivate

如退出env_py3.4虚拟环境,命令行提示符前缀也相应改变了。

(env_py3.4) E:\env_py3.4>Scripts\deactivate

E:\env_py3.4>

 

在虚拟环境中安装新的python软件包,跟正常的python同样,而且虚拟环境中已经附带pipeasy_install等工具,能够很是方便的使用。

virtualenvwrapper

Virtualenvwrapper 是一个Virtualenv extension,可以使虚拟环境的管理变得更容易。详细来讲,Virtualenvwrapper 提供下述功能:

l  将全部的虚拟环境整合在一个目录下。

l  管理(新增、移除、复制)全部的虚拟环境。

l  能够使用一个命令切换虚拟环境。

l  Tab 补全虚拟环境的名字。

l  每一个操做都提供容许使用者自定的hooks

l  可撰写容易分享的extension plugin 系统。

安装

经过pip或者easy_install安装virtualenvwrapper

pip install virtualenvwrapper

默认virtualenvwrapper安装在/usr/local/bin下面,实际上你须要运行virtualenvwrapper.sh文件才行。

 

说明:virtualenvwrapper is a set of shell functions defined in Bourne shell compatible syntax。因此在window平台下,是否是使用不了的,可是对应有一个virtualenvwrapper-win版本(https://pypi.python.org/pypi/virtualenvwrapper-win)。

virtualenvwrapper-win将安装在python根目录下面,如D:\Python34

# using pip
   
   
   
   
pip install virtualenvwrapper-win
   
   
   
   

   
   
   
   
       
   
# using easy_install
   
   
   
   
easy_install virtualenvwrapper-win
   
   
   
   

   
   
   
   
       
   
# from source
   
   
   
   
git clone git://github.com/davidmarble/virtualenvwrapper-win.git
   
   
   
   
cd virtualenvwrapper-win
   
   
   
   
python setup.py install
   
   
   
   

 

使用

virtualenvwrapper-winvirtualenvwrapper的使用方式彻底同样:

l  列出虚拟环境列表:workon 或者lsvirtualenv

l  新建虚拟环境:mkvirtualenv [虚拟环境名称]

l  启动/切换虚拟环境:workon [虚拟环境名称]

l  删除虚拟环境:rmvirtualenv [虚拟环境名称]

l  离开虚拟环境:deactivate.

例如,我建立了3个虚拟环境

       …….

(vn_py3.4_app2) D:\Python34>mkvirtualenv.bat vn_py3.4_app3

Using base prefix 'D:\\Python34'

New python executable in vn_py3.4_app3\Scripts\python.exe

Installing setuptools, pip...done.

 

(vn_py3.4_app3) D:\Python34>workon.bat

 

Pass a name to activate one of the following virtualenvs:

==========================================================

vn_py3.4_app1

vn_py3.4_app2

vn_py3.4_app3

默认建立的虚拟环境路径为:%USERPROFILE%\Envs,即C:\Users\用户名\Envs

切换虚拟环境:

(vn_py3.4_app3) D:\Python34>workon.bat vn_py3.4_app1

(vn_py3.4_app1) D:\Python34>workon.bat vn_py3.4_app2

(vn_py3.4_app2) D:\Python34>

 

注意:若是window下面碰到D:\Python34\Scripts>mkvirtualenv.bat F:\evn_py3.4_app1

python.exe: can't open file 'D:\Python34\Scripts\virtualenv-script.py': [Errno 2

] No such file or directory,修改mkvirtualenv.bat中的python.exe "%PYHOME%\Scripts\virtualenv-script.py" %ARGS% ==python.exe "%PYHOME%\Scripts\virtualenv.exe" %ARGS%便可。

总结

基于virtualenv + virtualenvwrapper能够很好的完成环境隔离,保证对每一个应用的环境是干净的。并且对一个干净的环境能够经过:

pip freeze > requirements.txt将包依赖信息保存在requirements.txt文件

pip install -r requirements.txt会自动从网上下载并安装全部包

方便应用部署分发,关于pip软件包管理再下一篇介绍。

 

相关链接:

https://virtualenv.pypa.io/en/latest/index.html

http://virtualenvwrapper.readthedocs.org/en/latest/index.html

https://pypi.python.org/pypi/virtualenvwrapper-win

相关文章
相关标签/搜索