virtualenv 、pythonbrew 和 pyenv 的探讨

作者:劉騰龍

导语

自 Python3 出现后,很多lib的架构及用法已改变,以往 Python2 卻不支持,令不少开发者感得困扰,要解决这个 Python2 及3環境的切换问题,我们需要一个能夠把不同开发环境分开的工具。

简单搜索,我们发现了三个可以解决这个问题的工具,他们分别是:

  1. virtualenv
  2. pythonbrew
  3. pyenv

pythonbrew

在Github官方看到有关pythonbrew已经停止更新的讯息,并且鼓励用家使用pyenv,其实pythonbrew与pyenv基本上是同样的工具,这样我们便剩下两个选择了。

virtualenv

首先我们先说Virtualenv (請先安裝該套件),运作原理如下:

在Linux 上安装不同的python版本,比如说Python2.7及Python3.2。

创建以Python2.7为解释器的环境:

virtualenv -p /usr/bin/python2.7 env2.7

创建以Python3.2为解释器的环境:

virtualenv -p /usr/bin/python3.2 env3.4

用Linux套件Tree查看两个环境的目录:

env2.7

env3.4

当我们创建不同的环境时,virtualenv会把系统内安装了的各 Python版本的相关库及套件复制到我们的指定目录下,以目录来隔离各版本的 Python,详细图示:

日后我们只要激活所需环境便可在不同环境进行开发:

 source env2.7/bin/activate
 source env3.4/bin/activate

pyenv

顺利安装了pyenv后,查询可安装的版本。

pyenv install --list

我们可以看到不同的Python版本,因为列表很长,只列举当中几个:

  • 2.7.9
  • 3.6.1
  • anaconda3-4.4.0
  • ironpython-2.7.7

安装Python 2.7.9的版本

pyenv install 2.7.9

切换Python 2.7.9的版本

pyenv global 2.7.9

在/home/user/.pyenv/versions目录下便会看到:

2.7.9

当选择该 Python版本安装时,pyenv会从云端下载有关套件并储存在 .pyenv/versions/ 目录下,环境切换则透过嵌入模组 shims 注入路径来决定使用什么版本的Python,详细图示:

比较

标题1

标题2

标题3

文本1

文本2

文本3

原理

优点

Virtualenv

进入特定目录,在虚拟环境(局域)下运作。

Python 版本一样,都可创建无限的局域环境,方便开发者在相同环境使用不同的 site-packages。

pyenv

利用shims 进行全域切换 Python的不同版本。

Python 从云端下载及即时安装,不需预先在本地安装不同版本才使用。

参考

virtualenv 安装及使用方法:https://virtualenv.pypa.io/en/stable pyenv 安装及使用方法:https://github.com/pyenv/pyenv Linux套件 - Tree 的安装及使用方法:https://www.computerhope.com/unix/tree.htm

原创声明,本文系作者授权云+社区-专栏发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏我和PYTHON有个约会

02.开发环境搭建

![Uploading image_749185.png . . .]python,是一种面向对象,解释型的计算机程序设计语言【废话】

751
来自专栏数据库

磁盘dismount,导致crs无法启动

一、故障现象 无法连接rac数据库,客户端连接提示无监听程序,进入主机查看集群状态crsctl stat res –t命令无法使用,提示 CRS-4535: C...

1797
来自专栏Rainbond开源「容器云平台」

如何在开源Rainbond上对接Maven仓库

922
来自专栏程序员叨叨叨

PHP通信接口大坑集锦

最近因为毕设在搭建接口及数据库环境,使用Apache+MySQL+PHP在阿里云ECS服务器中配置,之前在本地配置过并成功实现,但是在阿里云中却频频出错,记录下...

672
来自专栏王磊的博客

ReactNative环境搭建扩展篇——安装后报错解决方案

之前一篇写了《逻辑性最强的React Native环境搭建与调试》说了RN的安装,今天在这里做一个复盘,让我们能够更直观更深入的了解React Native(以...

3388
来自专栏陈纪庚

如何使用nodejs发邮件

昨天就开始想使用nodemailer来实现一个发送邮件的功能,不过发现了很多个坑,网上给的资料也很杂很乱,所以决定写一篇真正能用的来帮助大家减少弯路

653
来自专栏Java技术分享

1.Linux操作系统安装的5种方法以及心得

  安装Linux共有五种方法   1、光盘       2、硬盘   3、NFS 映像   4、FTP   5、HTTP   其中光盘安装是最普遍的,也是最简...

2037
来自专栏LIN_ZONE

ubuntu下apache新建虚拟主机

最近发现在一个服务器上面布了一些项目,如果不用虚拟主机,用链接跳进去的话,有时候路径会出错,而自己在配置虚拟主机的时候又出现了一些问题,看似简单的东西,却花费了...

773
来自专栏Bug生活2048

Linux下MongoDB实现远程自动备份

既然都备份了,为了保险起见,备份与库就不放在同一台服务器上了,于是向运维申请了一台服务器,同时安装好mongo,如果不知道怎么安装mongo的话可以看我的上一篇...

852
来自专栏性能与架构

Linux lsof 命令的实用案例

lsof 简介 lsof(list open files)是一个列出当前系统中所有打开文件的工具 Linux中一切皆文件,所以在系统中,被打开的文件可以是普...

4848

扫码关注云+社区