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 条评论
登录 后参与评论

相关文章

来自专栏云计算教程系列

什么是高可用性?

随着对旨在为关键系统提供服务的可靠和高性能基础架构的需求不断增加,术语可扩展性和高可用性不再受欢迎。虽然处理增加的系统负载是一个常见问题,但减少停机时间和消除单...

2000
来自专栏大数据和云计算技术

HBase 的MOB压缩分区策略介绍

HBase应用场景非常广泛;社区前面有一系列文章。大家可以到社区看看看;张少华同学本篇主要讲HBase的MOB压缩分区策略介绍,非常赞!大力推荐!

1201
来自专栏IT大咖说

聊聊容器调度框架,看又拍云如何基于mesos实现

摘要 为了更好地完成云处理服务的负载均衡, 零停机升级, 自定义策略调度等功能, 又拍云用 Go 实现了自己的容器调度框架, 管理长期服务和定时任务。 嘉宾演讲...

39711
来自专栏架构师之路

数据库秒级平滑扩容架构方案

一、缘起 (1)并发量大,流量大的互联网架构,一般来说,数据库上层都有一个服务层,服务层记录了“业务库名”与“数据库实例”的映射关系,通过数据库连接池向数据库路...

4868
来自专栏黑白安全

Memsniff:一款开源的Memcached流量分析工具

在<span "="">知名在线资源存储网站Box上,我们看到云服务已经经历了从一小撮应用服务器和数据库到高规格、高性能协作平台的转变。像大多数大型网络公司一样...

1013
来自专栏高性能服务器开发

4 关于游戏服务端架构的整理

一个大型的网落游戏服务器应该包含几个模块:网络通讯,业务逻辑,数据存储,守护监控(不是必须)。其中业务逻辑可能根据具体需要,又划分为好几个子模块。

2375
来自专栏非著名程序员

Android开发方便快捷的8个好工具,你造吗?

Android是第二个最流行的用于 智能手机和平板电脑 的操作系统。这里有8个最好的 Android工具以许多不同的方式 帮助开发人员 ,例如 - SDK和AV...

1867
来自专栏王金龙的专栏

微服务入门

“微服务”最初是由 MartinFowler 在 2014年写的一篇文章 《MicroServices》中提出来的。 关于 Martin Fowler 的介绍,...

2222
来自专栏phodal

博客系统的架构思考(中)——静态与CQRS

对于复杂的系统来说,上一篇的做法做确实很不错。但是对于一个简单地系统来说,这样做是不是玩过火了?如果我们要设计一个博客系统的话,那么我们是不是可以考虑将Writ...

2059
来自专栏Java编程技术

利用MongoDB 分片集群(Sharded Cluster)实现高并发大数据处理

考虑这样一个场景,有个数据量有10多亿数据的设备库,里面存放了注册的设备的信息,并且设备数据还可能会递增,然后业务集群需要对指定条件的设备群发信息,那么如何才能...

2032

扫码关注云+社区