不灭的焱

革命尚未成功,同志仍须努力

作者:php-note.com  发布于:2021-10-09 12:06  分类:Linux软件安装/优化  编辑

一、pyenv介绍

项目地址:https://github.com/pyenv/pyenv

关于pyenv的介绍:

一般在操作系统中我们会安装多个Python版本,在*nix系统中一般默认就自带了Python2与Python3两个版本,所以在进行Python版本切换时会比较麻烦,pyenv就提供了一种简单的方式。

pyenv是一个能简易地在多个Python版本中进行切换的工具,它简单而优雅。

pyenv有以下功能:

进行全局的Python版本切换

为单个项目提供对应的Python版本

使用环境变量能让你重写Python版本

能在同一时间在不同版本间进行命令搜索

拥有以下特点:

只依赖Python本身

将目录添加进$PATH即可使用

能够进行virtualenv管理

二、CentOS7上安装配置pyenv

2.1 为安装pyenv做准备工作(否则到后期使用pyenv的时候会有各种各样的问题)

[root@CentOS7-1 ~]# yum -y groupinstall "Development tools"
[root@CentOS7-1 ~]# yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel

2.2 安装Git

[root@CentOS7-1 ~]# yum -y install git

附:CentOS7升级Git至最新的v2.x版本

2.3 安装pyenv

# 安装 pyenv到root目录下的 .pyenv目录中

[root@CentOS7-1 ~]# git clone git://github.com/pyenv/pyenv.git .pyenv

2.4 设置环境变量

# 执行以下Shell脚本

[root@CentOS7-1 ~]# sed -Ei -e '/^([^#]|$)/ {a \
export PYENV_ROOT="$HOME/.pyenv"
a \
export PATH="$PYENV_ROOT/bin:$PATH"
a \
' -e ':a' -e '$!{n;ba};}' ~/.bash_profile
echo 'eval "$(pyenv init --path)"' >> ~/.bash_profile

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.profile
echo 'eval "$(pyenv init --path)"' >> ~/.profile

echo 'eval "$(pyenv init -)"' >> ~/.bashrc

(1)修改后的 ~/.bash_profile 文件内容为:

[root@CentOS7-1 ~]# vim ~/.bash_profile
# .bash_profile

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH
eval "$(pyenv init --path)"

(2)修改后的 ~/.profile 文件内容为:

[root@CentOS7-1 ~]# vim ~/.profile
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"

(3)修改后的 ~/.bashrc 文件内容为:

[root@CentOS7-1 ~]# vim ~/.bashrc
# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi
eval "$(pyenv init -)"

# 然后 source 一下环境

[root@CentOS7-1 ~]# source  ~/.bash_profile
[root@CentOS7-1 ~]# source  ~/.profile
[root@CentOS7-1 ~]# source  ~/.bashrc

附:新安装的CentOS7环境变量备份:~/.bash_profile,~/.profile,~/.bashrc

2.5 安装好了,看看pyenv有哪些内置的命令

[root@CentOS7-1 ~]# pyenv -h
Usage: pyenv <command> [<args>]

Some useful pyenv commands are:
   commands    List all available pyenv commands
   exec        Run an executable with the selected Python version
   global      Set or show the global Python version(s)
   help        Display help for a command
   hooks       List hook scripts for a given pyenv command
   init        Configure the shell environment for pyenv
   install     Install a Python version using python-build
   local       Set or show the local application-specific Python version(s)
   prefix      Display prefix for a Python version
   rehash      Rehash pyenv shims (run this after installing executables)
   root        Display the root directory where versions and shims are kept
   shell       Set or show the shell-specific Python version
   shims       List existing pyenv shims
   uninstall   Uninstall a specific Python version
   version     Show the current Python version(s) and its origin
   --version   Display the version of pyenv
   version-file   Detect the file that sets the current pyenv version
   version-name   Show the current Python version
   version-origin   Explain how the current Python version is set
   versions    List all Python versions available to pyenv
   whence      List all Python versions that contain the given executable
   which       Display the full path to an executable

See `pyenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/pyenv/pyenv#readme

# 查看一下 pyenv 能安装哪些Python版本

[root@CentOS7-1 ~]# pyenv install --list
Available versions:
  2.1.3
  2.2.3
  2.3.7
  2.4.0
  2.4.1
  2.4.2
  2.4.3
  2.4.4
  2.4.5
  2.4.6
  2.5.0
  2.5.1
  2.5.2
  2.5.3
  2.5.4
  2.5.5
  2.5.6
  ...

三、使用pyenv安装Python

我们安装2个版本,一个 2.7.18,一个 3.8.12

3.1 安装 2.7.18

# 现有安装的版本

[root@CentOS7-1 ~]# pyenv versions
* system (set by /root/.pyenv/version)

# 当前的Python版本

[root@CentOS7-1 ~]# python -V 
Python 2.7.5

# 安装 Python 2.7.18

[root@CentOS7-1 ~]# pyenv install 2.7.18
Downloading Python-2.7.18.tar.xz...
-> https://www.python.org/ftp/python/2.7.18/Python-2.7.18.tar.xz
Installing Python-2.7.18...
patching file configure
patching file configure.ac
patching file setup.py
patching file Mac/Tools/pythonw.c
patching file setup.py
patching file Doc/library/ctypes.rst
patching file Lib/test/test_str.py
patching file Lib/test/test_unicode.py
patching file Modules/_ctypes/_ctypes.c
patching file Modules/_ctypes/callproc.c
patching file Modules/_ctypes/ctypes.h
patching file Modules/_ctypes/callproc.c
patching file setup.py
patching file Mac/Modules/qt/setup.py
patching file setup.py
Installed Python-2.7.18 to /root/.pyenv/versions/2.7.18

# 安装 Python 3.8.12

[root@CentOS7-1 ~]# pyenv install 3.8.12
Downloading Python-3.8.12.tar.xz...
-> https://www.python.org/ftp/python/3.8.12/Python-3.8.12.tar.xz
Installing Python-3.8.12...
Installed Python-3.8.12 to /root/.pyenv/versions/3.8.12

注意:安装慢的解决办法

mkdir -p ~/.pyenv/cache

上传安装包(Python-3.8.12.tar.xz)到此目录,再执行:pyenv install 3.8.12

# 查看一下已安装的版本

[root@CentOS7-1 ~]# pyenv versions
* system (set by /root/.pyenv/version)
  2.7.18
  3.8.12

四、pyenv的基本应用

4.1 输入pyenv -h可以查看pyenv的命令,我们常用的几个命令:

  • pyenv version                         #显示当前使用的Python
  • pyenv which python                 #显示当前Python的安裝路径
  • pyenv global <version>             #设置默认的Python版本
  • pyenv local <version>             #在当前路径创建一个.python-version,以后进入这个目录自动切换为该版本
  • pyenv shell <version>             #在当前shell的session中启用某个Python版本,优先级高于global,local

4.2  查看当前系统上所安装的Python版本

[root@CentOS7-1 ~]# pyenv versions      
* system (set by /root/.pyenv/version)
  2.7.18
  3.8.12

4.3 切换Python版本

pyenv 可以从三个维度来管理 Python 环境,简称为:(1)当前系统、(2)当前目录、(3)当前shell 。这三个维度的优先级从左到右依次升高,即 当前系统 的优先级最低,当前shell 的优先级最高。

global

如果想修改系统全局的Python环境,可以采用 pyenv global PYTHON_VERSION 命令。该命令执行后会在 $(pyenv root) 目录(默认为 ~/.pyenv )中创建一个名为 version 的文件(如果该文件已存在,则修改该文件的内容),里面记录着系统全局的Python版本号。

local

通常情况下,对于特定的项目,我们可能需要切换不同的Python环境,这个时候就可以通过 pyenv local PYTHON_VERSION 命令来修改 当前目录 的Python环境。命令执行后,会在当前目录中生成一个 .python-version 文件(如果该文件已存在,则修改该文件的内容),里面记录着当前目录使用的Python版本号。

shell

通过执行 pyenv shell PYTHON_VERSION 命令,可以修改 当前shell 的Python环境。执行该命令后,会在当前 shell session (Terminal窗口)中创建一个名为 PYENV_VERSION 的环境变量,然后在 当前shell 的任意目录中都会采用该环境变量设定的Python版本。此时, global 和 local中设定的Python版本均会被忽略。

(1) 切换默认为 2.7.18

[root@CentOS7-1 ~]# pyenv global 2.7.18 
[root@CentOS7-1 ~]# pyenv versions 
  system
* 2.7.18 (set by /root/.pyenv/version)
  3.8.12
[root@CentOS7-1 ~]# python -V
Python 2.7.18

# 注意:pip的安装包的路径,也跟着python版本变了
[root@CentOS7-1 ~]# pip -V
pip 19.2.3 from /root/.pyenv/versions/2.7.18/lib/python2.7/site-packages/pip (python 2.7)

(2) 切换默认为 系统原始的

[root@CentOS7-1 ~]# pyenv global system
[root@CentOS7-1 ~]# pyenv versions
* system (set by /root/.pyenv/version)
  2.7.18
  3.8.12
[root@CentOS7-1 ~]# python -V
Python 2.7.5

# 注意:pip的安装包的路径,也跟着python版本变了,此时是没有安装pip了
[root@CentOS7-1 ~]# pip -V 
pyenv: pip: command not found

The `pip' command exists in these Python versions:
  2.7.18
  3.8.12

Note: See 'pyenv help global' for tips on allowing both
      python2 and python3 to be found.

(3) 当前目录切换为 3.8.12

[root@CentOS7-1 ~]# pyenv local 3.8.12
[root@CentOS7-1 ~]# pyenv versions    
  system
  2.7.18
* 3.8.12 (set by /root/.python-version)
[root@CentOS7-1 ~]# python -V
Python 3.8.12

# 注意:pip的安装包的路径,也跟着python版本变了
[root@CentOS7-1 ~]# pip -V
pip 21.1.1 from /root/.pyenv/versions/3.8.12/lib/python3.8/site-packages/pip (python 3.8)
[root@CentOS7-1 ~]# pip3 -V
pip 21.1.1 from /root/.pyenv/versions/3.8.12/lib/python3.8/site-packages/pip (python 3.8)

(4) 切换Python会话为 3.8.12

[root@CentOS7-1 ~]# pyenv shell 3.8.12
[root@CentOS7-1 ~]# pyenv version 
3.8.12 (set by PYENV_VERSION environment variable)
[root@CentOS7-1 ~]# python -V
Python 3.8.12

# 注意:pip的安装包的路径,也跟着python版本变了
[root@CentOS7-1 ~]# pip3 -V           
pip 21.1.1 from /root/.pyenv/versions/3.8.12/lib/python3.8/site-packages/pip (python 3.8)

五、设置pip包的镜像站

设置 pip 包下载地址为清华大学开源软件镜像站,提高包的下载速度。

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

 

 

参考:

Python多版本管理软件pyenv的安装应用及pip的使用讲解

Centos 7.4 安装pyenv及使用说明