python 版本管理工具 pyenv

个人博客:   https://www.wzstyle.cn/678.html    去个人博客访问体验更好嗷  =。=

 

什么是pyenv:

pyenv是一个forked自ruby社区的简单、低调、遵循UNIX哲学的Python环境管理工具, 它可以轻松切换全局解释器版本, 同时结合vitualenv插件可以方便的管理对应的包源。

 

为什么使用pyenv:

为了在同一系统环境中使用不同版本的python,在项目开发中保证不同的包环境互不干扰。

 

安装Pyenv:

1、安装git

yum -y install git

2、安装Python编译依赖

yum -y install gcc make patch gdbm-devel openssl-devel sqlite-devel readline-devel zlib-devel bzip2-devel

 

3、创建用户python

useradd python ; echo 123 |passwd python --stdin 

并且su到python用户下

 

4、使用python用户登录后安装Pyenv

Pyenv官网 https://github.com/pyenv/pyenv

Pyenv-installer插件 https://github.com/pyenv/pyenv-installer

下载的 pyenv-installer 是一个shell脚本,直接执行以下这条命令:

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

 

上面这条命令可能无法访问,可以这样解决:

用浏览器打开https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer,将看到的网页内容复制到服务器的脚本当中,然后本地执行: bash pyenv-installer

注意:

  1. 在 https://github.com/pyenv/pyenv-installer 有安装文档
  2. 如果curl出现 curl: (35) SSL connect error ,是nss版本低的问题,更新它。当前nss版本只有3.15。

可能需要配置一个有较新包的yum源:

[updates]

name=CentOS-Updates

baseurl=https://mirrors.aliyun.com/centos/6/os/x86_64/

gpgcheck=0

然后在更新nss : yum update nss ;也可以直接去阿里镜像下载repo文件后,更新。

 

5、安装会提示在python用户的~/.bash_profile中追加:

# Load pyenv automatically by adding

# the following to ~/.bashrc:

export PATH="/home/python/.pyenv/bin:$PATH"

eval "$(pyenv init -)"

eval "$(pyenv virtualenv-init -)"

将上面3行内容写入当前用户的~/.bashrc或~/.bash_profile,我这里放到~/.bash_profile中,然后source,或者退出再重连一下都行。pyenv就可以使用了。

这样当python用户启动的时候,会执行用户的.bash_profile中的脚本,就会启动pyenv。

安装好的pyenv就在 ~/.pyenv 目录中。如果以后需要更新pyenv,可以使用 pyenv update 命令。

 

Pyenv的使用:

python -V | --version  #查看当前系统的python版本

echo $PATH             #查看当前系统的python路径

pyenv命令:

  • pyenv

pyenv 1.2.20

Usage: pyenv []

Some useful pyenv commands are:

   activate    Activate virtual environment

   commands    List all available pyenv commands

   ……

 

  • install

pyenv help install

pyenv install --list | less  #查看pyenv各版本

pyenv install 3.6.9          #安置pyenv指定版本

pyenv versions               #查看所有python版本

使用上面的方式是连接官网下载指定版本,这样安装可能较慢,原因在于需要从外部下载指定版本文件到本地编译,为了加速,可是选用cache方法,使用缓存方式安装:

首先你可以在windows上下载需要待安装版本的软件包,然后mkdir -p /home/python/.pyenv/cache

https://www.python.org/ftp/python/3.6.9/Python-3.6.9.tar.xz

https://www.python.org/ftp/python/3.7.7/Python-3.7.7.tar.xz

在新建的cache目录中放入下载好的软件包后再执行安装命令,会使用缓存安装,而不是连接官网。

pyenv install 3.6.9 -vvv

pyenv install 3.7.7 -vvv

 

pyenv version    #当前python版本,system表示当前操作系统使用的版本

system (set by /home/python/.pyenv/version)

pyenv versions   #查看所有已经安装的版本,*星号表示当前版本

* system (set by /home/python/.pyenv/version)

  3.6.9

  3.7.7

 

 

pyenv的python版本控制:

global全局设置

#pyenv global xxx

python -V

Python 2.7.5

pyenv global 3.6.9       #执行之前python版本显示2.7.5,执行后重新加载显示变成了3.6.9

python -V

Python 3.6.9

pyenv global system      #记得改回来

可以看到所有受pyenv控制的窗口中都是3.6.9的python版本了。

这里用global是作用于非root用户python用户上,如果是root用户安装,请不要使用global,否则影响

更大。比如,这里使用的CentOS6.5就是Python2.6,CentOS7使用了2.7,使用了global就成了3.x,会

带来很不好的影响。建议不用。

 

shell 会话设置

影响只作用于当前shell会话

#pyenv shell xxx 。也不推荐。

python -V   ---> Python 2.7.5

pyenv versions

* system (set by /home/python/.pyenv/version)

  3.6.9

  3.7.7

pyenv shell 3.6.9

python -V   ---> Python 3.7.7

pyenv  versions

  system

  3.6.9

* 3.7.7 (set by PYENV_VERSION environment variable)

 

local 本地设置

使用pyenv local设置从当前工作目录开始向下递归都继承这个版本设置。推荐!

#pyenv local 3.6.9

#pyenv local --unset   #取消local设置

cd /home/python/projects/pro

pyenv local 3.7.7

python -V   --->  Python 3.7.7   #pyenv local 设置之后,pytho的版本也变成了3.7.7

cd  ; python -V    ---> Python 2.7.5     

cd /home/python/projects/pro ; python -V   --->  Python 3.7.7  

##可以看到pyenv local设置仅仅只对设置当时所在目录有效,在其他目录环境下无效。

 

mkdir /home/python/projects/web ; cd /home/python/projects/web ; pyenv local 3.6.9

python -V   ----> Python 3.6.9

cd ; python -V    ----> Python 2.7.5

cd /home/python/projects/pro/ ; python -V  ----> Python 3.7.7

##看到没,这个就可以很好的做到各个目录python环境的隔离,以期在不同环境下开发部署不同项目。

 

 

 

Virtualenv 虚拟环境设置

为什么要使用虚拟环境?

因为刚才使用的Python环境都是一个公共的空间,如果多个项目使用不同Python版本开发,或者使用不同的Python版本部署运行,或者使用相同版本开发的不同项目使用了不同版本的库,等等这些问题都会带来冲突。最好的解决办法就是每一个项目独立运行自己的“独立小环境”中。

可使用插件,在plugins/pyenv-virtualenv中。命令格式:pyenv  virtualenv  版本号 虚拟空间名称

 

[python@k8s-node1 pro]$ pyenv virtualenv 3.6.9 w369

[python@k8s-node1 projects]$ pyenv virtualenv 3.7.7 wzstyle377

[python@k8s-node1 ~]$ pyenv virtualenv 3.6.9 style3-6-9

[python@k8s-node1 ~]$ pyenv versions

* system (set by /home/python/.pyenv/version)

  3.6.9

  3.6.9/envs/style3-6-9

  3.6.9/envs/w369

  3.7.7

  3.7.7/envs/wzstyle377

  style3-6-9

  w369

  wzstyle377

#这个时候看到已经多出了好几个虚拟版本,我们可以在不同目录下指定pyenv local版本,以解决一些冲突问题。

例如:

[python@k8s-node1 pro]$ pwd

/home/python/projects/pro

[python@k8s-node1 pro]$ pyenv versions

* 3.7.7 (set by /home/python/projects/pro/.python-version)

[python@k8s-node1 pro]$ python -V

Python 3.7.7

[python@k8s-node1 pro]$ pyenv local style3-6-9

(style3-6-9) [python@k8s-node1 pro]$ python -V

Python 3.6.9

(style3-6-9) [python@k8s-node1 pro]$ pyenv versions

* style3-6-9 (set by /home/python/projects/pro/.python-version)

[python@k8s-node1 ~]$ cd ; python -V ; pyenv versions

Python 2.7.5

* system (set by /home/python/.pyenv/version)

#可看到,使用了pyenv local 仍然只对pro目录有效。设置local之后,在对应目录下会产生一个version文件:

cat /home/python/projects/pro/.python-version   --->  style3-6-9  #这个文件里记录了使用的版本

 

#我们可以基于安装的3.6.9或者3.7.7使用virtualenv虚拟出多个不同的独立的空间,进行不同项目的操作,避免冲突和干扰。虚拟出来的独立空间和虚拟时指定的版本号是同一版本。

 

#虚拟出来的空间的目录在~/.pyenv/versions/下,以后只要使用一个虚拟版本,包就会安装到这些对应的目录下去,而不是使用3.6.9或3.7.7。

ls /home/python/.pyenv/versions    --->   3.6.9  3.7.7  style3-6-9  w369  wzstyle377

 

 

 

pip 通用配置

pip 是Python的包管理工具,3.x的版本直接带了,可直接使用。pip连接python官网使用速度较慢,为了使用国内镜像,可以做以下操作:

mkdir ~/.pip

cat > ~/.pip/pip.conf <

[global]

index-url = https://mirrors.aliyun.com/pypi/simple/

[install]

trusted-host=mirrors.aliyun.com

EOF

配置完成之后,就可以使用阿里云下载了:

cd /home/python/projects/pro ;  pip install jupyter

python 版本管理工具 pyenv_第1张图片

可根据提示升级pip: pip install --upgrade pip

pip -V  #查看pip版本

#并且,我们是用local指定了/home/python/projects/pro目录环情况下安装的jupyter,可和他们目录做对比:

(style3-6-9) [python@k8s-node1 pro]$ l. | cat .python-version      ----->     style3-6-9

(style3-6-9) [python@k8s-node1 pro]$ pip list     #会打印出jupyter各种包

(w369) [python@k8s-node1 web]$ cd /home/python/projects/web | pip -V ; pip list ; l. |cat .python-version

在w369这个虚拟环境下看到pip版本是18.1,没有关于jupyter的包,看到version文件里版本是w369;这就可以验证,即使是通过3.6.9这个相同版本虚拟出来的不同的环境空间,是各自独立,互不影响冲突的。

 

使用jupyter,在/home/python/projects/pro执行:jupyter notebook --ip=0.0.0.0(允许所有地址访问),程序启动后会监听8888端口,复制程序输出的token在浏览器进行访问:(jupyter只在这个pro这个目录中运行)

http://172.20.10.6:8888/?token=bebf93d571fff95a68e7dd1ec5a1ed8fc44c5bb71c51c4e7  #注意ip地址要改

 

 

导出包

虚拟环境的好处就在于和其他项目运行环境隔离。每一个独立的环境都可以使用pip命令导出已经安装的包,在另一个环境中安装这些包。

建议一般开发用什么版本,部署的时候用同样的版本。

例如是在pycharm开发的项目,其版本环境可以在pycharm的Terminal中通过pip freeze来查看已经安装的包,通过pip freeze  > requirements 导出名为requirements的文件,这个文件会自动出现在pycharm左边Project中,我们可以查看到它的在windows电脑中的路径,并将其传输到需要的linux运行环境中,为了让linux运行环境和开发环境相同,执行 pip install -r requirements  会将requirements文件中的包全部下载到当前linux运行环境,到达开发和运行部署环境一致的目的。

 

个人博客:   https://www.wzstyle.cn/

 

 

你可能感兴趣的:(python 版本管理工具 pyenv)