首页 > 代码库 > 【Python进阶】03、python多版本管理工具pyenv
【Python进阶】03、python多版本管理工具pyenv
一、pyenv介绍
CentOS6系统会自带一个较低版本的python,一般不使用系统自带的python版本,因为系统很多组件依赖于python比如yum,如果我们随意升级或者安装了些有冲突包可能会影响系统环境;我们需要再安装较高版本的python,而且在开发多个项目时,可能需要多个版本的Python,此时在进行Python版本切换时会比较麻烦,pyenv就提供了一种简单的方式。
pyenv是一个能简易地在多个Python版本中进行切换的工具,它简单而优雅。
项目地址:https://github.com/yyuu/pyenv
pyenv的功能:
安装python解释器
进行全局的Python版本切换
为单个项目提供对应的Python版本
使用环境变量能让你重写Python版本
能在同一时间在不同版本间进行命令搜索
拥有以下特点:
只依赖python本身
将目录添加进$PATH即可使用
能够进行virtualenv管理(通过插件)
二、安装pyenv
1、pyenv通过bash编写,不依赖任何程序;安装程序只依赖git
[root@Node3 ~]# yum install git
2、安装pyenv
[root@Node3 ~]# curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0 0 0 0 0 0 0 0 --:--:-- 0:00:02 --:--:-- 98 2099 98 1969 0 0 767 0 0:00:02 0:00:02 --:--:-- 13104 2099 104 2099 0 0 818 0 0:00:02 0:00:02 --:--:-- 1425 Initialized empty Git repository in /root/.pyenv/.git/ remote: Counting objects: 4060, done. remote: Compressing objects: 100% (1658/1658), done. WARNING: seems you still have not added ‘pyenv‘ to the load path. # Load pyenv automatically by adding # the following to ~/.bash_profile: export PATH="/root/.pyenv/bin:$PATH" eval "$(pyenv init -)"
pyenv的安装路径是由$PYENV_ROOT这个环境变量设定的(默认没设定),如果没设定默认安装路径为~/.pyenv
[root@Node3 ~]# ls -a . .bash_history .bashrc install.log.syslog .tcshrc .. .bash_logout .cshrc .pki .viminfo anaconda-ks.cfg .bash_profile install.log .pyenv .Xauthority [root@Node3 ~]# ls .pyenv/ #卸载pyenv只需要删掉这个目录就可以 bin completions LICENSE pyenv.d src CHANGELOG.md CONDUCT.md Makefile README.md test COMMANDS.md libexec plugins shims versions
3、配置环境变量
[root@Node3 ~]# vi /etc/profile.d/pyenv.sh [root@Node3 ~]# cat /etc/profile.d/pyenv.sh export PATH="~/.pyenv/bin:$PATH" eval "$(pyenv init -)" eval "$(pyenv virtualenv-init -)" [root@Node3 ~]# . /etc/profile.d/pyenv.sh [root@Node3 ~]# pyenv #pyenv就可以使用了 pyenv 1.0.3 Usage: pyenv <command> [<args>] Some useful pyenv commands are: commands List all available pyenv commands local Set or show the local application-specific Python version global Set or show the global Python version shell Set or show the shell-specific Python version install Install a Python version using python-build uninstall Uninstall a specific Python version rehash Rehash pyenv shims (run this after installing executables) version Show the current Python version and its origin versions List all Python versions available to pyenv which Display the full path to an executable whence List all Python versions that contain the given executable See `pyenv help <command>‘ for information on a specific command. For full documentation, see: https://github.com/yyuu/pyenv#readme
三、安装python
使用pyenv安装python,pyenv会下载安装python最新稳定版,在安装Python之前我们还需要安装编译工具和python的依赖包
1、安装编译工具
[root@Node3 ~]# yum install gcc make patch
2、安装python依赖包
[root@Node3 ~]# yum install gdbm-devel openssl-devel sqlite-devel readline-devel zlib-devel bzip2-devel
3、安装python
[root@Node3 .pyenv]# pyenv install --list #列出所有可以安装的python解释器 Available versions: 2.1.3 3.5.1 3.5.2 #没带字母的是python原生自带的解释器,我们使用这个最新稳定版的 3.6.0b3 3.6-dev 3.7-dev anaconda-1.4.0 anaconda-1.5.0 anaconda-1.5.1 anaconda3-4.1.1 ironpython-dev ironpython-2.7.6.3 jython-dev jython-2.5.0 jython-2.7.1b3 miniconda-latest miniconda-2.2.2 miniconda3-4.0.5 miniconda3-4.1.11 pypy-c-jit-latest pypy-c-nojit-latest pypy-dev pypy-stm-2.3 pypy-portable-2.3.1 pypy-portable-5.4 pypy-portable-5.4.1 pypy-1.5-src pypy-1.5 pypy-1.6 pypy2-5.4.1-src pypy2-5.4.1 pypy3-dev pypy3-portable-2.3.1 pypy3.3-5.5-alpha-src pypy3.3-5.5-alpha pyston-0.5.1 stackless-dev stackless-3.4.2 [root@Node3 ~]# pyenv install 3.5.2 #安装python对应的版本 Downloading Python-3.5.2.tar.xz... -> https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tar.xz #因为要从外国网站上下载所有会很慢,我们也可以在~/.pyenv目录下新建一个cache目录,自己下载好Python的安装包,放在chache目录下,pyenv就不会再去网站上下载了 Installing Python-3.5.2... patching file Lib/venv/scripts/posix/activate.fish Installed Python-3.5.2 to /root/.pyenv/versions/3.5.2 #python被安装在这个目录下 [root@Node3 ~]# pyenv versions #列出所有可用python版本 * system (set by /root/.pyenv/version) 3.5.2
四、pyenv的使用
[root@Node3 ~]# pyenv --help Usage: pyenv <command> [<args>] Some useful pyenv commands are: commands List all available pyenv commands local Set or show the local application-specific Python version #在当前路径创建一个.python-version,以后进入这个目录自动切换为该版本 global Set or show the global Python version #设置全局默认的python版本 shell Set or show the shell-specific Python version #在当前shell的session中启用某个Python版本,优先级高于global,local install Install a Python version using python-build uninstall Uninstall a specific Python version #卸载一个指定的版本 rehash Rehash pyenv shims (run this after installing executables) version Show the current Python version and its origin #显示当前正在使用Python版本 versions List all Python versions available to pyenv #显示所有可用的Python版本 which Display the full path to an executable #显示可执行文件的绝对路径 whence List all Python versions that contain the given executable See `pyenv help <command>‘ for information on a specific command. For full documentation, see: https://github.com/yyuu/pyenv#readme
pyenv local 版本号:
在当前路径下创建一个.python-version的文件,以后进入这个目录或子目录会自动把python切换的为该版本;可以通过删除 `.python-version`恢复默认Python版本
[root@Node3 ~]# cd /tmp [root@Node3 tmp]# python --version Python 2.6.6 [root@Node3 tmp]# pyenv local 3.5.2 #切换为3.5.2的版本 [root@Node3 tmp]# python --version #成功 Python 3.5.2 [root@Node3 tmp]# pyenv version 3.5.2 (set by /tmp/.python-version) [root@Node3 tmp]# cat .python-version 3.5.2 [root@Node3 tmp]# cd .. [root@Node3 /]# pyenv version #在别的目录python的版本还是系统自带的 system (set by /root/.pyenv/version) [root@Node3 /]# cd /tmp [root@Node3 tmp]# mkdir test [root@Node3 tmp]# cd test [root@Node3 test]# pyenv version #Pyenv local对子目录也有效 3.5.2 (set by /tmp/.python-version) [root@Node3 test]# python -V Python 3.5.2 [root@Node3 tmp]# pyenv local system #切换回系统自带的版本 [root@Node3 tmp]# python --version Python 2.6.6
pyenv global 版本号:设置全局默认的python版本,注意永远不要使用这个命令
pyenv virtualenv 版本号 项目名称或虚拟环境名|:为此项目设置一个虚拟环境
[root@Node3 ~]# pyenv virtualenv 3.5.2 magedu Ignoring indexes: https://pypi.python.org/simple Requirement already satisfied (use --upgrade to upgrade): setuptools in /root/.pyenv/versions/3.5.2/envs/magedu/lib/python3.5/site-packages Requirement already satisfied (use --upgrade to upgrade): pip in /root/.pyenv/versions/3.5.2/envs/magedu/lib/python3.5/site-packages [root@Node3 ~]# pyenv versions * system (set by /root/.pyenv/version) 3.5.2 3.5.2/envs/magedu # magedu #为了兼容旧版本的pyenv
pyenv uninstall 版本号或虚拟环境名或项目名称:卸载某个版本, 包括虚拟环境
用来创建隔离的python环境,处理python环境的多版本和模块依赖。
root@Node3 ~]# pyenv uninstall magedu pyenv-virtualenv: remove /root/.pyenv/versions/3.5.2/envs/magedu? y [root@Node3 ~]# pyenv versions system * 3.5.2 (set by /root/.python-version)
我们需要搞清楚pyenv 和virtualenv分别是干什么的。
pyenv可以帮助你在一台开发机上建立多个版本的python环境, 并提供方便的切换方法。
virtualenv则提供了一种功能, 就是将一个目录建立为一个虚拟的python环境, 这样的话, 用户可以建立多个虚拟环境, 每个环境里面的python版本可以是不同的, 也可以是相同的, 而且环境之间相互独立。
如果解释得还不是很清楚的话,我们举例说明。
首先我们可以用pyenv 安装多个python 版本, 比如安装了2.5, 2.6, 3.3 三个版本。 用户可以随意切换当前默认的python版本。 但这时候, 每个版本的环境仍是唯一的, 如果我们想在环境中安装一些库的话, 还是会导致这个版本的环境被修改。 这个时候, 如果我们用virtual env去建立虚拟环境, 就可以完全保证系统路径的干净。无论你在虚拟环境中安装了什么程序, 都不会影响已安装版本的系统环境
【Python进阶】03、python多版本管理工具pyenv