virtualenv 和 virtualenvwrapper 实践
安装 virtualenv和virtualfish的话,就不要安装anaconda,可能会出错。
virtualenv
首先来聊一下 virtualenv 是个什么鬼。
在使用 Python 开发的过程中,工程一多,难免会碰到不同的工程依赖不同版本的库的问题;亦或者是在开发过程中不想让物理环境里充斥各种各样的库,引发未来的依赖灾难。此时,我们需要对于不同的工程使用不同的虚拟环境来保持开发环境以及宿主环境的清洁。这里,就要隆重介绍 virtualenv,一个可以帮助我们管理不同 Python 环境的绝好工具。virtualenv 可以在系统中建立多个不同并且相互不干扰的虚拟环境。另外,值得一提的是,在 virtualenv 的虚拟环境中使用 pip 安装依赖还可以绕过某些系统的权限设置,因为毕竟不需要向系统目录写入数据嘛~~
那么,virtualenv 是怎么运行的呢?
安装
首先从安装讲起,这里假设已经安装了 pip,如果没有安装 pip 的话,请自行出门谷歌(好吧,我是好人,附上pip官方文档链接)。之后就可以用 pip 来直接安装 virtualenv 了。当然,这里可能是需要使用 sudo 提升权限的,毕竟是在宿主物理环境里安装。如下命令中 sudo 省略,如有需求请自行添加。
pip install virtualenv
好了现在你拥有了 virtualenv 虚拟环境管理器。
使用
接下来说使用。
比如我们想要做一点奇怪的事情,写一个脚本去抓取某个网站的信息,我们暂且把这个工程叫做 spider 吧。这个工程里需要访问网络,我们打算使用为人类编写的网络访问库 requests,但是我们又不想在宿主环境中安装这个包。让我们开始吧。
假设我们把这个工程放在 /path/to/project/spider/ 目录下,并且这里我们把虚拟环境直接放在工程目录下。首先,我们在这个目录下建立一个虚拟环境。
virtualenv /path/to/project/spider
这样,虚拟环境就建立好了。此时可以看到,在这个目录下面会有三个目录被建立:
bin
include
lib
其中,bin 目录中包含一些在这个虚拟环境中可用的命令,以及开启虚拟环境的脚本 activate;include 中包含虚拟环境中的头文件,包括 Python 的头文件;lib 中就是一些依赖库啦~~
当然,现在我们还没有进入到虚拟环境中。激活虚拟环境只需要一条命令。
source /path/to/project/spider/bin/activate
此时就可以我们就已经在虚拟环境中啦。
接下来安装工程需要的 requests 库。
pip install requests
搞定!
这时候在虚拟环境里就有了 requests 库,宿主环境中则不会被干扰。
那么如何退出虚拟环境嘞?退出就更简单啦,只需要下面一个命令就搞定啦。
deactivate
此时就回到了进入虚拟环境之前,一切都好像没发生过。多年以后,如果你忘记了虚拟环境的位置,一切就真的没发生过了 = =
补充一句,如果想要删除虚拟环境,只要把这个目录下的 bin、include 和 lib 三个目录删掉就好了。
(注意: virtualenvwrapper和virtualfish依赖virtualenv)
virtualenvwrapper (若用的是fish shell,建议使用virtualfish替代 virtualenvwrapper: https://github.com/adambrenecki/virtualfish,注意,如果使用 vf new -p /usr/bin/python3.5 env35 创建出错,可以使用 sudo pip install setuptools --no-use-wheel --upgrade 解决问题; 如果你想在virtualfish的virtualenv 下使用 ipython, 建议直接在virtualfish虚拟python环境(即vf activate ***)下执行:pip install ipython (这样该虚拟python环境下就可以直接运行 ipython), 尽量不要在系统shell环境(未运行 vf activate *** 的环境)下用 sudo 执行: sudo apt-get install ipython (这样的后果可能导致虚拟环境下ipython执行不成功))
为神马需要 virtualenvwrapper?这要从 virtualenv 说起。
上一节结束的时候说,如果忘记了虚拟环境的位置,一切就真的没发生过了。虽然是句玩笑,不过真的会发生哦~
virtualenv 的一个最大的缺点就是,每次开启虚拟环境之前要去虚拟环境所在目录下的 bin 目录下 source 一下 activate,这就需要我们记住每个虚拟环境所在的目录。
一种可行的解决方案是,将所有的虚拟环境目录全都集中起来,比如放到 ~/virtualenvs/,并对不同的虚拟环境使用不同的目录来管理。virtualenvwrapper 正是这样做的。并且,它还省去了每次开启虚拟环境时候的 source 操作,使得虚拟环境更加好用。
安装
同样,从安装开始。
安装 virtualenvwrapper 也可以使用 pip 的方式。需要加入 sudo 的话请自行加入哦~
pip install virtualenvwrapper
$ sudo -E pip install virtualenvwrapper # 有些时候可能需要加上 -H,保留 $HOME 环境变量不改变
(加上 -E 可以在切换用户时保持环境变量不切换,如果提示)
不过,在 Mac OS X El Capitan 上可能会出现安装报错的情况,主要问题出在一个叫做 six 的包上。因此安装的时候,可以采用如下方式。
pip install virtualenvwrapper --ignore-installed six
现在,我们就拥有了一个可以管理虚拟环境的神器。
使用
首先,需要对 virtualenvwrapper 进行配置。它需要指定一个环境变量,叫做 WORKON_HOME,并且需要运行一下它的初始化工具 virtualenvwrapper.sh,这个脚本在 /usr/local/bin/ 目录下。WORKON_HOME 就是它将要用来存放各种虚拟环境目录的目录,这里我们可以设置为 ~/.virtualenvs。
export WORKON_HOME='~/.virtualenvs'
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3.5
export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/bin/virtualenv
source /usr/local/bin/virtualenvwrapper.sh
由于每次都需要执行这两部操作,我们可以将其写入终端的配置文件中。例如,如果使用 bash,则添加到 ~/.bashrc (或者 )中;如果使用 zsh,则添加到 ~/.zshrc 中。这样每次启动终端的时候都会自动运行,终端其中之后 virtualenvwrapper 就可以用啦。
利用 virtualenvwrapper,我们可以使用下面的命令轻松创建一个虚拟环境。
$ mkvirtualenv spider # 这里创建的是系统默认的python版本的环境,用 which python 查看默认版本。 建议用下面的命令来制定版本。
$ mkvirtualenv -p /Users/heliclei/.localpython/bin/python3.4 env34 # 指定建立3.4的python环境
$ mkvirtualenv -p /Users/heliclei/.localpython/bin/python2.7 env27 # 指定建立2.7的python环境
之后我们就有了一个叫做 spider 的虚拟环境。它被存放在 $WORKON_HOME/spider 目录下。
新建虚拟环境之后会自动激活虚拟环境。如果我们平时想要进入某个虚拟环境,可以用下面的命令。
$ workon spider #切换到 spider 的python环境
$ workon env34 #切换到 python 3.4 的python环境
$ workon env27 #****
这也就是为什么环境变量中存放虚拟环境的目录为啥叫做 WORKON_HOME。顺便说一句,workon 后面可是可以支持用 tab 自动补全的哟。
同样,离开虚拟环境,可以使用。
deactivate
另外,删除虚拟环境也一样简单。
rmvirtualenv spider
结束
到这里,virtualenv 和 virtualenvwrapper 的基本使用就介绍完了,需要了解更多用法,可以参考官方文档哟。希望这两个工具能够帮助小伙伴们在工作中提高效率哟~~
virtualenv 和 virtualenvwrapper 实践的更多相关文章
- 聊聊 virtualenv 和 virtualenvwrapper 实践
各位 Python 的小伙伴肯定多多少少接触过 virtualenv.本文将介绍 virtualenv 以及如何更科学更优雅地使用 virtualenv. virtualenv 首先来聊一下 virt ...
- virtualenv and virtualenvwrapper on Ubuntu 14.04
In this post I’ll go over my attempt to setup virtual environments for Python development. Most Pyth ...
- python开发之虚拟环境管理:virtualenv、virtualenvwrapper、pycharm
1 引言 进行Python开发时,多个项目可能使用到不同的依赖,例如A项目需要1.8版本的Django,而B项目需要2.0版本的Django,这时候如果没有使用虚拟环境,就需要来回卸载和安装Djang ...
- virtualenv与virtualenvwrapper虚拟环境
python开发之virtualenv与virtualenvwrapper讲解 在使用 Python 开发的过程中,工程一多,难免会碰到不同的工程依赖不同版本的库的问题: 亦或者是在开发过程中不想让物 ...
- virtualenv与virtualenvwrapper讲解
#现在有个需求,我现在有两个项目,一个得运行于django1.1.11 ,还有一个版本得跑在django2.0上 python3 manage.py runserver 0.0.0.0:8000 ...
- python虚拟环境--virtualenv和virtualenvwrapper
python虚拟环境--virtualenv和virtualenvwrapper http://www.cnblogs.com/technologylife/p/6635631.html https: ...
- virtualenv、virtualenvwrapper安装和使用;Mac os的特殊性
[sudo] pip install virtualenv 或者[sudo] pip3 install virtualenv [sudo]可用可不用 pip/pip3 install virtuale ...
- pyenv、virtualenv、virtualenvwrapper三种python多版本介绍
今天有把此前接触过的三种python实现多版本环境用到的软件pyenv.virtualenv.virtualenvwrapper,了解了一番,现做如下总结: 一.pyenv: 是针对python多版本 ...
- Centos7虚拟环境virtualenv与virtualenvwrapper的安装及基本使用
一.使用虚拟环境的原因 在使用 Python 开发的过程中,工程一多,难免会碰到不同的工程依赖不同版本的库的问题:亦或者是在开发过程中不想让物理环境里充斥各种各样的库,引发未来的依赖灾难.此时,我们需 ...
随机推荐
- ViewPager的监听事件失效
主要是因为在我项目使用了PageIndicator,所以这个时候监听事件要写在PageIndicator上. mIndicator.setOnPageChangeListener(new OnPage ...
- Linux进程控制(一)
1. Linux进程概述 进程是一个程序一次执行的过程,它和程序有本质区别.程序是静态的,它是一些保存在磁盘上的指令的有序集合:而进程是一个动态的概念,它是一个运行着的程序,包含了进程的动态创建.调度 ...
- splay入门
在比较了网上的几份模板的速度之后,发现指针版明显快了很多,但是一敲起来....各种不习惯...所以还是学的hzwer 的数组版... bzoj3223:维护reverse操作就可以了 #include ...
- js设置与获取Cookie
/*设置与获取Cookie*/ var Cookie ={} Cookie.write = function(key, value, duration){ var d = new Date(); d. ...
- hihoCoder #1174 : 拓扑排序·一 (判断循环图)
G++ 261ms 13MB 题意: 给出n门课程的修读所需要的前置课程的关系,按理说应该是个拓扑图,但是因为某些原因导致了混乱,所以有可能不是一个拓扑图.现在的问题是,判断该图是否为一个拓扑图(即无 ...
- 【转】Qt数据库总结
转自:http://blog.chinaunix.net/uid-25201977-id-3014100.html #include <QtSql>QT += sql QSqlDataba ...
- Spark 问题总结
1 创建hive外部表 其实这个问题应该是hive的问题.就是外部表在创建的时候需要指定目录.举例说明 我们要创建一个外部表,其来源是test_tab这个文件,那么在LOCATION处是不是这样写呢? ...
- 【英语】Bingo口语笔记(7) - Break系列
- AIX 第3章 指令记录
[ssdb01.shz.hn|oracle|/home/oracle]$oslevel -rq --查看系统已安装的维护级别 Known Recommended Maintenance Levels ...
- mysql 表空间及索引的查看方法
CONCAT : concat() 方法用于连接两个或多个数组. database : 数据库(11张) 数据库,简单来说是本身可视为电子化的文件柜——存储电子文件的处所,用户可以对文件 ...