项目太多工作环境互相干扰?virtualenv 一招教你轻松解决。
写在之前
在上一篇文章 安装的 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 一招教你轻松解决。的更多相关文章
- virtualenv+pyenv管理python工作环境
因为python2与3之间存在差异,所以日常工作中可能需要在2与3之间来回切换.在相同的python版本中,有可能有的项目需要用到django1.8,别的项目需要用到django1.9,所以如果可以在 ...
- virtualenv 创建隔离工作环境
在开发 Python 应用程序的时候,每个项目所需要的python版本和各种包依赖都可能不完全一样,我们当然希望当前运行环境只包含对当前项目有用的包依赖,以保证运行环境的干净.virtualenv就是 ...
- [转载] 高效MacBook工作环境配置
原文: http://www.xialeizhou.com/?p=71 高效MacBook工作环境配置 发表于 2015 年 8 月 1 日 由 xialeizhou 本文记录整个配置过程,供新入手M ...
- python环境下安装virtualenv,virtualenvwrapper
在使用 Python 开发的过程中,工程一多,难免会碰到不同的工程依赖不同版本的库的问题: 亦或者是在开发过程中不想让物理环境里充斥各种各样的库,引发未来的依赖灾难. 此时,我们需要对于不同的工程使用 ...
- PHP入门:在Windows中安装PHP工作环境
PHP入门:在Windows系统中分别安装PHP工作环境 一.什么是LAMP? Linux+Apache+Mysql+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是 ...
- [virtualenv]生产环境中使用virtualenv
virtualenv 对于python开发和部署都是好工具,可以隔离多个python版本和第三方库的版本,这里作者总结了几个常用python服务怎么样结合virtual部署 原文链接 Python 中 ...
- 用deepin堆砌工作环境
用deepin堆砌工作环境 这篇文章记录了我用 deepin 15.5搭建工作环境的过程,供我个人在未来重装系统时参考.对于其他以 deepin 操作系统作为主要工作平台的看官,咱们是相亲相爱的一家人 ...
- [转]windows环境下使用virtualenv对python进行多版本隔离
windows环境下使用virtualenv对python进行多版本隔离 最近在用python做一个文本的情感分析的项目,用到tensorflow,需要用python3的版本,之前因为<机器学习 ...
- TypeScript入门一:配置TS工作环境
配置手动编译TS文件工作环境 配置webpack自动化打包编译工作环境(后面补充) 一.TypeScript入门学习引言 进入主题之前,首先说明这个系列的博客是我刚刚接触TypeScript的学习笔记 ...
随机推荐
- 微信企业号升级企业微信后zabbix告警发不出去
首先看下微信的脚本 #!/bin/bash ###SCRIPT_NAME:weixin.sh### ###send message from weixin for zabbix monitor### ...
- 浅谈 import / export
import { ngModule } from '@angular/core'; import { AppComponent } from './app.component'; export cla ...
- appium---adb通过wifi连接手机
前几天接到领导的安排,想要测试下apk的耗电量,可以通过手机adb命令进行监控手机电量的变化:但是这样如果通过USB连接手机的话,USB就会自动给手机进行充电,无法达到我们想要的结果,于是想到了通过w ...
- 拷贝时间测试=cudamelloc+cudahostalloc
/* * Copyright 1993-2010 NVIDIA Corporation. All rights reserved. * * NVIDIA Corporation and its lic ...
- 小弟在研究CUDA时出现一个问题,求解
这是<GPU高性能编程CUDA中文实战>中的例子,第七章,热传导模拟,但是出现下面的问题,求牛人解读.小弟跪谢... 主要问题就是关键字变白. 但是添加需要的头文件后一些系统自带的关键字也 ...
- CUDA:Supercomputing for the Masses (用于大量数据的超级计算)-第五节
原文链接 第五节:了解和使用共享内存(2) Rob Farber 是西北太平洋国家实验室(Pacific Northwest National Laboratory)的高级科研人员.他在多个国家级的实 ...
- shiro学习记录(三)
1.使用ehcache缓存权限数据 ehcache是专门缓存插件,可以缓存Java对象,提高系统性能. l ehcache提供的jar包: 第一步:在pom.xml文件中引入ehcache的依赖 &l ...
- 导航条(Navbar)
1.添加.navbar-fixed-top类可以让导航条固定的页面的顶部,固定的导航条会遮住页面上其它的内容,除非给body元素设置padding,导航条默认高度为50px ,因此可以给body元素设 ...
- 第三篇、Swift基础学习
1.常量与变量 什么是常量和变量 在Swift中规定:在定义一个标识符时必须明确说明该标识符是一个常量还是变量 使用let来定义常量,定义之后不可以修改 使用var来定义变量,定义之后可以修改 变量的 ...
- C++ 容器与继承
如果容器类型定义为基类类型,那么虽然可以把派生类装进容器中,但是不能通过容器访问派生类自己的public成员,派生类将会倍切掉,只保留派生类的基类部分: 如果把容器定义为派生类类型,那么不能把基类类型 ...