基于pyenv和virtualenv搭建python多版本虚拟环境

时间:2022-04-25
本文章向大家介绍基于pyenv和virtualenv搭建python多版本虚拟环境,主要内容包括pyenv简介、安装pyenv、安装相关依赖包、安装多版本python、pyenv与virtualenv、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

pyenv简介

由于Python的依赖是基于site的,这对于生产环境来说,是一种简单而正确的方式,然而,对于我们的开发环境,基于这样的管理方式,带来了可怕的第三方依赖管理的难题,virtualenv适时出现了,拯救了广大被依赖问题困扰的Python程序员。virtualenv无疑是成功的,它为每个项目创建一个虚拟环境,使得项目的依赖全部在一个虚拟且封闭的环境中,互不干扰。然而,这就够了吗?想象下面一种场景:你的新项目在Python 3.3下面开发,而你维护的旧项目,却工作在Python 2.7之上,为了完成工作,你不得不安装两个Python解释器,并为每个解释器配置virtualenv,在你调试执行的时候,不得不适用冗长的全路径调用解释器,或者不断地修改你的环境变量。天哪,你再次陷入与你的工作无关的,烦人的事情中。pyenv的出现,就是来拯救你的。pyenv是一个Python多版本管理工具,他设计精巧,通过巧妙的方法,可以使多版本的Python共存在一个操作系统能,简单地实现切换从而使用不同版本的Python。pyenv支持插件,通过插件,可以和virtualenv完美结合,实现多版本,多环境的控制,使得你的每个项目,仿佛运行在一个完全隔离的环境中一样。

安装pyenv

使用pyenv-installer安装pyenv很简单,只需要在终端执行:

curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash

打开~/.bashrc,输入一下语句添加环境变量配置

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

使配置生效

source ~/.bashrc
exec $SHELL -l

查看pyenv安装的python版本

pyenv versions

安装相关依赖包

yum install readline readline-devel readline-static -y
yum install openssl openssl-devel openssl-static -y
yum install sqlite-devel -y
yum install bzip2-devel bzip2-libs -y

安装多版本python

以安装python3.4.5为例

pyenv install 3.4.5

系统会从python官网下载安装对应的python版本

但是因为众所周知的原因,直接从python官网下载源会比较慢,这里有两种解决方法:

1、从官网下载对应的版本压缩包到,以FTP方式上传到~/.pyenv/cache/目录,没有cache目录就自行创建。以安装python3.4.5为例,从官网下载Python-3.4.5.tgz文件后使用FileZilla客户端上传后,修改文件名称为Python-3.4.5.tar.gz。注意,这一步非常重要。然后按上步骤安装。

mv Python-3.4.5.tgz Python-3.4.5.tar.gz
pyenv install 3.4.5 -v

2、使用国内镜像的pyenv源安装,比如github上有老司机在七牛上搭建的:http://pyenv.qiniudn.com/pythons/,执行以下命令:

export PYTHON_BUILD_MIRROR_URL="http://yoursite.example.com/pythons"
pyenv install 3.4.5

pyenv与virtualenv

pyenv通过插件,可以很好的和virtualenv一起工作,通过整合virtualenv,pyenv实现了真正意义上的环境隔离,每个项目都相当于使用一个单独的解释器。通过pyenv-installer安装的pyenv,已经安装好virtualenv插件了。相关命令如下:

pyenv virtualenv [-f|--force] [-u|--upgrade] [VIRTUALENV_OPTIONS] <version> <virtualenv-name>

选项-f表示强制的,也就是如果已经存在这个虚拟环境,那么将会覆盖这个虚拟环境 选项-u表示upgrade,用于修改已经存在的虚拟环境的Python版本 VIRTUALENV_OPTIONS 是传递给virtualenv的选项,可以通过virtualenv的帮助获取选项的含义 version 表示Python版本 virtualenv-name 是我们给虚拟环境指定的名字 例如:

pyenv virtualenv 3.4.5 my_project  #创建一个Python版本为3.4.5的环境,环境叫做my_project

pyenv activate my_project  #激活my_project这个环境,此时Python版本自动变为3.4.5,且是独立环境

pyenv deactivate  #离开已经激活的环境