优雅的使用python之环境管理

简介:

优雅的使用python之环境管理

缘起

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

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

clip_image001

摘自: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软件包管理再下一篇介绍。

相关文章
|
30天前
|
Unix Shell Linux
赞!优雅的Python多环境管理神器!易上手易操作!
赞!优雅的Python多环境管理神器!易上手易操作!
|
1月前
|
存储 Java C语言
【python】——使用嵌套列表实现游戏角色管理
【python】——使用嵌套列表实现游戏角色管理
31 0
|
2月前
|
IDE Linux 开发工具
技术小白如何配置Python环境
技术小白如何配置Python环境
|
3月前
|
API 数据库 Python
Python 教程之 Django(8)在 Django 管理界面中渲染模型
Python 教程之 Django(8)在 Django 管理界面中渲染模型
23 0
Python 教程之 Django(8)在 Django 管理界面中渲染模型
|
3月前
|
机器学习/深度学习 并行计算 算法框架/工具
在Python中进行深度学习环境准备
在Python中进行深度学习环境准备
51 4
|
13天前
|
jenkins 测试技术 持续交付
软件测试|docker搭建Jenkins+Python+allure自动化测试环境
通过以上步骤,你可以在Docker中搭建起Jenkins自动化测试环境,实现Python测试的自动化执行和Allure报告生成。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
32 6
|
1月前
|
Shell Python Windows
通过Python实现win11环境下FTP的上传与下载
通过Python实现win11环境下FTP的上传与下载
|
1月前
|
SQL 安全 测试技术
如何在 Python 中进行 Web 应用程序的安全性管理,例如防止 SQL 注入?
如何在 Python 中进行 Web 应用程序的安全性管理,例如防止 SQL 注入?
14 0
|
1月前
|
存储 算法 Java
如何使用 Python 管理内存和避免内存泄漏?
如何使用 Python 管理内存和避免内存泄漏?
100 35
|
1月前
|
Python
如何在Python中创建和管理线程?
如何在Python中创建和管理线程?
21 6

热门文章

最新文章