安装 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 目录中包含一些在这个虚拟环境中可用的命令,以及开启虚拟环境的脚本 activateinclude 中包含虚拟环境中的头文件,包括 Python 的头文件;lib 中就是一些依赖库啦~~

当然,现在我们还没有进入到虚拟环境中。激活虚拟环境只需要一条命令。

source /path/to/project/spider/bin/activate

此时就可以我们就已经在虚拟环境中啦。

接下来安装工程需要的 requests 库。

pip install requests

搞定!

这时候在虚拟环境里就有了 requests 库,宿主环境中则不会被干扰。

那么如何退出虚拟环境嘞?退出就更简单啦,只需要下面一个命令就搞定啦。

deactivate

此时就回到了进入虚拟环境之前,一切都好像没发生过。多年以后,如果你忘记了虚拟环境的位置,一切就真的没发生过了 = =

补充一句,如果想要删除虚拟环境,只要把这个目录下的 binincludelib 三个目录删掉就好了。

(注意: 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

结束

到这里,virtualenvvirtualenvwrapper 的基本使用就介绍完了,需要了解更多用法,可以参考官方文档哟。希望这两个工具能够帮助小伙伴们在工作中提高效率哟~~

virtualenv 和 virtualenvwrapper 实践的更多相关文章

  1. 聊聊 virtualenv 和 virtualenvwrapper 实践

    各位 Python 的小伙伴肯定多多少少接触过 virtualenv.本文将介绍 virtualenv 以及如何更科学更优雅地使用 virtualenv. virtualenv 首先来聊一下 virt ...

  2. 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 ...

  3. python开发之虚拟环境管理:virtualenv、virtualenvwrapper、pycharm

    1 引言 进行Python开发时,多个项目可能使用到不同的依赖,例如A项目需要1.8版本的Django,而B项目需要2.0版本的Django,这时候如果没有使用虚拟环境,就需要来回卸载和安装Djang ...

  4. virtualenv与virtualenvwrapper虚拟环境

    python开发之virtualenv与virtualenvwrapper讲解 在使用 Python 开发的过程中,工程一多,难免会碰到不同的工程依赖不同版本的库的问题: 亦或者是在开发过程中不想让物 ...

  5. virtualenv与virtualenvwrapper讲解

    #现在有个需求,我现在有两个项目,一个得运行于django1.1.11 ,还有一个版本得跑在django2.0上 python3 manage.py runserver  0.0.0.0:8000   ...

  6. python虚拟环境--virtualenv和virtualenvwrapper

    python虚拟环境--virtualenv和virtualenvwrapper http://www.cnblogs.com/technologylife/p/6635631.html https: ...

  7. virtualenv、virtualenvwrapper安装和使用;Mac os的特殊性

    [sudo] pip install virtualenv 或者[sudo] pip3 install virtualenv [sudo]可用可不用 pip/pip3 install virtuale ...

  8. pyenv、virtualenv、virtualenvwrapper三种python多版本介绍

    今天有把此前接触过的三种python实现多版本环境用到的软件pyenv.virtualenv.virtualenvwrapper,了解了一番,现做如下总结: 一.pyenv: 是针对python多版本 ...

  9. Centos7虚拟环境virtualenv与virtualenvwrapper的安装及基本使用

    一.使用虚拟环境的原因 在使用 Python 开发的过程中,工程一多,难免会碰到不同的工程依赖不同版本的库的问题:亦或者是在开发过程中不想让物理环境里充斥各种各样的库,引发未来的依赖灾难.此时,我们需 ...

随机推荐

  1. [C]判断一个文件是否是jpg格式

    同学要帮忙写的,用opencv的imread打开文件看抛出的异常来判断这种抖机灵的姿势就不写了… 首先知道jpg文件是以0xFFD8开始,以0xFFD9结尾的.所以直接拿来fseek fread,异或 ...

  2. Miller_Rabin (米勒-拉宾) 素性测试

    之前一直对于这个神奇的素性判定方法感到痴迷而又没有时间去了解.借着学习<信息安全数学基础>将素性这一判定方法学习一遍. 首先证明一下费马小定理. 若p为素数,且gcd(a, p)=1, 则 ...

  3. window.location.href 放置在单独的JS文件中使用时问题

    场景:假设当前浏览器地址栏的地址是:http://localhost:8888/SSHBoot/tourist/homeMainAction_signInUI.do, 现在我想在点击按钮时定位到“ht ...

  4. UVa 10115 Automatic Editing

    字符串题目就先告一段落了,又是在看balabala不知道在说些什么的英语. 算法也很简单,用了几个库函数就搞定了.本来还担心题里说的replace-by为空的特殊情况需要特殊处理,后来发现按一般情况处 ...

  5. ubuntu 12.04上安装OpenERP 7的一次记录

    登陆ssh, 先更新系统: sudo apt-get update && sudo apt-get dist-upgrade 接着再为openerp运行创建一个系统用户,用户名就叫op ...

  6. mysql-备份和还原(普通还原和binlog还原)

    1)备份 mysqldump -uroot -proot share -l -F > /tmp/share.sql 说明:-l 锁表 -F 刷新日志文件(相当于flush logs) 2)还原( ...

  7. IOS中UIWebView执行javaScript脚本时注意点

    1.webView之所以能够滚动,因为它内部有一个UIScrollView子控件 2.移除webView顶部和底部灰色的一层view * 遍历webView中scrollView内部的所有子控件 * ...

  8. InputStream重用技巧(利用ByteArrayOutputStream)

    有时候我们需要对同一个InputStream对象使用多次.比如,客户端从服务器获取数据 ,利用HttpURLConnection的getInputStream()方法获得Stream对象,这时既要把数 ...

  9. php的session.serialize_handler

    php里面的session.serialize_handler用来设置php的session的序列化方式,默认值为php,及使用php的序列化与反序列化. 还有一个值为session.serializ ...

  10. 使用sqlldr将文件中的数据导入到数据库

    1.创建数据文件: ?如,在D:\创建 zhaozhenlong.txt 文件,文件内容为: 11,12,1321,22,2331,32,33 2.创建控制文件: 如,在D:\创建 zhaozhenl ...