优雅的使用python之环境管理
优雅的使用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之环境管理的更多相关文章
- 优雅的使用Python之软件管理
上篇<优雅的使用python之环境管理>http://dwz.cn/wTsOr,如何管理python环境,有了一个干净的python环境之后,就不可避免的安装python软件包(pytho ...
- 如何优雅地退出python程序
如何优雅地退出python程序 一个单模的python程序,启动之后要能够优雅地关闭.即当用户按Ctrl+C或者kill pid的时候,程序都能从容关闭.实现起来非常简单. is_running = ...
- Python多环境管理神器(pyenv)
前面我们已经介绍了,python中两种最基础的虚拟环境管理工具,venv和virtualenv,其中virtualenv可以和virtualenvwrapper配合使用.详情请参考:https://w ...
- 如何优雅地实现Python通用多线程/进程并行模块
当单线程性能不足时,我们通常会使用多线程/多进程去加速运行.而这些代码往往多得令人绝望,需要考虑: 如何创建线程执行的函数? 如何收集结果?若希望结果从子线程返回主线程,则还要使用队列 如何取消执行? ...
- Python多环境管理
Python环境管理 什么是Anaconda Anaconda是专注于数据分析的Python发行版本,包含了conda.Python等190多个科学包及其依赖项.Anaconda通过管理工具包.开发环 ...
- python虚拟环境管理之virtualenv,virtualenvwrapper,pipenv,conda
虚拟环境的作用 使python环境拥有独立的包,避免污染原本的python环境.为不同的项目创建不同的环境可以避免安装的库过于庞大和相互干扰. 例如你想在同一台机器上开发用python2和python ...
- 18式优雅你的Python
本文来自读者梁云同学的投稿,公众号:Python与算法之美 一,优雅你的Jupyter 1,更改Jupyter Notebook初始工作路径 平凡方法: 在cmd中输入jupyter notebook ...
- python编程【环境篇】- 如何优雅的管理python的版本
简介 之前的文章(Python2还是python3 )中我们提到,建议现在大家都采用python3,因为python2在今年年底将不在维护.但在实际的开发和使用python过程中,我们避免不了还得用到 ...
- 如何优雅的使用python中的代码注释
在编写代码时,确保您的代码易于被其他人理解时很重要的,给变量,函数起合适的名字以及合理的组织代码都是很好的方法. 使用代码注释时增加代码可读性的另一种方便简单且重要的方法! 1.为什么代码注释如此重要 ...
随机推荐
- FreeMarker标签与使用
模板技术在现代的软件开发中有着重要的地位,而目前最流行的两种模板技术恐怕要算freemarker和velocity了,webwork2.2对两者都有不错的支持,也就是说在webwork2中你可以随意选 ...
- ss
110000北京120000天津130000河北140000山西150000内蒙古210000辽宁220000吉林230000黑龙江310000上海320000江苏330000浙江340000安徽35 ...
- Linux 下curl模拟Http 的get or post请求
一.get请求 curl "http://www.baidu.com" 如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地 curl -i "http:// ...
- 使用jailkit chroot更改ssh用户根目录
安装jailkit cd /tmp wget http://olivier.sessink.nl/jailkit/jailkit-2.16.tar.gz tar xzf jailkit-2 ...
- linux c++循环缓冲区模板类
一:概述 实际学习和工作中,我们经常会遇到读写大量数据的情况,这个时候我们可能就用到了循环缓冲区. 循环缓冲区在处理大量数据的时候有很大的优点,循环缓冲区在一些竞争问题上提供了一种免锁的机制,免锁的前 ...
- Oracle/SQL 修改字段类型和长度
标准SQL修改字段类型和长度语句: ALTER TABLE tableName modify column columnName 类型;例如Mysql的修改字段类型语句:alter table tes ...
- vs.net2008工具栏上找不到debug/release选项
使用vs.net多年,以前不时会用到release发布,近几年几乎不用的.近来生成时感觉有些项目使用了release选项,因为生成的dll的位置变了.于是想调整回bebug,发现vs.net2008的 ...
- 重编译Linux命令源代码
转: http://blog.csdn.net/endoresu/article/details/6967435 以su命令为例. 查看su命令的路径: # which su /bin/su 查看su ...
- 原生javaScript中使用Ajax实现异步通信
AJAX本质就是在HTTP协议的基础上以异步的方式与服务器进行通信,所谓异步,就是指某段程序执行时不会阻塞其它程序执行,其表现形式为程序的执行顺序不依赖程序本身的书写顺序,相反则为同步. 以下开始简单 ...
- 项目文件""已被重命名或已不在解决方案中
如题,这个错误在vs2010里,开始编译的时候出现了,我的解决办法就是把所有的project都移除,然后再添加进来,就不弹这个错误了.