优雅的使用python之环境管理

缘起

情景1:不同python版本的管理

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

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

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

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

为解决以上问题,下面隆重介绍下virtualenv、virtualenvwrapper。

virtualenv

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

“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.

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一样,并且虚拟环境中已经附带pip、easy_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-win和virtualenvwrapper的使用方式完全一样:

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

优雅的使用python之环境管理的更多相关文章

  1. 优雅的使用Python之软件管理

    上篇<优雅的使用python之环境管理>http://dwz.cn/wTsOr,如何管理python环境,有了一个干净的python环境之后,就不可避免的安装python软件包(pytho ...

  2. 如何优雅地退出python程序

    如何优雅地退出python程序 一个单模的python程序,启动之后要能够优雅地关闭.即当用户按Ctrl+C或者kill pid的时候,程序都能从容关闭.实现起来非常简单. is_running = ...

  3. 如何优雅地实现Python通用多线程/进程并行模块

    当单线程性能不足时,我们通常会使用多线程/多进程去加速运行.而这些代码往往多得令人绝望,需要考虑: 如何创建线程执行的函数? 如何收集结果?若希望结果从子线程返回主线程,则还要使用队列 如何取消执行? ...

  4. 使用python之环境管理

      情景1:不同python版本的管理 同一电脑上的多个python版本之前的管理,为了突出问题的普遍存在,下面是有人在segmentfault上提的问题. 摘自:http://segmentfaul ...

  5. [转]python执行bash指令,如果指令返回错误,如何优雅的结束python程序

    如果是有返回值的可执行文件可以直接获取return code, 如果error code 直接退出. import os ret = os.system("COMMAND LINE" ...

  6. Python之软件管理

    常用软件包管理工具 一般python软件包管理工具,主要有以下: 图 常用python包管理工具 可以看到distribute是setuptools的替代方案(因为Setuptools包不再维护了), ...

  7. c++ 发布动态.so

    原文地址 代码改变世界 Posts - 105, Articles - 0, Comments - 1561 Cnblogs Dashboard Logout Home Contact Gallery ...

  8. Python虚拟开发环境

    最近,一直在不同版本的Python之间来回折腾,发现了几个Python虚拟开发环境工具,具体如下: 1. Virtualenv,可以指定开发环境的Python版本.继承已有开发环境配置,virtual ...

  9. 六种流行的语言---C、C++、python、Java、php、C#比较[转]

    语言大餐 回归正题,本文是六种语言连接mysql数据库的代码展示,在LZ尝试的过程中,无论是语言环境搭建.mysql依赖库的导入还是代码的风格,各种语言都各有千秋.接下来,我们就让这些语言一一登场吧. ...

随机推荐

  1. linux终端常用快捷键

    Ctrl + d       删除一个字符,相当于通常的Delete键(命令行若无任何字符,则相当于exit:处理多行标准输入时也表示EOF ) Ctrl + h       退格删除一个字符,相当于 ...

  2. js获取某个ID的class名称

    .HTML结构 <div id = "test" class="test_class">我的类名为test_class</div> &l ...

  3. 横竖屏切换时候Activity的生命周期的总结

    1.新建一个Activity,并把各个生命周期打印出来 2.运行Activity,得到如下信息 onCreate--> onStart--> onResume--> 3.按crtl+ ...

  4. 39. Volume Rendering Techniques

    Milan Ikits University of Utah Joe Kniss University of Utah Aaron Lefohn University of California, D ...

  5. 聊下并发和Tomcat线程数(Updated)

    最近一直在解决线上一个问题,表现是: Tomcat每到凌晨会有一个高峰,峰值的并发达到了3000以上,最后的结果是Tomcat线程池满了,日志看很多请求超过了1s. 服务器性能很好,Tomcat版本是 ...

  6. DBhelper封装jdbc并解决特殊字符的问题

    1.测试数据库 1.1 数据库数据 1.2 数据库结构 1.3 数据库脚本 DROP TABLE IF EXISTS `school`.`student`; CREATE TABLE `school` ...

  7. ANT下载和配置

    1) 在环境变量中设置ANT_HOME,值为你的安装目录ANT安装目录 2) 在环境变量中设置JAVA_HOME,值为你的jdk安装目录 3) 把ANT_HOME/bin,JAVA_HOME/bin ...

  8. Ubuntu下编译内核

    一.下载源代码和编译软件的准备 下载内核源代码:http://www.kernel.org/ 注意,点击2.6.25内核的F版,即完整版. 如果你懒得去网站点联接,运行下列命令:  代码: $cd ~ ...

  9. zoj 2358,poj 1775 Sum of Factorials(数学题)

    题目poj 题目zoj //我感觉是题目表述不确切,比如他没规定xi能不能重复,比如都用1,那么除了0,都是YES了 //算了,这种题目,百度来的过程,多看看记住就好 //题目意思:判断一个非负整数n ...

  10. execution 表达式

    execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) th ...