pyenv 是一个简单而强大的工具,用于管理多个Python 版本。作为一名 Python 开发人员,您可能面临过不同项目需要不同 Python 版本的情况。
pyenv 为这个问题提供了一个优雅的解决方案。 本质上,pyenv 是一个 Python 版本管理器。它允许您在多个Python版本之间无缝切换。
它是一个很棒的工具,可以管理 Python 项目的环境、安装 Python、在 Python 版本之间切换等等。
pyenv 是如何工作的?
pyenv 通过修改PATH
环境变量并使用垫片拦截Python命令。
当您运行类似命令时python
or pip
,操作系统使用您的目录中列出的目录PATH
找到正确的可执行文件。 它的工作原理如下:
你运行一个Python命令,比如python
or pip
.
操作系统会搜索您的目录PATH
从左到右。
它首先找到 pyenv shim 目录(因为 pyenv 将它放在你的PATH
).
shim 将命令传递给 pyenv。
pyenv 确定您的应用程序指定了哪个 Python 版本。
它使用选定的 Python 版本运行您的命令。
这样,您就可以在每个项目的 Python 版本之间切换,这一切都归功于 pyenv。
在 Windows 上安装 pyenv
Windows 用户可以使用 pyenv-win 分支,它是 pyenv 的一个端口,可以通过以下命令轻松安装:
# Via pip
pip install pyenv-win --target $HOME\.pyenv
# Via Homebrew
brew install pyenv-win
运行命令后,您应该关闭终端并打开一个新终端以使更改生效。 注意:如果未包含,则需要更新 PATH 变量以包含 Python 安装目录。
在 Linux 上安装 pyenv
您可以使用 pyenv 存储库中的 pyenv-installer 脚本在 Linux 计算机上安装 pyenv。以下是执行此操作的命令:
curl https://pyenv.run | bash
此命令下载并运行 pyenv 安装程序。 接下来,您需要将 pyenv 添加到 shell 中,以便可以直接从终端使用它:
echo 'export PATH="$HOME/.pyenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init --path)"' >> ~/.bashrc
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
这些命令将必要的行添加到 .bashrc 文件中以设置 pyenv 的环境。 运行这些命令后,您应该重新启动终端或运行以下命令以使更改生效:
exec "$SHELL"
在 MacOS 上安装 pyenv
在 MacOS 上,您可以使用 Homebrew。以下是使用 Homebrew 安装 pyenv 的方法:
brew update
brew install pyenv
安装后,将 pyenv init 添加到 shell 以启用垫片和自动完成:
echo 'if command -v pyenv 1>/dev/null 2>&1; then eval "$(pyenv init -)"; fi' >> ~/.bash_profile
完成后,您应该重新启动终端以使更改生效。
检查 pyenv 版本
安装 pyenv 后,您可以通过运行以下命令检查其版本:
pyenv --version
Output:
pyenv 2.3.23
此命令显示系统上安装的 pyenv 版本。在此示例中,安装的 pyenv 版本为 2.3.23。
配置pyenv环境变量
pyenv 使用多个环境变量来控制其行为。最重要的之一是PYENV_ROOT
,它定义版本和填充程序的保存位置。默认情况下,这是~/.pyenv
. 你可以这样设置:
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
这些命令设置PYENV_ROOT
变量并将其添加到您的系统中PATH
. 要自动初始化 pyenv,您可以将以下内容添加到 shell 配置文件中:
if command -v pyenv 1>/dev/null 2>&1; then
eval "$(pyenv init -)"
fi
此命令检查 pyenv 是否已安装(使用command -v pyenv
),如果是,则初始化它(用eval "$(pyenv init -)"
).
列出所有可用的 Python 版本
pyenv 使您可以访问各种 Python 版本。要列出所有可用的安装版本,请使用以下命令:
pyenv install --list
Output:
2.1.3
2.2.3
2.3.7
...
3.8.10
3.9.5
...
这个列表相当长,因为它包括从 2.1.3 到最新版本的所有 Python 版本。
安装特定的Python版本
要安装特定版本的Python,您可以使用pyenv install
命令后跟版本号。
例如,要安装Python 3.9.5,您可以使用以下命令:
pyenv install 3.9.5
Output:
python-build: use openssl@1.1 from homebrew
python-build: use readline from homebrew
Downloading Python-3.9.5.tar.xz...
-> https://www.python.org/ftp/python/3.9.5/Python-3.9.5.tar.xz
Installing Python-3.9.5...
python-build: use readline from homebrew
python-build: use zlib from xcode sdk
Installed Python-3.9.5 to /Users/username/.pyenv/versions/3.9.5
此命令下载 Python 3.9.5 并将其安装到 pyenv versions 目录。 安装后,您可以使用pyenv versions
命令列出系统上安装的所有 Python 版本:
pyenv versions
Output:
* system (set by /Users/username/.pyenv/version)
3.9.5
此输出显示已安装 Python 3.9.5,但系统当前使用全局 Python 版本。
设置全局Python版本(Switch版本)
使用 pyenv,您可以设置默认在所有 shell 中使用的全局 Python 版本。要设置全局版本,请使用pyenv global
命令后跟版本号。例如:
pyenv global 3.9.5
要确认全局 Python 版本,请使用python --version
命令:
python --version
Output:
Python 3.9.5
此输出表明全局 Python 版本现已设置为 3.9.5。
设置本地(每个项目)Python 版本
pyenv 允许您为每个项目设置本地 Python 版本。
此版本会覆盖其设置目录中的全局 Python 版本。操作方法如下: 首先,导航到您的项目目录:
cd my_project
然后,为您的项目设置本地版本:
pyenv local 3.8.10
该命令创建一个.python-version
当前目录中具有指定版本的文件。 要验证当前目录的 Python 版本,您可以使用python --version
再次命令:
python --version
Output:
Python 3.8.10
这表明无论全局 Python 版本如何,Python 3.8.10 都是当前目录的版本。
特定于 shell 的 Python 版本
Shell-specific version is only valid for the current shell session and is not saved to a configuration file. This can be particularly useful if you need to quickly test something in a specific Python version without affecting your global or local versions.
To set a shell-specific Python version, use the pyenv shell
command. For example:
pyenv shell 3.8.10
您可以使用以下命令确认当前 shell 的 Python 版本python --version
命令:
python --version
Output:
Python 3.8.10
如果关闭当前终端并打开一个新终端,Python 版本将恢复为全局或本地设置。
要在同一会话中清除特定于 shell 的版本,请使用pyenv shell --unset
命令:
pyenv shell --unset
卸载Python版本
如果您不再需要特定的 Python 版本,可以使用 pyenv 轻松卸载它。
Use the pyenv uninstall
命令后跟版本号。例如:
pyenv uninstall 3.9.5
系统会要求您确认操作。确认后,指定的Python版本将从您的系统中删除。
什么是虚拟环境?
虚拟环境是一个独立的目录树,其中包含特定 Python 版本的 Python 安装以及许多附加包。
这是一种将 Python 项目及其依赖项与其他项目隔离的方法,确保每个项目都有自己的一组依赖项,不会干扰其他项目。 当您处理需要不同版本的包或 Python 本身的项目时,虚拟环境的使用至关重要。
通过隔离每个环境,您可以避免包版本之间潜在的冲突。
使用pyenv创建虚拟环境
使用pyenv,您可以轻松创建虚拟环境。首先,确保您安装了所需的 Python 版本:
pyenv install 3.8.10
接下来,使用以下命令创建一个新的虚拟环境pyenv virtualenv
命令:
pyenv virtualenv 3.8.10 my-env
此命令使用 Python 3.8.10 创建一个名为“my-env”的新虚拟环境。 要列出所有可用的虚拟环境,您可以使用pyenv virtualenvs
命令:
pyenv virtualenvs
Output:
3.8.10/envs/my-env (created from /Users/username/.pyenv/versions/3.8.10)
my-env (created from /Users/username/.pyenv/versions/3.8.10)
此输出显示您有一个使用 Python 3.8.10 创建的名为“my-env”的虚拟环境。
激活和停用虚拟环境
要激活虚拟环境,您可以使用pyenv activate
命令:
pyenv activate my-env
一旦虚拟环境被激活,该环境中安装的Python版本和软件包将不会影响系统的其余部分。 您可以通过检查Python版本来确认激活:
python --version
Output:
Python 3.8.10
这表明当前环境的Python版本是3.8.10。 要停用虚拟环境并返回全局 Python 版本,请使用pyenv deactivate
命令:
pyenv deactivate
删除虚拟环境
如果您不再需要虚拟环境,可以使用以下命令将其删除pyenv uninstall
命令,类似于卸载Python版本:
pyenv uninstall my-env
确认操作后,虚拟环境“my-env”将从您的系统中删除。
pyenv 插件
pyenv 支持扩展其功能的插件。以下是一些有用的:
pyenv-update
:这个插件允许您使用单个命令更新 pyenv 及其所有插件。
pyenv-doctor
:此插件检查 pyenv 安装和 Python 构建的运行状况。
pyenv-which-ext
:这个插件添加了pyenv which
在当前环境的目录中搜索程序的命令。
您可以使用与安装 pyenv 相同的方法来安装这些插件,但使用插件的 Git URL 而不是 pyenv 的。
pyenv 的真实用例
现在您已经学会了如何使用 pyenv,让我们讨论一下它在实际场景中的应用:
跨 Python 版本测试 :如果您正在开发 Python 包,您可能希望确保它可以跨多个 Python 版本运行。 pyenv 可以轻松地在不同的 Python 版本之间切换进行测试。
简化的 Python 更新 :当新的 Python 版本发布时,pyenv 允许您将其与现有版本一起安装,而不会影响您的系统 Python 或其他项目。然后,您可以在完全切换之前使用新版本测试您的项目。
我们的 pyenv 教程到此结束。您现在配备了一个强大的工具来管理多个 Python 版本和虚拟环境。
Resource
https://github.com/pyenv/pyenv