2.2 virtualenv 虚拟环境
有的时候因为各种原因,在操作系统下,我们会安装很多版本的Python解释器。同样,我们也有可能因为各种原因,需要不同版本的模块,比如Django1.8,Django1.11。再加上pip工具管理器的版本混乱问题。这就使得很多人在Python的环境管理上产生极大的混乱。
通常每个项目,甚至项目不同阶段的版本,需要不同的Python解释器和依赖库。为了清晰明了,安全可靠的管理这些环境,需要为每个项目或每个应用各自建立一套“独立、隔离”的Python运行环境。
virtualenv就是用来为每一个项目创建一套“独立隔离”的Python运行环境的工具。
在Python3.4之前,virtualenv需要独立手动安装后,方可执行。之后的版本中,Python自带了一个venv库,执行Python –m venv就可以达到与virtalenv同样的效果。更多的用户习惯上还是使用virtualenv的方式。
Python多解释器环境加上virtualenv创建的多虚拟环境共存在同一操作系统下的情形一般如下图所示:
核心要点是:
- 一个操作系统下,可以有多个“操作系统级别的”Python解释器;
- 每个Python解释器有一个指向自己的pip工具,两者一一对应;
- 通过virtualenv可以虚拟任何一个“操作系统级别的”Python解释器成为一个“虚拟级别”的解释器;
- 每个“虚拟级别”的解释器又拥有自己独立的pip工具和site-packages。
如果你理解了上面几点,就能明白virtualenv和pip在使用上的区别。
安装virtualenv
下面我安装的是16.0.4版本的virtualenv。更高版本的下面有一定说明,请注意区别。
以windows操作系统为例,要安装virtualenv,建议直接使用当前环境变量下指定的pip,也就是你操作系统默认的那个python版本所绑定的pip,这样方便命令调用。通常如下:
pip install virtualenv
可以在命令行界面中验证安装:where virtualenv
可以看出,这里的virtualenv是作为一个可执行程序,安装在我系统默认的Python36版本下。而我当前操作系统下其实有3个版本的Python:
你或许有疑问?那我要虚拟Python2.7的版本怎么办?在2.7下也装一个virtualenv?不需要的!virtualenv可以指定虚拟的Python解释器版本,只要你本地操作系统下安装了这个版本!
建立虚拟环境
如果自己手动管理所有的虚拟环境,通常会建立一个目录,用来放置所有的虚拟环境。这里:mkdir d:\Python_virtualenvs
,然后运行: virtualenv –p c:\Python27\Python2.exe –-no-site-packages d:\Python_virtualenvs\for_django
-p: 指定你要虚拟的Python版本,这里选择了本地的python2.7
–-no-site-packages:表示在建立虚拟环境时不将原版本中的第三方库拷贝过来,这样就能获得一个纯净的Python环境。
d:\Python_virtualenvs\for_django:表明在该目录下,建立一个叫做for_django的虚拟环境,这样的命名方式,让你一眼就能看出这个虚拟环境是为谁建立的。
我们看一眼文件系统中的情况,从截图中可以看出,环境非常干净!
重要说明
当前时间2020年2月,virtualenv的最新版本,以20.0.0+为例,已经取消了–-no-site-packages参数,默认直接使用–-no-site-packages模式。有另外一个参数--system-site-packages
,作用是可以访问源Python解释器的库,但是要慎用。所以,这里推荐,直接使用默认模式virtualenv -p xxx destination
。
ps:windows下,命令行中执行activate.bat命令,貌似在提示符前方没有环境标识符了。
使用虚拟环境
命令行下,进入你要使用的虚拟环境的目录下的script文件夹,运行activate
命令。或者使用绝对路径的方式调用该命令。
注意命令提示符(for_django),它表示你当前在for_django这个虚拟环境内。现在,你可以当做一个正常的Python环境使用。例如运行python命令,又或者使用pip安装第三方库pip install requests。这些都被限制和绑定在for_django这个虚拟环境内,不会对操作系统下本地的Python版本和其它的虚拟环境产生任何的影响!
退出虚拟环境
要退出虚拟环境,只要运行script目录下的deactivate
命令就可以了。
要删除虚拟环境,直接删除虚拟环境所在的目录就可以了,注意不要将其它的环境给删了。但是,删除虚拟环境后,所有以前使用该环境的工程都将受到影响。这点很好理解,所以请确保环境不再有需要再删除!
linux操作系统下的使用
对于linux操作系统,使用方法基本类似。只是虚拟环境中的文件路径和脚本调用的方式和windows系统下不太一样,仔细看下图中的bin目录,提供了一个activate脚本,以及一个写入环境变量的deactivate命令。
创建虚拟环境: $ virtualenv -p /usr/bin/python2.7 –-no-site-packages my_venv
启动虚拟环境: $ source my_venv/bin/activate
退出虚拟环境: $ deactivate
删除虚拟环境: $ rm –r my_venv
Pycharm结合virtualenv的使用
windows下的开发,很多时候使用命令行并不是那么方便,尤其是在Pycharm开发环境下,频繁切换界面也是种负担。实际上Pycharm可以指定解释器,直接将项目的Python解释器设置为你要使用的虚拟环境就行,如下所示:
在settings中:
选择Python:
virtualenv配合pip快速建立开发环境
virtualenv虚拟环境配合pip的freeze功能,可以一次性快捷的将整个环境下的第三方模块全部记录下来: pip freeze > d:\requirements.txt
对应的,也可以用它一次性通过在别的机器上或虚拟环境里,将文件里列出的第三方库安装起来。只需要使用命令:pip install -r requirements.txt
最新文章
- js通过注册表找到本地软件安装路径并且执行
- iOS 隐藏/去掉 导航栏返回按钮中的文字
- CSS 去掉inline-block元素间隙的几种方法
- ASP.NET MVC 微信公共平台开发之验证消息的真实性
- poj2407
- m3u8字段意义解析
- node cheerio
- jquery跨域调用wcf
- 用Shell实现俄罗斯方块代码(Tetris.sh)
- Knockoutjs官网翻译系列(二) Observable 数组
- oracle得到拼音函数
- layer ifram 弹出框
- iOS 中的 Delayed Transition
- Android动态修改ToolBar的Menu菜单
- Dynamics CRM 产品视图列上自带按钮的隐藏
- Unity插件 - MeshEditor(八)模型镜像特效
- day 24-1 继承
- python之读取配置文件模块configparser(三)高级使用---非标准配置文件解析
- Linux 中磁盘容量配额
- 单例模式 | 程序员都想要探索的 Javascript 设计模式
热门文章
- CMU15445 (Fall 2019) 之 Project#4 - Logging &; Recovery 详解
- k8s的部署
- ansible概述、安装、模块介绍
- OGC WebGIS 常用服务标准(WMS/WMTS/TMS/WFS)速查
- html元素height(width)是怎么确定的?
- mysql 存储过程和触发器
- 物无定味适口者珍,Python3并发场景(CPU密集/IO密集)任务的并发方式的场景抉择(多线程threading/多进程multiprocessing/协程asyncio)
- 机器学习(公式推导与代码实现)--sklearn机器学习库
- HC32L110 系列 M0 MCU 的介绍和Win10下DAP-Link, ST-Link, J-Link的烧录
- java-方法创建与使用