一 环境背景

由于Python的版本过多,且不同版本之间差异性较大。同时又因系统底层需要调用当前版本Python,所以不能随意变更当前系统Python版本。因此,在多版本共存的情况下,Python多环境管理工具非常重要,常见Python多环境管理工具有Pyenv和Virtualenv。

Pyenv对Python的版本进行管理,实现不通版本间的切换和使用;

Virtualenv通过创建虚拟环境,实现与系统环境以及其他Python环境的隔离。

二 pyenv部署与使用

2.1 pyenv简介

pyenv是一个Python版本管理工具,可方便地切换全局Python版本,安装多个不通的Python版本,设置独立的某个文件夹或工程目录特意的Python版本,同时创建Python虚拟环境。

注意:该工具不支持Windows。

2.2 pyenv工作原理

  1. pyenv安装后会在系统PATH中插入shims路径,每次执行Python相关的可执行文件时,会优先在shims里查找Python路径~/.pyenv/shims:/usr/local/bin:/usr/bin:/bin;
  2. 系统选择Python版本,依如下顺序选择Python版本:
    1. Shell变量设置(执行pyenv shell查看)
    2. 当前可执行文件目录下的.python_version文件里的版本号(执行pyenv shell查看)
    3. 上层目录查询找到的第一次.pyenv-version文件
    4. 全局的版本号在~/.pyenv/version文件内(执行pyenv shell查看)
  1. 确定版本文件的位置和Python版本后,pyenv会根据版本号在~/.pyenv/versions/文件夹中查找对应的Python版本。

提示:执行命令pyenv versions可查看系统当前安装的Python版本。

python优先级:shell > local > global

pyenv 会从当前目录开始向上逐级查找.python-version文件,直到根目录为止。若找不到,就用global版本。

2.3 pyenv安装部署-手动安装

  1. [root@localhost ~]# yum -y install git #安装git工具
  2. [root@localhost ~]# yum -y install gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel xz xz-devel #安装相关环境基础包
  3. [root@localhost ~]# git clone https://github.com/pyenv/pyenv.git ~/.pyenv
  4. #clone pyenv至家目录
  5. [root@localhost ~]# echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
  6. [root@localhost ~]# echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
  7. [root@localhost ~]# echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bash_profile
  8. #修改环境变量
  9. [root@localhost ~]# source ~/.bash_profile #重启当前Shell
  10. [root@localhost ~]# pyenv versions #查看版本

2.4 pyenv安装部署-自动安装

  1. [root@localhost ~]# yum -y install git #安装git工具
  2. [root@localhost ~]# yum -y install zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel xz xz-devel #安装相关环境基础包
  3. [root@localhost ~]# curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
  4. [root@localhost ~]# pyenv versions #查看版本

提示:手动安装和自动挡安装任选其一即可。

自动安装可能出现环境变量未添加的情况,可参考手动安装进行添加。

2.4 pyenv使用实例

  1. [root@localhost ~]# pyenv update #pyenv升级
  2.  
  3. [root@localhost ~]# rm -rf $(pyenv root) #卸载
  4. [root@localhost ~]# vi ~/.bash_profile #删除以下条目
  5. export PATH="~/.pyenv/bin:$PATH" #删除
  6. eval "$(pyenv init -)" #删除
  7. eval "$(pyenv virtualenv-init -)" #删除
  8.  
  9. [root@localhost ~]# pyenv install -list #查看可安装的版本列表
  10. [root@localhost ~]# pyenv install 3.6.5 #安装指定版本的Python
  11. [root@localhost tmp]# pyenv local 2.7.15

#切换当前目录的Python版本,通过将版本号写入当前目录下的.python-version文件的方式。通过这种方式设置的 Python版本优先级较global高。

  1. [root@localhost tmp]# pyenv global 3.6.5

#设置全局的Python版本,通过将版本号写入~/.pyenv/version文件的方式。

2.5 pyenv常见参数

常用命令
命令
说明
pyenv version
显示当前Python的版本和来源。
pyenv versions
列出当前环境的所有可用Python版本。
pyenv install -l
列出所有可以安装的Python版本。
pyenv install -v
安装Python,-v 显示编译过程。
pyenv shell
查看或列出、设置Shell环境下的的Python版本,
设置当前shell session的Python版本,它的优先级高于global和local。
pyenv shell –unset
取消shell版本设置。
pyenv global
查看或列出、设置全局环境下的的Python版本,
设置全局Python版本替换系统自带版本,可能会引起某些配置失效
(如yum命令),不建议使用!!!设置后恢复系统版本:pyenv global system。
pyenv local
查看或列出、设置当前环境下的的Python版本,
设置当前用户的可用的本地Python版本,它的优先级高于全局Python版本。
pyenv local –unset
取消本地版本设置。
pyenv uninstall
卸载特定Python版本。
pyenv which
列出command的全路径。
pyenv whence
列出包含command的所有Python版本。
pyenv commands
列出所有pyenv可用命令行。
pyenv rehash
重新加载pyenv的shims路径,即刷新数据库,
安装完Python版本后下需要执行该命令。

参考链接:https://github.com/pyenv/pyenv#installation

三 Virtualenv部署与使用

3.1 Virtualenv简介

Virtualenv试试一个用来为一个应用创建一套“隔离”的Python运行环境,使得每个应用拥有一套“独立”的Python运行环境。Virtualenv通过创建一个虚拟化的python运行环境,将我们所需的依赖安装进去的,不同项目之间相互不干扰。特点:

  • 在没有权限的情况下安装新套件
  • 不同应用可以使用不同的套件版本
  • 套件升级不影响其他应用

3.2 Virtualenv安装部署

  1. [root@localhost ~]# pip install virtualenv

提示:pip的安装参考《001.Pip简介及使用》,也可使用以下方式安装:

  1. [root@localhost ~]# yum -y install python-virtualenv

3.3 Virtualenv的使用

  1. [root@localhost ~]# mkdir /study #创建工作目录
  2. [root@localhost ~]# cd /study/ #进入工作目录
  3. [root@localhost study]# virtualenv venv #为此工程创建一个虚拟环境,venv为虚拟环境目录名,目录名自定义

提示:

virtualenv venv将会在当前的目录中创建一个文件夹,包含了Python可执行文件,以及pip库的一份拷贝,这样就能安装其他包了。虚拟环境的名字(此例中是 venv )可以是任意的,若省略名字将会把文件均放在当前目录。

在任何你运行命令的目录中,这会创建Python的拷贝,并将之放在叫做 venv 的文件中。

  1. [root@localhost study]# virtualenv -p /usr/bin/python2.7 study01 #-p参数指定Python解释器程序路径
  2. [root@localhost study]# source study01/bin/activate #激活虚拟环境
  3. (study01)[root@localhost study]# deactivate #退出当前系统环境

3.3 virtualenv常见参数

  1. # virtualenv [OPTIONS] DEST_DIR
  2. 选项:
  3. --version #显示当前版本号。
  4. -h, help #显示帮助信息。
  5. -v, verbose #显示详细信息。
  6. -q, quiet #不显示详细信息。
  7. -p PYTHON_EXE, python=PYTHON_EXE
  8. #指定所用的python解析器的版本,比如–python=python2.5就使用2.5版本的解析器创建新的隔离环境。
  9. #默认使用的是当前系统安装(/usr/bin/python)的python解析器
  10. --clear #清空非root用户的安装,并重头开始创建隔离环境。
  11. --no-site-packages #令隔离环境不能访问系统全局的site-packages目录。
  12. --system-site-packages #令隔离环境可以访问系统全局的site-packages目录。
  13. --unzip-setuptools #安装时解压Setuptools或Distribute
  14. --relocatable
  15. #重定位某个已存在的隔离环境。使用该选项将修正脚本并令所有.pth文件使用相当路径。
  16. --distribute
  17. #使用Distribute代替Setuptools,也可设置环境变量VIRTUALENV_DISTRIBUTE达到同样效要。
  18. --extra-search-dir=SEARCH_DIRS
  19. #用于查找setuptools/distribute/pip发布包的目录。可以添加任意数量的–extra-search-dir路径。
  20. --never-download
  21. #禁止从网上下载任何数据。此时,如果在本地搜索发布包失败,virtualenv就会报错。
  22. --prompt==PROMPT #定义隔离环境的命令行前缀。

四 update-alternatives部署与使用

4.1 update-alternatives简介

update-alternatives是用来维护系统命令的符号链接,以决定系统默认使用什么命令,可以设置系统默认加载的首选程序。即用于处理linux系统中软件版本的切换。

4.2 update-alternatives安装部署

各个linux发行版中均提供了该命令,可免安装直接使用,命令参数略有差异,本实验以CentOS7.8为基础。

4.3 update-alternatives的使用

  1. [root@localhost ~]# update-alternatives --help
  2. Commands:
  3. --install <link> <name> <path> <priority>
  4. [--slave <link> <name> <path>] ... #在系统中加入一组候选项
  5. --remove <name> <path> #从 <name> 替换组中去除 <path> 项
  6. --remove-all <name> #从替换系统中删除整个 <name> 替换组
  7. --auto <name> #将 <name> 的主链接切换到自动模式
  8. --display <name> #显示关于 <name> 替换组的信息
  9. --query <name> #机器可读版的 --display <name>
  10. --list <name> #列出 <name> 替换组中所有的可用候选项项
  11. --get-selections #列出主要候选项名称以及它们的状态
  12. --set-selections #从标准输入中读入候选项的状态
  13. --config <name> #列出 <name> 替换组中的可选项,并就使用其中哪一个,征询用户的意见
  14. --set <name> <path> #将 <path> 设置为 <name> 的候选项
  15. --all #对所有可选项一一调用 --config 命令
  16.  
  17. <link>:是指向 /etc/alternatives/<name> 的符号链接>,如/usr/bin/python
  18. <name>:是该链接替换组的主控名,如python
  19. <path>:是替换项目标文件的真实位置/usr/local/python3/bin/python3.9
  20. <priority>:是一个整数,在自动模式下,这个数字越高的选项,其优先级也就越高。
  21. Options:
  22. --altdir <directory> #指定不同的可选项目录
  23. --admindir <directory> #指定不同的管理目录
  24. --log <file> #设置log文件
  25. --force #就算没有通过自检,也强制执行操作
  26. --skip-auto #在自动模式中跳过设置正确候选项的提示,只与--config 有关
  27. --verbose #详尽的操作进行信息,更多的输出
  28. --quiet #安静模式,输出尽可能少的信息
  29. --help #显示本帮助信息
  30. --version #显示版本信息.

注意:alternatives是update-alternatives的软链接,后续直接使用alternatives。

display:display选项用来显示一个命令链接的所有可选命令,即查看一个命令链接组的所有信息,包括链接的模式(自动还是手动)、链接priority值、所有可 用的链接命令等等。

install:install选项的功能就是增加一组新的系统命令链接符。

使用语法为:update-alternatives --install <link> <name> <path> <priority> [--slave link name path]。其中link为系统中功能相同软件的公共链接目录,比如/usr/bin/java(需绝对目录); name为命令链接符名称,如java;path为你所要使用新命令、新软件的所在目录;priority为优先级,当命令链接已存在时,需高于当前值,因为当alternative为自动模式时,系统默认启用priority高的链接;–slave为从alternative。

config:config选项用来显示和修改实际指向的候选命令,为在现有的命令链接选择一个作为系统默认。

remove:remove选项的功能是删除一个命令的link值,其附带的slave也将一起删除。

使用语法为:update-alternatives --remove name path。其中name与path与install中的一致,如果所删除的链接组中还有其他链接的话,系统将会自动从其他中选择一个priority高的链接作为默认为链接。

比如:update-alternatives –remove java /usr/lib/jvm/jre1.6.0_20/bin/java

4.4 alternatives添加版本

  1. [root@localhost ~]# alternatives --install /usr/bin/python python \
  2. /usr/local/python3/bin/python3.9 50
  3. [root@localhost ~]# alternatives --install /usr/bin/python python \
  4. /usr/bin/python2.7 30
  5. [root@localhost ~]# alternatives --display python #查看Python版本
  6. python - status is auto. #自动模式,选择权限较高的
  7. link currently points to /usr/local/python3/bin/python3.9
  8. /usr/local/python3/bin/python3.9 - priority 50
  9. /usr/bin/python2.7 - priority 30
  10. Current `best' version is /usr/local/python3/bin/python3.9.
  11. [root@localhost ~]# ll /usr/bin/python
  12. lrwxrwxrwx 1 root root 24 Nov 5 16:03 /usr/bin/python -> /etc/alternatives/python
  13. [root@localhost ~]# ll /etc/alternatives/python
  14. lrwxrwxrwx 1 root root 32 Nov 5 16:03 /etc/alternatives/python -> /usr/local/python3/bin/python3.9

4.5 alternatives切换版本

  1. [root@localhost ~]# alternatives --config python #配置版本
  2.  
  3. There are 2 programs which provide 'python'.
  4.  
  5. Selection Command
  6. -----------------------------------------------
  7. *+ 1 /usr/local/python3/bin/python3.9
  8. 2 /usr/bin/python2.7
  9.  
  10. Enter to keep the current selection[+], or type selection number: 2 #选择版本
  11. [root@localhost ~]# alternatives --display python #查看当前版本
  12. python - status is manual.
  13. link currently points to /usr/bin/python2.7
  14. /usr/local/python3/bin/python3.9 - priority 50
  15. /usr/bin/python2.7 - priority 30
  16. Current `best' version is /usr/local/python3/bin/python3.9.
  17. [root@localhost ~]# ll /usr/bin/python
  18. lrwxrwxrwx 1 root root 24 Nov 5 16:11 /usr/bin/python -> /etc/alternatives/python
  19. [root@localhost ~]# ll /etc/alternatives/python
  20. lrwxrwxrwx 1 root root 18 Nov 5 16:11 /etc/alternatives/python -> /usr/bin/python2.7
  21. [root@localhost ~]# alternatives --auto python #自动选择权限最高的版本

附001.Python多版本环境管理的更多相关文章

  1. Python包管理工具和多版本环境管理

    1. Python包管理工具 在安装Python包的过程中,经常涉及到distutils.setuptools.distribute.setup.py.easy_install.easy_instal ...

  2. 切换Ubuntu系统python默认版本的方法

    另附切换系统python默认版本的方法: 先使用命令: update-alternatives --list python 查看python命令的各种可能结果, 例如我的结果: /usr/bin/py ...

  3. [python学习手册-笔记]001.python前言

    001.python前言 ❝ 本系列文章是我个人学习<python学习手册(第五版)>的学习笔记,其中大部分内容为该书的总结和个人理解,小部分内容为相关知识点的扩展. 非商业用途转载请注明 ...

  4. python多版本与虚拟环境

    这篇纯python技术文章,我自己平时也会用到,在此记录一下. 为什么会用到多个Python版本? 用macOS和Ubutntu的同学都知道系统默认安装的Python2.7.x,然后,我们平时pyth ...

  5. python多版本切换

    环境:Macbook MacOS自带的python2.7,在命令行中输入python后会显示2.7版本 如何切换成新版本? 一.修改用户配置环境变量~/.bash_profile 确定新版本的安装位置 ...

  6. Python默认版本修改

    Python默认版本修改 当电脑安装了多个版本的Python,而Shell中默认的Python不是你想要的,这个时候就需要对Python的默认版本进行修改. 在Windows中,可以通过修改环境变量的 ...

  7. Window 中安装python多版本环境

    由于python 3 已是目前稳定,且是将来版本版本.新学者可以直接从python3入手学习.但是目前还有很多企业级应用使用的是python 2,可能还得要维护.所以,我们在本地windows中可以安 ...

  8. Python多版本共存之pyenv

    经常遇到这样的情况: 系统自带的Python是2.6,自己需要Python 2.7中的某些特性: 系统自带的Python是2.x,自己需要Python 3.x: 此时需要在系统中安装多个Python, ...

  9. python多版本的pip共存问题解决办法

    python pip 多版本 问题情景 最开始学python的时候用的是py2,且一直用pip来安装库函数.后来py3出来了,所以就装上了,但是一装上出问题了,主要有两个主要的问题.下面将详细说明. ...

随机推荐

  1. 在vue中创建多个ueditor实例

    简介 在vue中创建多个ueditor实例,我使用neditor,其实就是把ueditor样式美化了下,其他和ueditor几乎一样 截图 源码地址 https://github.com/oblivi ...

  2. leetcode 1962. 移除石子使总数最小

    题目描述: 给你一个整数数组 piles ,数组 下标从 0 开始 ,其中 piles[i] 表示第 i 堆石子中的石子数量.另给你一个整数 k ,请你执行下述操作 恰好 k 次: 选出任一石子堆 p ...

  3. 【Android开发】用WebView访问证书有问题的SSL网页

    Android系统的碎片化很严重,并且手机日期不正确.手机根证书异常.com.google.android.webview BUG等各种原因,都会导致WebViewClient无法访问HTTPS站点. ...

  4. java中请给一个Abstract类实现接口的实例!

    2.Abstract类实现接口 马克-to-win:如果实现某接口的类是abstract类,则它可以不实现该接口所有的方法.但其非abstract的子类中必须拥有所有抽象方法的实在的方法体:(当然它a ...

  5. java中Array(数组)的用法

    8.Array(数组)    数组是作为对象来实现的.(really occupy the memopry,真实的占用内存 ) An array is a data structure that st ...

  6. 静态变量和成员变量的区别、final修饰特点、创建对象的内存图、静态内存图

    静态变量和成员变量的区别* 静态变量也叫类变量  成员变量也叫对象变量* A:所属不同 * 静态变量属于类,所以也称为为类变量 * 成员变量属于对象,所以也称为实例变量(对象变量)* B:内存中位置不 ...

  7. 安卓记账本开发学习day6之进度

    完成了基本的收入与支出添加,支持输入备注 以及备注的输入和金额的遮挡显示切换

  8. Java第十五周作业

    Cola公司的雇员分为以下若干类:(知识点:多态) [必做题]• 4.1 ColaEmployee :这是所有员工总的父类,属性:员工的姓名,员工的生日月份.方法:getSalary(int mont ...

  9. 基于Vue的v-charts导出图片并下载

    依赖 npm install file-saver 页面 <ve-chart ref="chart"></ve-chart> <el-button t ...

  10. Python技能树及CSDN MarkDown编辑器测评

    测评目录 python技能树测评 python技能树是什么 python技能树长什么样 如何学习python技能树 python技能树可能需要的改进 对python技能树的总结 CSDN MarkDo ...