当前位置:首页 > 技术分析 > 正文内容

pyenv 管理多个 Python 版本(1)(安装多个python怎么切换)

ruisui883个月前 (02-03)技术分析15

引言

你是否曾希望参与一个支持多个 Python 版本的项目,但又不知道如何轻松地测试所有这些版本?你是否对 Python 的最新版本感到好奇?或许你想尝试这些新功能,但又不想冒险破坏你的开发环境。幸运的是,如果你使用 pyenv,管理多个 Python 版本并不复杂。

本文[1]将向你展示如何高效地在项目上工作,同时减少因尝试使用正确版本的 Python 而产生的困扰。

通过本文,你将学会:

  • 安装多个 Python 版本
  • 安装 Python 的最新开发版
  • 在已安装的版本间切换
  • 与 pyenv 一起使用虚拟环境
  • 自动激活不同的 Python 版本和虚拟环境

为什么要选择 pyenv?

pyenv 是一个管理多个 Python 版本的强大工具。即使你的系统中已经安装了 Python,安装 pyenv 也是有益的,因为它可以让你轻松体验新的语言特性,或者帮助参与使用不同 Python 版本的项目。此外,pyenv 还可以用来安装 Python 的预发布版本,以便你测试它们是否存在缺陷。

为什么不使用自带 Python?

“系统 Python” 指的是随操作系统一起安装的 Python。如果你使用的是 Mac 或 Linux,那么当你在终端输入 python 时,默认情况下会启动一个 Python 的交互式解释器。

那么,为什么不直接使用系统自带的 Python 呢?一种理解方式是,这个 Python 实际上是属于操作系统的。毕竟,它是随操作系统一起被安装的。这一点在你执行 which 命令时也得到了体现:

$ which python
/usr/bin/python

在这里,python 可供所有用户使用,很可能,这也不是您想要的 Python 版本:

$ python -V
Python 2.7.12

为什么要在系统 Python 中安装软件包时使用 sudo pip install 命令呢?这是因为你正在进行全局安装,如果另一位用户想要安装该软件包的稍早版本,这可能会引发问题。

多个版本的相同软件包可能会导致问题,这些问题往往会在你不经意间突然出现。一个常见的问题是,一个受欢迎且稳定的软件包突然在你的系统上出现问题。经过长时间的排查和搜索后,你可能会发现安装了错误的依赖版本,这让你的一天变得糟糕。

即使你的 Python 安装在 /usr/local/bin/python3,你仍然会遇到上述的权限和灵活性问题。

此外,你对于操作系统中安装的 Python 版本几乎没有控制权。如果你想使用 Python 的最新特性,而你使用的是 Ubuntu,例如,你可能就没那么幸运了。默认版本可能太旧,这意味着你得等待新操作系统的发布。

最后,一些操作系统实际上依赖于 Python 来运行。以 yum 为例,它大量依赖 Python 来执行任务。如果你安装了 Python 的新版本,并且不小心将其安装到了系统空间,你可能会严重破坏操作系统的使用能力。

那么包管理器又如何呢?

接下来合乎逻辑的选择是包管理器,比如 apt、yum、brew 或 port 等。毕竟,这是你安装大多数系统软件的方式。不幸的是,你会发现使用包管理器时会遇到一些相同的问题。

默认情况下,包管理器倾向于将软件包安装到全局系统空间而不是用户空间。这些系统级别的软件包会干扰你的开发环境,使得与他人共享工作空间变得困难。

再次,你无法控制可以安装的 Python 版本。虽然一些仓库提供了更多的选择,但默认情况下,你只能安装特定供应商在任何给定时间提供的 Python 版本。

即使你通过包管理器安装了 Python,考虑一下如果你正在开发一个软件包,并且想要支持和测试 Python 3.4 到 3.7 的不同版本。

当你在系统上输入 python3 时会发生什么?你如何快速切换不同的版本?虽然这是可行的,但过程繁琐且容易出错。更不用说,如果你想使用 PyPy、Jython 或 Miniconda,那么你可能只能放弃使用包管理器。

考虑到这些限制,让我们总结一下能够轻松灵活地安装和管理 Python 版本的标准:

  • 在你的用户空间安装 Python
  • 安装多个 Python 版本
  • 指定你确切想要的 Python 版本
  • 在已安装的版本之间切换 \

pyenv 可以让你做到所有这些,甚至更多。

安装 pyenv

在安装 pyenv 之前,你需要一些特定于操作系统的依赖项。这些依赖项主要是用 C 语言编写的开发工具,因为 pyenv 是通过从源代码构建来安装 Python 的。你可以查看官方文档以获取更详细的构建依赖项分解和解释。在这个教程中,你将看到安装这些依赖项的最常见方法。

构建依赖项

pyenv 从源代码构建 Python,这意味着你需要构建依赖项才能真正使用 pyenv。构建依赖项因平台而异。如果你在 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

这使用 Apt 安装所有构建依赖项。运行它,您就可以开始使用 Debian 系统了。

如果您使用 Fedora/CentOS/RHEL,您可以使用 yum 来安装构建依赖项:

$ sudo yum install gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite \
sqlite-devel openssl-devel xz xz-devel libffi-devel

此命令将使用 yum 安装 Python 的所有构建依赖项。

macOS 用户可以使用以下命令:

$ brew install openssl readline sqlite3 xz zlib

如果您使用 openSUSE,那么您将运行以下命令:

$ zypper in zlib-devel bzip2 libbz2-devel libffi-devel \
libopenssl-devel readline-devel sqlite3 sqlite3-devel xz xz-devel

该命令再次为您的系统安装所有 Python 构建依赖项。

最后,对于 Alpine 用户,您可以使用以下命令:

$ apk add libffi-dev ncurses-dev openssl-dev readline-dev \
tk-dev xz-dev zlib-dev

此命令使用 apk 作为包管理器,并将在 Alpine 上安装 Python 的所有构建依赖项。

使用 pyenv 安装程序

安装构建依赖项后,您就可以安装 pyenv 本身了。我建议使用 pyenv-installer 项目:

curl https://pyenv.run | bash

这将一并安装 pyenv 和几个实用的插件:

  • pyenv:即 pyenv 本身的应用
  • pyenv-virtualenv:一个让 pyenv 支持虚拟环境的插件
  • pyenv-update:一个用于更新 pyenv 的插件
  • pyenv-doctor:一个检查 pyenv 及其构建依赖是否已正确安装的插件
  • pyenv-which-ext:一个自动查找系统命令的插件

运行结束时,您应该看到如下内容:

WARNING: seems you still have not added 'pyenv' to the load path.

Load pyenv automatically by adding
the following to ~/.bashrc:

export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

输出将基于您的 shell。但是您应该按照说明将 pyenv 添加到您的路径并初始化 pyenv/pyenv-virtualenv 自动完成。完成此操作后,您需要重新加载 shell:

$ exec "$SHELL" # Or just restart your terminal

您现在已经安装了 pyenv 和四个有用的插件。

使用 pyenv 安装 Python

现在您已经安装了 pyenv,下一步是安装 Python。您有许多版本的 Python 可供选择。如果您想查看所有可用的 CPython 3.6 到 3.8,您可以执行以下操作:

$ pyenv install --list | grep " 3\.[678]"
  3.6.0
  3.6-dev
  3.6.1
  3.6.2
  3.6.3
  3.6.4
  3.6.5
  3.6.6
  3.6.7
  3.6.8
  3.7.0
  3.7-dev
  3.7.1
  3.7.2
  3.8-dev

上面显示了 pyenv 知道的与正则表达式匹配的所有 Python 版本。在本例中,这是所有可用的 CPython 版本 3.6 到 3.8。同样,如果您想查看所有 Jython 版本,您可以这样做:

$ pyenv install --list | grep "jython"
  jython-dev
  jython-2.5.0
  jython-2.5-dev
  jython-2.5.1
  jython-2.5.2
  jython-2.5.3
  jython-2.5.4-rc1
  jython-2.7.0
  jython-2.7.1

同样,您可以看到 pyenv 提供的所有 Jython 版本。如果您想查看所有版本,可以执行以下操作:

$ pyenv install --list
...
# There are a lot

找到所需的版本后,您可以使用单个命令安装它:

$ pyenv install -v 3.7.2
/tmp/python-build.20190208022403.30568 ~
Downloading Python-3.7.2.tar.xz...
-> https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tar.xz
Installing Python-3.7.2...
/tmp/python-build.20190208022403.30568/Python-3.7.2 /tmp/python-build.20190208022403.30568 ~
[...]
Installing collected packages: setuptools, pip
Successfully installed pip-18.1 setuptools-40.6.2
Installed Python-3.7.2 to /home/realpython/.pyenv/versions/3.7.2

这将需要一段时间,因为 pyenv 正在从源代码构建 Python,但一旦完成,您将在本地计算机上使用 Python 3.7.2。如果您不想查看所有输出,只需删除 -v 标志即可。甚至可以安装 CPython 的开发版本:

$ pyenv install 3.8-dev

对于本教程的其余部分,示例假设您已安装 3.6.8 和 2.7.15,但您可以随意将这些值替换为实际安装的 Python 版本。另请注意,示例中的系统Python版本为2.7.12。

安装位置

如前所述,pyenv 通过从源代码构建 Python 来工作。您安装的每个版本都位于 pyenv 根目录中:

$ ls ~/.pyenv/versions/
2.7.15  3.6.8  3.8-dev

您的所有版本都将位于此处。这很方便,因为删除这些版本很简单:

$ rm -rf ~/.pyenv/versions/2.7.15

当然 pyenv 还提供了卸载特定 Python 版本的命令:

$ pyenv uninstall 2.7.15

使用新的 Python

现在您已经安装了几个不同的 Python 版本,让我们了解一下如何使用它们的一些基础知识。首先,检查您有哪些可用的 Python 版本:

$ pyenv versions
* system (set by /home/realpython/.pyenv/version)
  2.7.15
  3.6.8
  3.8-dev
  • 表示系统 Python 版本当前处于活动状态。您还会注意到,这是由根 pyenv 目录中的文件设置的。这意味着,默认情况下,您仍在使用系统 Python:
$ python -V
Python 2.7.12

如果您尝试使用 which 来确认这一点,您将看到以下内容:

$ which python
/home/realpython/.pyenv/shims/python

pyenv 将自身插入到您的 PATH 中,从操作系统的角度来看,它是被调用的可执行文件。如果你想查看实际路径,可以运行以下命令:

$ pyenv which python
/usr/bin/python

例如,如果您想使用版本 2.7.15,则可以使用全局命令:

$ pyenv global 2.7.15
$ python -V
Python 2.7.15

$ pyenv versions
  system
* 2.7.15 (set by /home/realpython/.pyenv/version)
  3.6.8
  3.8-dev

如果您想返回到默认的 Python 系统版本,您可以运行以下命令:

$ pyenv global system
$ python -V
Python 2.7.12

您现在可以轻松地在不同版本的 Python 之间切换。

[1]Source: https://realpython.com/intro-to-pyenv/

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/1230.html

标签: pypy3
分享给朋友:

“pyenv 管理多个 Python 版本(1)(安装多个python怎么切换)” 的相关文章

Win+Ubuntu缝合怪:第三方开发者推出“Wubuntu”Linux发行版

IT之家 2 月 26 日消息,一位第三方开发者推出了一款名为“Wubuntu”的缝合怪 Linux 发行版,系统本身基于 Ubuntu,但界面为微软 Windows 11 风格,甚至存在微软 Windows 徽标。据介绍,这款 Wubuntu 发行版旨在为习惯使用 Windows 11 的用户打造...

红帽最新的企业 Linux 发行版具有解决混合云复杂性的新功能

据zdnet网5月1日报道,红帽这家 Linux 和超云领导者今天发布了其最新的旗舰 Linux 发行版 Red Hat Enterprise Linux (RHEL) 9.4,此前上周宣布对已有十年历史的流行 RHEL 7.9 再支持四年。这个领先的企业 Linux 发行版的最新版本引入了许多新功...

基于gitlab的PR操作教程

基于gitlab的PR操作教程注:该教程主要基于git命令行操作,其他图形化工具也可完成以下所有操作步骤,顺手即可。推荐工具:Source Tree ,TortoiseGit参考:gitflow一 . 基于分支的PR操作1. 本地切换到master分支1. 拉取最新代码2. 基于master创建ho...

Windows 下 Git 拉 Gitlab 代码

读者提问:『阿常你好,Windows 下 Git 拉 Gitlab 代码的操作步骤可以分享一下吗?』阿常回答:好的,总共分为五个步骤。一、Windows 下安装 Git官网下载链接:https://git-scm.com/download/winStandalone Installer(安装版)注意...

Git 分支管理策略汇总

最近,团队新入职了一些小伙伴,在开发过程中,他们问我 Git 分支是如何管理的,以及应该怎么提交代码?我大概说了一些规则,但仔细想来,好像也并没有形成一个清晰规范的流程。所以查了一些资料,总结出下面这篇文章,一共包含四种常见的分支管理策略,分享给大家。Git flow在这种模式下,主要维护了两类分支...

国产操作系统上Vim的详解03--安装和使用插件 | 统信 | 麒麟 | 中科方德

原文链接:国产操作系统上Vim的详解03--使用Vundle插件管理器来安装和使用插件 | 统信 | 麒麟 | 中科方德Hello,大家好啊!今天给大家带来一篇在国产操作系统上使用Vundle插件管理器来安装和使用Vim插件的详解文章。Vundle是Vim的一款强大的插件管理器,可以帮助我们轻松地安...