写在之前

在上一篇文章 安装的 Python 版本太多互相干扰?以后再也不用担心这个问题了。 中我给大家介绍了一个 Python 版本的管理工具「pyenv」,可以很容易的安装不同的 Python 版本,进行全局的 Python 版本切换。就这么开开心心的解决了 Python 版本冲突的问题以后,又突然出现了一个新的问题摆上了桌面:假如你手里有两个项目,其中一个项目要求使用 django 1.5 这个版本,但是另外一个项目却要求使用 django 2.0 这个版本,该怎么办呢?

显然此时如果全局安装 django,肯定是无法满足我们的这个需求。全局安装就安装一个版本,我总不能用另一个的时候把当前这个版本卸掉吧,这样的话那真是就麻烦到家了,这时候我又想到了 Python 的简洁优雅,省心省力,这个问题肯定有解,果不其然,又被我给找到了,这就是我今天要给大家说的「virtualenv」。

「virtualenv」本身就是一个独立的工具,用来隔离不同项目的工作环境。因为上一篇文章所讲的「pyenv」也是用来隔离的,所以很多人容易把这两个搞混,所以在这里我先来说一下两者之间的区别。

区别

「pyenv」是用来管理不用版本的 Python,例如你做某个项目的时候需要用的是 Python 2.7.1 这个版本,但是呢你又想与时俱进,学习一下 Python3,这个时候你就可以用 pyenv 来管理这两个不同版本的 Python。

「virtualenv」是用来隔离不同项目的工作环境,例如你手里的两个项目,用到的都是 Python 2.7.1,但是呢,其中一个项目需要使用 django 1.5,而另一个项目则需要使用 django 2.0,这个时候 virtualenv 横空出世,解决这个问题。

可能到这敏锐的你已经发现,我们只需要把「pyenv」和「virtualenv」这俩工具组合起来,就能够让任意版本的 Python 和 任意版本的第三方库随意组合,这种随意组合保持着很高的灵活性,同时也避免了不同项目之间可能发生的工作环境的冲突。

我在上面说过「virtualenv」是一个独立的工具,我们可以直接使用它。但是鉴于上一篇文章我们学习了 pyenv,本着学以致用,我们还是用 pyenv,我假设你已经学习了上一篇文章,系统中已经有了 pyenv,此时只需要安装 pyenv-virtualenv 这个插件即可。

安装 pyenv-virtualenv

安装 pyenv-virtualenv,手动安装和我们之前安装 pyenv 是一样的,从 GitHub 直接下载到本地,首先执行下面的命令:

git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv

安装的过程如下所示:

Cloning into '/Users/rocky/.pyenv/plugins/pyenv-virtualenv'...
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 2009 (delta 0), reused 0 (delta 0), pack-reused 2005
Receiving objects: 100% (2009/2009), 568.83 KiB | 171.00 KiB/s, done.
Resolving deltas: 100% (1373/1373), done.

我们可以看到上面已经安装成功,接下来我们要添加一下环境变量:

echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile

环境变量配置成功,接下来我们要重新载入一下配置文件,在这里我们是直接推出以后重新登陆:

exec "$SHELL"

就这样,「pyenv-virtualenv」就安装完成了。同样我们可以通过命令行来验证一下它是否安装成功:

pyenv help virtualenv

显示的结果如下所示:

Usage: pyenv virtualenv [-f|--force] [VIRTUALENV_OPTIONS] [version] <virtualenv-name>
pyenv virtualenv --version
pyenv virtualenv --help -f/--force Install even if the version appears to be installed already

pyenv-virtualenv 的使用

pyenv-virtualenv 安装成功以后,我们就可以给同一个 Python 创建不同的虚拟环境,比如像下面这样创建两个新的虚拟环境:

pyenv virtualenv 2.7.1 project1
pyenv virtualenv 2.7.1 project2

我们可以用如下命令来查看已经创建好的虚拟环境:

pyenv virtualenvs

显示如下:

2.7.1/envs/project1 (created from /home/rocky/.pyenv/versions/2.7.1) 2.7.1/envs/project2 (created from /home/rocky/.pyenv/versions/2.7.1)
project1(created from /home/rocky/.pyenv/versions/2.7.1)
project2 (created from /home/rocky/.pyenv/versions/2.7.1)

创建完上述的虚拟环境以后,我们就可以通过命令行来操作它,比如进入(activate)或者退出(deactivate)虚拟环境。当我们进入到虚拟环境的时候,左边会提示我们当前所在的环境,因为有时候我们的本地可能建了很多个虚拟环境,有提示的话可以防止你记错当前你进入的环境,人性化的一批,如下所示:

pyenv activate project1

上述意思是说进入到 project1 的虚拟环境。

(project1) $ pip install django==1.5
(project1) $ pyenv deactivate

进入到 project1 的虚拟环境后,安装了 django 1.5 这个版本,然后退出 project1 这个虚拟环境。

当然还是能装就能删,如果你看哪个环境不顺眼,想要删掉它,就用下面的命令:

pyenv virtualenv-delete project1

写在之后

更多内容,欢迎关注公众号「Python空间」,期待和你的交流。

项目太多工作环境互相干扰?virtualenv 一招教你轻松解决。的更多相关文章

  1. virtualenv+pyenv管理python工作环境

    因为python2与3之间存在差异,所以日常工作中可能需要在2与3之间来回切换.在相同的python版本中,有可能有的项目需要用到django1.8,别的项目需要用到django1.9,所以如果可以在 ...

  2. virtualenv 创建隔离工作环境

    在开发 Python 应用程序的时候,每个项目所需要的python版本和各种包依赖都可能不完全一样,我们当然希望当前运行环境只包含对当前项目有用的包依赖,以保证运行环境的干净.virtualenv就是 ...

  3. [转载] 高效MacBook工作环境配置

    原文: http://www.xialeizhou.com/?p=71 高效MacBook工作环境配置 发表于 2015 年 8 月 1 日 由 xialeizhou 本文记录整个配置过程,供新入手M ...

  4. python环境下安装virtualenv,virtualenvwrapper

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

  5. PHP入门:在Windows中安装PHP工作环境

    PHP入门:在Windows系统中分别安装PHP工作环境 一.什么是LAMP? Linux+Apache+Mysql+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是 ...

  6. [virtualenv]生产环境中使用virtualenv

    virtualenv 对于python开发和部署都是好工具,可以隔离多个python版本和第三方库的版本,这里作者总结了几个常用python服务怎么样结合virtual部署 原文链接 Python 中 ...

  7. 用deepin堆砌工作环境

    用deepin堆砌工作环境 这篇文章记录了我用 deepin 15.5搭建工作环境的过程,供我个人在未来重装系统时参考.对于其他以 deepin 操作系统作为主要工作平台的看官,咱们是相亲相爱的一家人 ...

  8. [转]windows环境下使用virtualenv对python进行多版本隔离

    windows环境下使用virtualenv对python进行多版本隔离 最近在用python做一个文本的情感分析的项目,用到tensorflow,需要用python3的版本,之前因为<机器学习 ...

  9. TypeScript入门一:配置TS工作环境

    配置手动编译TS文件工作环境 配置webpack自动化打包编译工作环境(后面补充) 一.TypeScript入门学习引言 进入主题之前,首先说明这个系列的博客是我刚刚接触TypeScript的学习笔记 ...

随机推荐

  1. C++编写双向链表

    创建双向链表类,该类有默认构造函数.类的拷贝函数.类的.实现链表添加数据.升序排序.查找链表中某个节点及删除链表中某个节点的操作 代码实现: #include<iostream> #inc ...

  2. PHP snippets

    Friendly file size string public static function bytesToSize($bytes) { if ($bytes < 1024) { retur ...

  3. 使用adbWireless无线调试Android真机设备[转]

    开发Android的朋友都知道,真机调试需要把手机与PC相连,然后把应用部署到真机上进行安装和调试.长长的USB线显得很麻烦,而且如果需要USB接口与其他设备连接的话显得很不方便.今天介绍一种不通过U ...

  4. String和string

    String和string的区别 从位置讲:         1.String是.NET   Framework里面的String,小写的string是C#语言中的string 2.如果把using ...

  5. LeetCode 4Sum 4个数之和

    题意:这是继2sum和3sum之后的4sum,同理,也是找到所有4个元素序列,满足他们之和为target.以vector<vector<int>>来返回,也就是二维的,列长为4 ...

  6. 最简单的基于FFMPEG的转码程序 —— 分析

    模块:  libavcodec    - 编码解码器         libavdevice   - 输入输出设备的支持         libavfilter   - 视音频滤镜支持         ...

  7. Linux I/O调度

    一) I/O调度程序的总结 1) 当向设备写入数据块或是从设备读出数据块时,请求都被安置在一个队列中等待完成.    2) 每个块设备都有它自己的队列.    3) I/O调度程序负责维护这些队列的顺 ...

  8. POJ-3565 Ants---KM算法+slack优化

    题目链接: https://vjudge.net/problem/POJ-3565 题目大意: 在坐标系中有N只蚂蚁,N棵苹果树,给你蚂蚁和苹果树的坐标.让每只蚂蚁去一棵苹果树, 一棵苹果树对应一只蚂 ...

  9. Hadoop完全分布式集群环境搭建

    1. 在Apache官网下载Hadoop 下载地址:http://hadoop.apache.org/releases.html 选择对应版本的二进制文件进行下载 2.解压配置 以hadoop-2.6 ...

  10. python操作文件目录

    # 查看当前目录的绝对路径: >>> os.path.abspath('.') /Users/NaCl/Documents/GitHub #同样的道理,要拆分路径时,也不要直接去拆字 ...