用pyenv 和 virtualenv 搭建单机多版本python 虚拟开发环境
作为主流开发语言, 用python 开发的程序越来越多。 方便的是大多linux系统里面都默认集成了python, 开发可以随时随地开始。 但有时候这也成为了一个短板, 比如说有时候我们需要开发和调试一些需要安装在默认python路径里的程序, 反复地修改和安装会使系统目录越来越乱,这对于一些有洁癖的程序员来说是不可接受的。 还有时候我们需要在不同的python版本上开发, 而系统一般只会自带一到两种python版本, 切换起来更是麻烦。
本文将介绍如何利用pyenv 和virtualenv 在单机上搭建多版本python 虚拟开发环境。
首先我们搞清楚pyenv 和virtualenv分别是干什么的。
pyenv可以帮助你在一台开发机上建立多个版本的python环境, 并提供方便的切换方法。
virtualenv则提供了一种功能, 就是将一个目录建立为一个虚拟的python环境, 这样的话, 用户可以建立多个虚拟环境, 每个环境里面的python版本可以是不同的, 也可以是相同的, 而且环境之间相互独立。
如果解释得还不是很清楚的话,我们举例说明。
首先我们可以用pyenv 安装多个python 版本, 比如安装了2.5, 2.6, 3.3 三个版本。 用户可以随意切换当前默认的python版本。 但这时候, 每个版本的环境仍是唯一的, 如果我们想在环境中安装一些库的话, 还是会导致这个版本的环境被修改。 这个时候, 如果我们用virtual env去建立虚拟环境, 就可以完全保证系统路径的干净。无论你在虚拟环境中安装了什么程序, 都不会影响已安装版本的系统环境。
说了这么多, 还是动手实践一下来得实在。本文的例子是在一台干净的Ubuntu机器上进行的
1. 首先我们安装pyenv
因为我的Ubuntu是干净的, 所以还需要先安装curl 和 git
sudo apt-get install curl git-core
接下来安装pyenv
curl -L https://raw.github.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash
这个命令会把pyenv安装到当前用户的 ~/.pyenv目录下.
同时, 我们还需要把下面代码存到~/.bashrc文件中:
export PYENV_ROOT="${HOME}/.pyenv"
if [ -d "${PYENV_ROOT}" ]; then
export PATH="${PYENV_ROOT}/bin:${PATH}"
eval "$(pyenv init -)"
fi
这段代码的作用主要是指明pyenv的位置, 以便以后可以直接在命令行里面运行pyenv命令。 保存在~/.bashrc 文件中是为了每次用户登陆后自动生效。
所以如果你是第一次运行命令并且没有注销的话, 这一段是不会生效的, 我们还需要运行下面的命令令其生效
source ~/.bashrc
然后就可以直接在命令行里面敲pyenv了。
2. 安装一些必须的包
sudo apt-get build-dep python2.7
后面安装其他版本python的时候会需要这些包
3. 安装某个版本的python
首先我们可以查看一下有哪些版本的python 可以安装
pyenv install --list
结果如下:
2.4
2.4.
2.4.
2.4.
2.4.
2.4.
2.4.
2.5
...
接下来, 作为例子我们安装两个版本 (2.7.1 和 3.3.5)
pyenv install 2.7.
pyenv install 3.3.
安装完毕后, 我们可以查看安装的情况
pyenv versions
输出结果如下:
* system (set by /home/tony/.pyenv/version)
2.7.
3.3.
简单来说我们已经在这台机器上安装了三个版本的python
system 代表当前系统的python 版本
2.7.1 和 3.3.5是我们用pyenv安装的
*表示当前的python版本, 可以看到, 我们还在使用的是默认的system 自带的python版本
4. 切换python版本做一下测试
既然已经安装了两个其他版本的python, 我们来做一下测试
pyenv global 2.7.
这条命令就是将当前python 版本切换到2.7.1
再次运行 pyenv versions, 结果如下:
system
* 2.7. (set by /home/tony/.pyenv/version)
3.3.
可以看到当前的python 版本已经切换到2.7.1了, 如果还不放心, 直接运行 ‘python’ 命令进行验证:
tony@ubuntu:~$ python
Python 2.7. (r271:, May , ::)
[GCC 4.8.] on linux3
Type "help", "copyright", "credits" or "license" for more information.
>>>
这里可以清楚看到, 当前版本确实是2.7.1
同理, 我们可以继续用python global在各个版本之间进行切换, 如果要切换回系统版本, 请用:
pyenv global system
如果要卸载某个版本的python, 可以这样:
pyenv uninstall x.x.x
5. 利用virtualenv 创建虚拟python环境
现在我们已经安装了多个python版本,但是这还不够, 某些有洁癖的程序员是一定要系统环境足够干净的,这时候我们可以使用virtualenv来创建虚拟python环境
virtualenv本是一个独立的工具,官网在这里:https://pypi.python.org/pypi/virtualenv
幸运的是,如果你是安装我们前面的方式安装pyenv的,那它已经帮我们以plugin的形式安装好了virtualenv, 我们只要使用就好了
首先我们创建一个2.7.1的虚拟环境
pyenv virtualenv 2.7. env271
这条命令在本机上创建了一个名为env271的python虚拟环境,这个环境的真实目录位于:~/.pyenv/versions/
注意,命令中的 ‘2.7.1’ 必须是一个安装前面步骤已经安装好的python版本, 否则会出错。
然后我们可以继续通过 ‘pyenv versions’ 命令来查看当前的虚拟环境, 结果如下:
* system (set by /home/tony/.pyenv/version)
2.7.
3.3.5
env271
这里我们可以看到, 除了已经安装的python版本, 我们多出了一个env271的python虚拟环境
6. 切换和使用新的python虚拟环境
切换到新的虚拟环境的命令为
pyenv activate env271
接下来我们的python环境就已经切换到2.7.1的虚拟环境了, 运行 ‘python’ 命令认证
(env271)tony@ubuntu:~$ python
Python 2.7. (r271:, May , ::)
[GCC 4.8.] on linux3
Type "help", "copyright", "credits" or "license" for more information.
>>>
可以看到, python版本已经是2.7.1, 而且是在虚拟环境之中 (env271)
下面基本上你就可以在这个虚拟环境里面为所欲为了 :) 再也不用担心系统路径被搞乱的问题了。
如果要切换回系统环境, 运行这个命令即可
pyenv deactivate
那如果要删除这个虚拟环境呢? 答案简单而且粗暴,只要直接删除它所在的目录就好:
rm -rf ~/.pyenv/versions/env271/
至此大功告成!
本文简单介绍了如何利用pyenv 和virtualenv来单机多版本python虚拟开发环境的方法,
这两个工具还有很多功能, 无法一一详述,具体可以参考他们的官方文档。 本文只起到一个抛砖引玉的作用, 希望有所帮助
版权声明:
本文由 雷子-晓飞爸 所有,发布于http://www.cnblogs.com/npumenglei/ 如果转载,请注明出处,在未经作者同意下将本文用于商业用途,将追究其法律责任。
用pyenv 和 virtualenv 搭建单机多版本python 虚拟开发环境的更多相关文章
- 用pyenv和virtualenv搭建单机多版本python虚拟开发环境
作为主流开发语言, 用python 开发的程序越来越多. 方便的是大多linux系统里面都默认集成了python, 开发可以随时随地开始. 但有时候这也成为了一个短板, 比如说有时候我们需要开发和调试 ...
- CentOS下用pyenv 和 virtualenv 搭建单机多版本python 虚拟开发环境
安装 系统环境:CentOS 6.5 安装依赖 yum -y install gcc gcc-c++ make git patch openssl-devel zlib-devel readline- ...
- 使用Anaconda3配置多版本Python虚拟开发环境
有时候,为了使用比较干净的开发环境,或者为了测试一些版本的扩展库,我们可能需要创建虚拟开发环境,在不同的虚拟开发环境中,只安装需要的扩展库,这样可以最大程度上减少不同扩展库之间的兼容性带来的冲突或其他 ...
- 如何利用pyenv 和virtualenv 在单机上搭建多版本python 虚拟开发环境
pyenv 和virtualenv分别是干什么的? pyenv帮助你在一台机上建立多个版本的python环境, 并提供方便的切换方法. virtualenv则就是将一个目录建立为一个虚拟的python ...
- python虚拟开发环境搭建(virtualenv和virtualenvwrapper)
虚拟开发环境的搭建 (0) 搭建虚拟环境的意义 使不同的开发环境独立 环境升级不影响其他开发环境,也不影响全局 防止包管理的混乱 (1) 指定 虚拟环境的创建目录 环境变量设置 创建 WORKON_H ...
- 使用virtualenv搭建python虚拟开发环境
在使用python做开发时,如果多人需要在同一台机器上工作,或者机器环境经常变化时, 添加或删除一些python包很可能会影响到你自己的开发环境. 因此,通过virtualenv工具可以创建一个完全属 ...
- OSX编译安装Python3及虚拟开发环境Virtualenv
0X00.前言 因为工作原因,最近主要做Python开发,刚好电脑系统重装之后所有的东西都需要重新配置.此文主要记录OSX下通过源码编译安装Python3以及安装虚拟开发环境Virtualenv. 0 ...
- Android开发学习总结(一)——搭建最新版本的Android开发环境
Android开发学习总结(一)——搭建最新版本的Android开发环境(转) 最近由于工作中要负责开发一款Android的App,之前都是做JavaWeb的开发,Android开发虽然有所了解,但是 ...
- Android开发学习总结——搭建最新版本的Android开发环境
原文出自:https://www.cnblogs.com/xdp-gacl/p/4322165.html#undefined 最近由于工作中要负责开发一款Android的App,之前都是做JavaWe ...
随机推荐
- Oracle Rman 增量备份与差异备份
一.增量与差异 关于Incremental增量备份级别: Oracle 9i 共有五种级别 0 1 2 3 4,0级最高-4级最低,0级是1级的基础以此类推. Oracle 10g官方文档明确指出增量 ...
- header 输出原始的php报头文件
header() 函数向客户端发送原始的 HTTP 报头. 认识到一点很重要,即必须在任何实际的输出被发送之前调用 header() 函数 (在 PHP 4 以及更高的版本中,您可以使用输出缓存来解决 ...
- union-find算法
1.背景 <算法>一书中提到了关于算法的一些基本思想 优秀的算法因为能够解决实际的问题而变得更为重要: 高效算法的代码可以很简单: 理解某个实现的性能特点是一项有趣而令人满足的挑战: 在 ...
- ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: N O) MYSQL
ERROR 1045 (28000): Access denied for user ODBC@localhost 刚使用mysql, 碰到这个问题.. C:\Program Files\MySQL\ ...
- Linux C 中获取local日期和时间 time()&localtime()函数
1. time() 函数 /* time - 获取计算机系统当前的日历时间(Calender Time) * 处理日期时间的函数都是以本函数的返回值为基础进行运算 * * 函数原型: * #incl ...
- Maven私服Nexus详解
maven的仓库只有两大类:1.本地仓库 2.远程仓库,在远程仓库中又分成了3种:2.1 中央仓库 2.2 私服 2.3 其它公共库. 私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理 ...
- 【机器学习PAI实践十二】机器学习算法基于信用卡消费记录做信用评分
背景 如果你是做互联网金融的,那么一定听说过评分卡.评分卡是信用风险评估领域常用的建模方法,评分卡并不简单对应于某一种机器学习算法,而是一种通用的建模框架,将原始数据通过分箱后进行特征工程变换,继而应 ...
- [LeetCode&Python] Problem 637. Average of Levels in Binary Tree
Given a non-empty binary tree, return the average value of the nodes on each level in the form of an ...
- 《DSP using MATLAB》Problem 4.15
只会做前两个, 代码: %% ---------------------------------------------------------------------------- %% Outpu ...
- AJAX异步实现简单的瀑布流
传统瀑布流布局ul-li,需要先设定显示几列,每列是一个li,需要左浮动并指定宽度,li里面的布局也要先布局好,主要是要定宽,高度自动:然后通过ajax异步,从数据库中得到数据,遍历后将数据插入最矮的 ...