Python多版本开发环境管理工具介绍

前言

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

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

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

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

除此之外,我们还可能面临在一台机器上安装多个版本的某个Python第三方库的需求。比如:有多个Python项目,每个项目依赖于不同版本的Python第三方库requests。这时候,如何在单台机器上实现多版本Python requests库的安装和维护呢?

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

多版本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_version> <environment_name>

虚拟环境的名称建议体现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的使用十分简单,易于上手。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 5款Python程序员高频使用开发工具推荐

    很多Python学习者想必都会有如下感悟:最开始学习Python的时候,因为没有去探索好用的工具,吃了很多苦头.后来工作中深刻体会到,合理使用开发的工具的便利和高效.今天,我就把Python程序员使用频率比较高的5款开发工具推荐给大家,希望对大家的工作和学习有帮助. 一.最强终端:Upterm 本来想推荐 fish 或者 zsh,但其实这两个我也主要是贪图自动补全这个特性.最近在用的这个 Upterm 其实很简单好用,它是一个全平台的终端,可以说是终端里的 IDE,有着强大的自动补全功能.之前的

  • Python程序打包工具py2exe和PyInstaller详解

    前言 通常执行 python 程序要有相应的 Python 环境,但某些特定场景下,我们可能并不愿意这么麻烦的去配置这些环境(比如将写好的脚本发给客户进行操作),如果可以提前将程序打包成 Windows平台的 .exe 文件或者是Linux下的 .sh 脚本,那么使用起来就会方便很多,py2exe 和 PyInstaller 这两款工具都是干这么个事的,下面以 hello.py 脚本(代码内容如下)为例进行介绍. age = input("How old are you?\n") pr

  • 2018年Python值得关注的开源库、工具和开发者(总结篇)

    1.开源库 Web 领域:Sanic https://github.com/channelcat/sanic 这个库的名字和之前一个很火的梗有关,有人在 youtube 上画 Sonic 那个蓝色小人,结果一本正经的画出了下面这货,给它起名叫 Sanic,还配了一句话是 Gotta go faster. 这个库和 Flask 类似,但是比它快很多,速度能在测试中达到每秒 36000 次请求.在2017年的 Star 增长数几乎是翻了一倍.Gotta go faster! 环境与包管理:Pipen

  • Python实用工具FuckIt.py介绍

    说起 Python 强大的地方,你可能想到是它的优雅.简洁.开发速度快,社区活跃度高.但真正使得这门语言经久不衰的一个重要原因是它的无所不能,因为社区有各种各样的第三库,使得我们用Python实现一个东西实在是太简单了,你经常会看到几行代码实现爬虫,10行代码实现人脸识别,虽然有些夸张,但确实就是有这样的库帮你把所有的繁文缛节全部封装了,最后给你开放一个优雅的 API. 今天给你推荐的这个库叫 "FuckIt.py",名字一看就是很黄很暴力的那种,作者是这样介绍它的: FuckIt.p

  • Python开发的单词频率统计工具wordsworth使用方法

    使用方法: python wordsworth --filename textfile.txt python wordsworth -f textfile.txt 分析结果: 附上github项目地址:https://github.com/autonomoid/wordsworth

  • python的几种开发工具介绍

    1 IDLE1.1 IDLE是python创初人Guido van Rossum使用python and Tkinter来创建的一个集成开发环境.要使用IDLE必须安装python and Tkinter.1.2 特性:自动缩进,彩色编码,命令历史(Alt+p,Alt+n)和单词自动(Alt+/)完成.1.3 用IDLE执行Tkinter程序,不要在程序中包括mainloop.IDLE本身就是Tkinter应用程序,它会自动调用mainloop.再调用一次mainloop会与IDLE的事件循环冲

  • Python多版本开发环境管理工具介绍

    前言 在Python开发中,有些情况下,我们可能面临在一台机器上同时安装多版本Python的需求.比如: 有多个Python项目,每个项目依赖不同的Python版本. 有一个Python项目,它需要同时支持多个Python版本. 那么,如何高效地在单台机器上实现多个版本Python(具体来说,这里Python指的是Python解释器)的安装和维护呢? 除此之外,我们还可能面临在一台机器上安装多个版本的某个Python第三方库的需求.比如:有多个Python项目,每个项目依赖于不同版本的Pytho

  • Macbook安装Python最新版本、GUI开发环境、图像处理、视频处理环境详解

    1.安装 有两种安装方法: 方法一:从Mac自带的python安装,命令如下: $brewinstall python 如果出错的话前面加上sudo 方法一安装的是python2.7 方法二:从官网下载安装最新版本(本次安装的内容) 官网地址:https://www.python.org/download,下载安装最新版的python ,安装简单,一路点击OK:不便之处是后续卸载维护需要手动进行. 可以用这个命令查看python3安装的位置: $which python3 安装完成后在终端中键入

  • Python 使用 PyQt5 开发的关机小工具分享

    前两天简单认识了一下PyQt5,通过练习开发了一款在Window下自定义关机的小工具, 代码如下: import os,sys,time from PyQt5 import QtCore,QtWidgets,QtGui class guanji(object): def pageShow(self,page): #设置窗口的位置和大小 page.setGeometry(400,400,400,200) #设置窗口的标题 page.setWindowTitle('Window shutdown')

  • 详解python中GPU版本的opencv常用方法介绍

    引言 本篇是以python的视角介绍相关的函数还有自我使用中的一些问题,本想在这篇之前总结一下opencv编译的全过程,但遇到了太多坑,暂时不太想回看做过的笔记,所以这里主要总结python下GPU版本的opencv. 主要函数说明 threshold():二值化,但要指定设定阈值 blendLinear():两幅图片的线形混合 calcHist() createBoxFilter ():创建一个规范化的2D框过滤器 canny边缘检测 createGaussianFilter():创建一个Ga

  • 微信小程序开发工具介绍

    目录 官方文档 一.微信开发工具深入介绍 下载开发工具 1.1 大体介绍开发工具主要分四大块 1.2 工具栏 1.3编辑器 1.4调试器 编辑器总结 官方文档 https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html 一.微信开发工具深入介绍 在讲编辑器之前,我要强调一下,这个一点都不难,自己点一点就知道每个按钮代表什么意思.我把介绍我们开发中经常用的点,就可以了 下载开发工具 工具介绍微信官方链接 1.1 大

  • Android项目开发常用工具类LightTaskUtils源码介绍

    目录 LightTaskUtils概述 LightTaskUtils截图 LightTaskUtils源码 版权声明 本文原创作者:谷哥的小弟 作者博客地址:http://blog.csdn.net/lfdfhl LightTaskUtils概述 LightTaskUtils是一个轻量级的线程管理工具. LightTaskUtils截图 LightTaskUtils截图如下: LightTaskUtils源码 LightTaskUtils源码如下: import android.os.Handl

  • Go日常开发常用第三方库和工具介绍

    这里我主要将这些库分为两类: 业务开发 基础工具开发 业务开发 首先是业务开发,主要包含了 web.数据库.Redis 等. Gin ️️️️️ 首先是 Gin,一款 HTTP 框架,使用简单.性能优秀.资料众多:你还在犹豫选择哪款框架时,那就选择它吧,基本没错. 当然和它配套的 github.com/swaggo/gin-… swagger 工具也是刚需:利用它可以生成 swagger 文档. GORM ️️️️️ GORM 也没啥好说的,如果你喜欢 orm 的方式操作数据库,那就选它吧:同样

  • Java数据开发辅助工具Docker与普通程序使用方法

    目录 介绍 需求背景: 程序的使用方法 Docker 方式: 普通方式 配置文件说明 最后的话 介绍 需求背景: 有很多业务系统,他们的数据库是相互独立的,俗称数据孤岛,为了做数据统计分析,就需要把这些数据归集在一个数据库中,比如数据仓库,然后多表关联查询,方便开发数据应用.希望能有这样的工具,指定两个数据库和表名,就可以将表从源数据库拷贝到目标数据库中.具体需求如下: 能自动同步表结构,如:源表加字段,目标表自动加字段. 支持增量或全量复制数据,比如按日期进行复制数据. 支持指定字段同步,只同

  • python+django+mysql开发实战(附demo)

    开发工具:pycharm 环境:python3.7.4(例子中用的3.6)下载安装pycharm:http://www.jetbrains.com/pycharm/download/#section=windows分为社区版和专业版,一个免费一个收费Pycharm2021破解版下载: https://www.jb51.net/softs/598504.html下载安装python:https://www.python.org/downloads/windows/安装好开发工具和python环境后

随机推荐