如何在Linux上使用Pyenv管理多个Python版本

时间:2020-03-21 11:46:41  来源:igfitidea点击:

Pyenv是一个命令行实用程序,可同时管理多个Python版本。
它使python版本管理比以往更加容易。
它用于安装,卸载和切换到多个不同版本的Python。

Pyenv允许我们基于每个用户更改全局Python版本,为每个项目的Python版本提供支持,使用环境变量覆盖Python版本,并一次从多个Python版本中搜索命令。
Pyenv可用于在多个python环境中测试代码。
在本教程中,我们将介绍如何在GNU/Linux上安装和使用Pyenv。

在Linux上安装Pyenv

首先,安装以下软件包以避免常见的构建问题。

对于基于Debian的系统:

$sudo apt-get install -y make build-essential git libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev

对于基于RPM的系统:

$sudo yum install zlib-devel bzip2 bzip2-devel git readline-devel sqlite sqlite-devel openssl-devel xz xz-devel

对于SUSE/openSUSE:

$sudo zypper in zlib-devel bzip2 libbz2-devel git readline-devel sqlite3 sqlite3-devel libopenssl-devel xz xz-devel

我们已经安装了必要的准备工作。
现在该安装Pyenv了。
推荐的官方安装方式是使用pyenv-installer脚本。
我们所要做的就是在shell中运行以下命令来安装pyenv。

$curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer | bash

在安装结束时,安装程序将通知我们将Pyenv添加到PATH。
就我而言,我在~/.bash_profile文件中添加了以下几行。

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

运行以下命令以使更改生效。

$source ~/.bash_profile

Pyenv可以使用。
现在让我们看看如何使用Pyenv管理不同版本的Python。

在Linux上使用Pyenv管理多个Python版本

首先,让我们查看所有可用版本。
为此,只需运行以下命令:

$pyenv install -l

或者,

$pyenv install --list

我们应该输出类似下面的内容。

Available versions:
 2.1.3
 2.2.3
 2.3.7
 2.4
 2.4.1
 .
 .
 .
 3.6.2
 3.6.3
 3.6.4
 3.7.0b1
 3.7-dev
 3.8-dev
[...]

列出当前安装的Python版本:

$pyenv versions
* system (set by /home/theitroad/.pyenv/version)

默认情况下,Pyenv使用我们的系统默认python。
此处*表示默认值。

安装Python

假设系统上需要Python 2.7.14和3.6.4版本。

为此,只需运行:

$pyenv install 2.7.14

要安装Python 3.6.4,请运行:

$pyenv install 3.6.4

我们不需要sudo权限。
所有Python版本都将安装在$HOME的pyenv根目录下的单独目录下。
pyenv的默认根目录是~/.pyenv。
例如,在我的情况下,Python 2.7.14安装在/home/theitroad/.pyenv/versions/2.7.14下。

$ls /home/theitroad/.pyenv/versions/
2.7.14 3.6.4

现在列出已安装的Python版本。

$pyenv versions
* system (set by /home/theitroad/.pyenv/version)
 2.7.14
 3.6.4

在不同的Python版本之间切换

我们可以通过两种方式(全球和本地)切换到不同的python。

让我们使用命令查看当前的全局python版本:

$pyenv global
system

没有了。
我的系统仍然使用系统默认的python。
让我们切换到其他Python版本,例如2.7.14.

$pyenv global 2.7.14

现在检查默认的Python版本:

$pyenv versions
 system
* 2.7.14 (set by /home/theitroad/.pyenv/version)
 3.6.4

我们是否注意到星星(*)?
是的,2.7.14是我们的全局默认Python版本。

我们也可以一次将多个版本指定为全局Python。
假设我们有两个版本的2.7.14和3.6.4.
如果我们更喜欢2.7.14而不是3.6.4,请运行:

$pyenv global 2.7.14 3.6.4

现在检查全局版本。

$pyenv versions
 system
* 2.7.14 (set by /home/theitroad/.pyenv/version)
* 3.6.4 (set by /home/theitroad/.pyenv/version)

现在,2.7.14和3.6.4是默认的全局版本。

我们可以通过将版本名称写入当前目录中的.python-version文件来设置本地特定于应用程序的(每个项目)Python版本。
请注意,本地版本将覆盖全局版本,并且可以通过设置PYENV_VERSION环境变量或者使用pyenv shell命令来覆盖自身。

切换到项目目录:

$cd myproject/

让我们切换到3.6.4.

$pyenv local 3.6.4

检查当前的本地python版本。

$pyenv versions
 system
 2.7.14
* 3.6.4 (set by /home/theitroad/myproject/.python-version)

设置虚拟环境

要使用特定的Python版本设置虚拟环境,请执行以下操作:

$pyenv virtualenv 3.6.4 myenv

要使其全局可用,请运行:

$pyenv global myenv
(myenv) Hyman@theitroad:~$

我们现在处于虚拟环境中。
做你想做的。
使用pip安装,删除python应用程序,而不使用pip。
全是你的。

如果要设置本地虚拟环境(每个目录):

CD到项目目录并运行:

$pyenv local mylocalenv

要删除虚拟环境,只需执行以下操作:

$pyenv uninstall myenv
pyenv-virtualenv: remove /home/theitroad/.pyenv/versions/3.6.4/envs/myenv? y

删除特定的python版本

要卸载特定的python版本,例如3.6.4:

$pyenv uninstall 3.6.4

或者,只需删除要删除版本的目录。

检查当前安装的python版本:

$pyenv versions

有关更多详细信息,请通过运行以下命令来阅读帮助部分:

$pyenv

另外,检查“ pyenv help <命令名称>”以获取有关特定命令的信息。
例如,我们可以按以下方式查看“安装”命令的信息。

$pyenv help install