pyenv 介绍及部署记录

一. pyenv简单介绍

在日常运维中, 经常遇到这样的情况: 系统自带的Python是2.x,而业务部署需要Python 3.x 环境, 此时需要在系统中安装多个Python版本,但又不能影响系统自带的Python 版本,即需要实现Python的多版本环境共存, pyenv就是这样一个Python版本管理器, 可以同时管理多个python版本共存! 简单的说,pyenv 可以根据需求使用户在系统里安装和管理多个Python 版本:
- 配置当前用户的python的版本;
- 配置当前shell的python版本;
- 配置某个项目(目录及子目录)的python版本;
- 配置多个虚拟环境.

由于python的各种优点,当前学习及使用python的人越来越多, 学习python有一个不容忽视的问题就是python的版本问题! 到现在为止,python的版本有很多,但是问题在于python2与python3的区别。python3的对一些模块进行了改变,导致了python2写的代码有的不被python3兼容,从而导致程序运行报错。因此,在学习和工作中使用python的时候,最好是安装一个pyenv管理器, 多安装几个python版本进行管理, 然后再针对不同项目安装各自项目的python虚拟环境, 相互隔离, 这样便于使用和管理。

二. pyenv工作原理

pyenv是利用系统环境变量PATH的优先级,劫持python的命令到pyenv上,根据用户所在的环境或目录,使用不同版本的python。

how it works:
At a high level, pyenv intercepts Python commands using shim executables injected into your PATH, determines which Python version
has been specified by your application, and passes your commands along to the correct Python installation.
 
它是如何工作的:
在较高级别上,pyenv使用注入到PATH中的shim可执行文件拦截Python命令,确定应用程序指定了哪个Python版本,并将命令传递到正确的Python安装。

对于系统环境变量 PATH ,里面包含了一串由冒号分隔的路径,例如 /usr/local/bin:/usr/bin:/bin。每当在系统中执行一个命令时,例如 python 或 pip,操作系统就会在 PATH 的所有路径中从左至右依次寻找对应的命令。因为是依次寻找,因此排在左边的路径具有更高的优先级。在PATH 最前面插入一个 $(pyenv root)/shims 目录,$(pyenv root)/shims目录里包含名称为python以及pip等可执行脚本文件;当用户执行python或pip命令时,根据查找优先级,系统会优先执行shims目录中的同名脚本。pyenv 正是通过这些脚本,来灵活地切换至我们所需的Python版本。

三. pyenv安装和使用说明

1) pyenv安装

[root@localhost ~]# cat /etc/RedHat-release
CentOS release 6.9 (Final)
 
系统默认是Python 2.6 版本
[root@localhost ~]# python -V           
Python 2.6.6
 
1) 安装依赖环境
[root@localhost ~]# yum -y install gcc zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel git
 
2) 安装pyenv包
pyenv可以通过多种方式安装,可以参考项目在github上的Installtion, 地址为: https://github.com/pyenv/pyenv-installer
 
推荐采用The automatic installer的方式安装,可以一键安装pyenv的所有插件。
[root@localhost ~]# curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
 
pyenv套件下插件:
- pyenv-doctor
- pyenv-installer
- pyenv-update
- pyenv-virtualenv
- pyenv-which-ext
 
==================================================================================
温馨提示:
以上https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer的访问内容, 可以将内容粘出来放在服务器的一个shell脚本文件中, 然后执行该脚本用以安装pyenv

该脚本下载地址: 

可以到Linux公社资源站下载:

------------------------------------------分割线------------------------------------------

免费下载地址在

用户名与密码都是

具体下载目录在 /2019年资料/1月/2日/Python多版本管理器-pyenv 介绍及部署记录/

下载方法见

------------------------------------------分割线------------------------------------------
     
执行脚本进行安装(执行前授予755权限)
# chmod 755 pyenv-installer
# /bin/bash pyenv-installer
=================================================================================
 
分析一下上面的pyenv-installer脚本,可以发现在centos上,其实它做了以下事情:
git clone --depth 1"git://github.com/pyenv/pyenv.git"            "${HOME}/.pyenv"
git clone --depth 1"git://github.com/pyenv/pyenv-doctor.git"    "${HOME}/.pyenv/plugins/pyenv-doctor"
git clone --depth 1"git://github.com/pyenv/pyenv-installer.git"  "${HOME}/.pyenv/plugins/pyenv-installer"
git clone --depth 1"git://github.com/pyenv/pyenv-update.git"    "${HOME}/.pyenv/plugins/pyenv-update"
git clone --depth 1"git://github.com/pyenv/pyenv-virtualenv.git""${HOME}/.pyenv/plugins/pyenv-virtualenv"
git clone --depth 1"git://github.com/pyenv/pyenv-which-ext.git"  "${HOME}/.pyenv/plugins/pyenv-which-ext"
 
上面安装完成后,还需要执行下面的命令,将pyenv安装到系统环境变量中。
[root@localhost ~]# ll -d /root/.pyenv
drwxr-xr-x 11 root root 4096 Dec 17 10:48 /root/.pyenv
 
在~/.bash_profile文件底部添加下面三行内容, 让系统可以找到 pyenv 安装的 Python
[root@localhost ~]# vim ~/.bash_profile     
export PATH="/root/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
 
使上面配置生效
[root@localhost ~]# source ~/.bash_profile
 
查看pyenv安装情况
[root@localhost ~]# pyenv --version            //或者"pyenv -v"
pyenv 1.2.8
 
更新pyenv
[root@localhost ~]# pyenv update
 
3) 卸载pyenv
先删除pyenv的安装目录,  这里即是/root/.pyenv
[root@localhost ~]# rm -fr /root/.pyenv
 
接着删除~/.bash_profile里面配置的系统环境变量
[root@localhost ~]# vim ~/.bash_profile     //删除下面三行
export PATH="/root/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
 
[root@localhost ~]# source ~/.bash_profile
 
这样pyenv就被卸载了, 卸载pyenv后, 当前终端shell里会出现"-bash: pyenv: command not found"
的提示信息, 不过不影响使用. 再打开其他的终端窗口, 就不会出现该提示信息.

2) pyenv使用

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/12279.html