优雅的使用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多环境管理

    Python环境管理 什么是Anaconda Anaconda是专注于数据分析的Python发行版本,包含了conda.Python等190多个科学包及其依赖项.Anaconda通过管理工具包.开发环 ...

  5. python虚拟环境管理之virtualenv,virtualenvwrapper,pipenv,conda

    虚拟环境的作用 使python环境拥有独立的包,避免污染原本的python环境.为不同的项目创建不同的环境可以避免安装的库过于庞大和相互干扰. 例如你想在同一台机器上开发用python2和python ...

  6. 使用python之环境管理

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

  7. 如何优雅的使用 Python 实现文件递归遍历

    今天有个脚本需要遍历获取某指定文件夹下面的所有文件,我记得很早前也实现过文件遍历和目录遍历的功能,于是找来看一看,嘿,不看不知道,看了吓一跳,原来之前我竟然用了这么搓的实现. 先发出来看看: def ...

  8. 优雅地记录Python程序日志2:模块组件化日志记录器

    本文摘自:https://zhuanlan.zhihu.com/p/32043593 本篇将会涉及: logging的各个模块化组件 构建一个组件化的日志器 logging的模块组件化 在上一篇文章中 ...

  9. 优雅地记录Python程序日志1:logging模块简介

    本文摘自:https://zhuanlan.zhihu.com/p/31893724 本篇涉及: logging模块的调用: 保存log日志为文件: 调整输入日志等级: 修改日志消息格式: 前言 在使 ...

随机推荐

  1. HTML5 video 和 audio

    video 用于在HTML或者XHTML文档中嵌入视频内容 使用 video 元素至少要提供两种视频格式的文件:OGG 和 MP4 OGG:采用 Theora 视频格式和 Vorbis 音频解码器 ( ...

  2. oracle 知识

    sqlplus /  as sysdba;  使用操作系统登录oracle数据库 conn panie/panie;  使用普通用户连接数据库 --开启归档模式shutdown immediate;s ...

  3. IE6、IE7、IE8中overflow:hidden无效问题

    在做图片无缝滚动效果时遇到了这个兼容问题 div宽1000px高250px超出隐藏. 但在Firefox中正常,超出部分隐藏,但是在IE6.IE7.IE8.Sogou高速下都显示了出来.做了这么多年的 ...

  4. 类似FirePhp的Chrome.php 调试php

    之前一直用firephp来调试php,主要受限Firefox启动太慢,研究了下chromephp; 写了个简单的判断模版: <?php /** * @Author: Klaus * @Date: ...

  5. NOIP2001 Car的旅行路线

    题四 Car的旅行路线(30分) 问题描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一条笔直的高速 ...

  6. win2k,XP下用setupapi.dll自动安装Driver

    win2k,XP下用setupapi.dll自动安装Driver 在驱网看到54cndr 写的这篇文章,虽然自己一直都用Installshield,但还是觉得这个也是一个很好的思路,故摘录在此. 用s ...

  7. 7z命令行 极限压缩指令

    摘抄自http://www.cnblogs.com/qanholas/archive/2011/10/03/2198487.html 7za a -t7z bag.7z "/home/fil ...

  8. SpringMVC注解HelloWorld

    今天整理一下SpringMVC注解 欢迎拍砖 @RequestMapping RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上.用于类上,表示类中的所有响应请求的方法都是 ...

  9. apache与nginx原理

    参考:  https://blog.csdn.net/yf3585595511/article/details/54933646

  10. [SQL]LeetCode196. 删除重复的电子邮箱 | Delete Duplicate Emails

    Write a SQL query to delete all duplicate email entries in a table named Person, keeping only unique ...