在 Python 开发中,有些情况下,我们可能面临在一台机器上同时安装多版本Python的需求。比如:

有多个Python项目,每个项目依赖不同的Python版本。

有一个Python项目,它需要同时支持多个Python版本。

那么,如何高效地在单台机器上实现多个版本Python(具体来说,这里Python指的是Python解释器)的安装和维护呢?

除此之外,我们还可能面临在一台机器上安装多个版本的某个Python第三方库的需求。比如:有多个Python项目,每个项目依赖于不同版本的Python第三方库requests

。这时候,如何在单台机器上实现多版本Pythonrequests

库的安装和维护呢?

本文介绍一款神器。它提供了最简洁的方法,让上述两种需求同时得到满足。

多版本Python管理

实现多版本Python管理的 工具 叫做pyenv

。它的安装命令为:

curl https://pyenv.run | bash

复制代码

安装完成后,需要进行简单配置。将下面几行配置信息添加到文件~/.bashrc

中,然后执行命令exec "$SHELL"

,让配置生效。

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

eval "$(pyenv init -)"

eval "$(pyenv virtualenv-init -)"

复制代码

接着,可以通过查看pyenv

版本来检查安装和配置是否成功:

root@hzettv53:~# pyenv -v

pyenv 1.2.12

复制代码

由于pyenv

是基于源代码进行Python的编译和安装的。因此,我们需要先安装编译相关的一些依赖包。由于这些依赖是操作系统相关的。因此,不同的操作系统,安装命令不同。

以常见的Ubuntu/Debian系统为例,安装命令为:

sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python-openssl

复制代码

现在就可以使用pyenv

安装Python了。安装新版本之前,我们先查看系统当前安装的Python版本:

root@hzettv53:~# pyenv versions

* system (set by /root/.pyenv/version)

root@hzettv53:~# python -V

Python 2.7.12

复制代码

可见,当前使用的是操作系统自带的Python,其版本为2.7.12。这时,如果我们需要安装一个新的版本,例如Python 3.7.2, 只需执行命令:

pyenv install -v 3.7.2

复制代码

注意,由于pyenv

是基于Python源代码进行编译安装,因此这一步骤会有点慢,需要耐心等待。安装完成后,查看系统中的Python版本:

root@hzettv53:~# pyenv versions

* system (set by /root/.pyenv/version)

3.7.2

root@hzettv53:~# python -V

Python 2.7.12

复制代码

可以看到,系统中已经有两个版本的Python了。但是当前使用的仍然是系统版本。如果想要使用新安装的版本,只需:

root@hzettv53:~# pyenv global 3.7.2

root@hzettv53:~# pyenv versions

system

* 3.7.2 (set by /root/.pyenv/version)

root@hzettv53:~# python -V

Python 3.7.2

复制代码

这里命令pyenv global 3.7.2

改变了全局的Python版本。如果只想在当前文件夹中使用Python 3.7.2,那么可以执行:pyenv local 3.7.2

;如果只想在当前Shell环境中使用Python 3.7.2,那么可以执行:pyenv shell 3.7.2

如果同时设置了global, local和shell三种Python版本,那么哪一种会真正生效呢?这里有一个优先级排序,即shell > local > global。举例来说,如果先后执行了pyenv local 3.7.2

和pyenv global 3.7.3

,那么由于local的优先级高于global,所以当前生效的Python版本是3.7.2。

这样,我们便很方便地实现了单一机器上安装多个版本的Python,并且可以根据实际需要,灵活地切换Python版本。

多虚拟环境管理

不同项目之间,不仅依赖的Python版本可能不同,而且依赖的Python第三方库的版本也可能不同。我们将项目所依赖的Python及其第三方库统一称为虚拟环境。如果同时存在多个Python项目,各自依赖不同的虚拟环境,如何有效管理呢?

这时,我们仍然可以使用pyenv

来达成我们的目标。使用下述命令可以创建一个指定Python版本的虚拟环境。

pyenv virtualenv

复制代码

虚拟环境的名称建议体现Python项目名称。例如,我们有一个叫做myproject

的项目,并且基于Python 3.7.2

进行开发,那么可以执行命令:

pyenv virtualenv 3.7.2 myprojectenv

复制代码

这样,我们便创建了一个名为myprojectenv

的虚拟环境。那么如何使用它呢?我们在需要使用这个虚拟环境的地方(例如,cd到项目myproject

的文件夹路径),执行以下命令即可:

pyenv local myprojectenv

复制代码

这时,我们可以看到,当前使用的Python和pip都指向的是虚拟环境myprojectenv

root@hzettv53:~/workspace/test# pyenv which python

/root/.pyenv/versions/myprojectenv/bin/python

root@hzettv53:~/workspace/test# pyenv which pip

/root/.pyenv/versions/myprojectenv/bin/pip

复制代码

这意味着,我们此时用pip命令安装的所有Python第三方包,都是安装到了虚拟环境myprojectenv

的路径下,而不是系统路径。这样,我们便实现了Python项目和其所依赖的Python开发环境(即虚拟环境)的绑定。不同的Python项目,完全可以各自使用不同的Python虚拟环境,互不影响。

那么,如果一个Python项目需要使用两种Python虚拟环境呢?我们只需要创建两个虚拟环境(例如myprojectenv

和myprojectenv2

),并且在使用时进行切换即可:

root@hzettv53:~/workspace/myproject# pyenv local myprojectenv

root@hzettv53:~/workspace/myproject:~# python -V

Python 3.7.2

root@hzettv53:~/workspace/myproject# pyenv local myprojectenv2

root@hzettv53:~/workspace/myproject:~# python -V

Python 2.7.12

复制代码

总结

开发环境的高效管理是软件工程中的一个难题,尤其是需要同时维护多个环境的时候。pyenv

提供了在单台机器上实现多版本Python和多类型Python虚拟环境的有效管理。pyenv

的使用十分简单,易于上手。想要更多地了解pyenv

,可以阅读:

python开发环境推荐_推荐一款Python开发环境管理神器相关推荐

  1. python开发环境配置_百度资讯搜索_python开发环境配置

    金生水起程序猿 2020年11月14日 11:20下载完成后就可以安装Python了,在安装过程中会弹出内容选择对话框,选中复选框Add Python 3.x to PATH,可以将Python的安装 ...

  2. python可视化案例书籍推荐_这5款Python可视化神器,总有一款适合你!

    我们都知道视觉是人们很重要的一种感官,而Python中可视化,在数据相关的研发中也起到"一木支危楼"的作用.如果从直接查看离线存储在各类数据库中杂乱无章的数据,会让人瞬间感到崩溃且 ...

  3. python 生信分析_安利一款生信分析神器:Biopython之分析环境搭建

    当然作为入门,python语言基础还是要会一点点的,不过不需要很深.工具嘛,我们只用关心怎么用得溜,平时也没人追究勺子咋造的只管拿来用,是吧~Biopython是一个包含大量实用功能模块的集合,它支持 ...

  4. ecology9 后端开发环境搭建_利用Vagrant快速搭建开发环境

    Docker大家应该都了解吧,一个非常方便的技术,可以让我们随时随地部署应用.但是部署应用虽然方便了,开发环境的搭建还是那样的,要自己安装一大堆软件.那么有没有类似的工具可以方便我们呢?这就是本文要的 ...

  5. python可视化开源工具_这5款Python可视化神器,总有一款适合你!

    我们都知道视觉是人们很重要的一种感官,而Python中可视化,在数据相关的研发中也起到"一木支危楼 "的作用.如果从直接查看离线存储在各类数据库中杂乱无章的数据,会让人瞬间感到崩溃 ...

  6. eclipse android开发环境搭建_聊聊Spring boot2.X开发环境搭建和基本开发

    对Spring Boot的开发环境进行搭建,并对它的特点做进一步的了解,才能更好地对Spring Boot有更深入的介绍.但是无论如何都需要先来搭建Spring Boot的工程. 搭建Spring B ...

  7. python自动化测试环境搭建_(一)Python+Appium自动化测试环境搭建

    (一)安装Node.js 1.1 下载Node.js 下载地址:https://nodejs.org/en/download/,根据操作系统下载对应的安装包,这里选择Windows 64位的: 1.2 ...

  8. python 安卓app开发环境搭建_基于react-native的APP开发环境配置

    1. 首先要有jdk 版本1.8   环境变量必须要有    %JAVA_HOME%;%JAVA_HOME%\bin 2.python   版本2     必须是python2(官方文档这么写的,具体 ...

  9. vim java开发环境配置_搭建vim作为java开发环境(-)

    说明:本文的内容作为自己搭建环境的记录,内容基本是从网上查找来的,所以原作者看了不要太介意.另外本人是Mac电脑,请参照者注意了. javacomplete:是在vim开发中提供提示效果的插件. 1. ...

  10. mac php开发套件_mac php集成开发环境搭建软件推荐(附教程)

    用惯了在Windows上配置php开发环境,要在MAC上捣腾一个PHP开发环境还不大习惯,那mac上php开发环境怎么搭建配置呢?有哪些集成软件呢? 本文为你推荐几款常用的mac php环境软件,并介 ...

最新文章

  1. 互联网协议 — 动态路由协议类型
  2. android8 Notification
  3. PID入门的十五个基本概念
  4. 2.6.2.MySQL主从复制的原理
  5. 优化混合云性能:数据管理技巧大公开
  6. 线程中这么调用类_这些线程知识总结是真的到位!java开发两年的我看的目瞪口呆
  7. 130242014022 蓝宏铮 第2次实验
  8. Android LBS系列05 位置策略(一)
  9. jwt, json web token
  10. 278.第一个错误版本(力扣leetcode) 博主可答疑该问题
  11. 【深度学习框架】-Caffe(入门级学习一:简单介绍)
  12. Android 宽高比控件
  13. Swift里的CAP理论和NWR策略应用
  14. 已经搭载华为鸿蒙,华为鸿蒙设备将搭载在什么设备上
  15. corodva中使用高德地图web js api
  16. 论文阅读:日志聚合 - 关联分析
  17. 企业信息化、数字化和智能化的区别
  18. nginx部署前端项目的详细步骤
  19. 树莓派六足仿生蜘蛛机器人Hexapod二次开发源代码
  20. 接口自动化测试框架搭建总结

热门文章

  1. AtCoder Regular Contest 080
  2. Java之收集很好的Java学习资料地址+博客
  3. 总结:常用的通用数据处理指令
  4. 查询mysql 中的空文本_MySQL查询以显示空列的自定义文本
  5. 网页php自描述,一段代码让wordpress博客自动添加关键词(keywords)及网页描述(description)...
  6. Python机器学习:线型回归法05衡量线性回归法的指标MES,RMS,MAE
  7. 计算机二级考试网易教程,学姐分享 | 计算机二级来袭,你准备好了吗?
  8. 幼师学计算机心得体会怎么写,幼儿教师学习心得
  9. android+usb摄像头预览分辨率,UVCCamera(usb camera)适配Android9
  10. ubuntu安装arm-linux-gcc