Python环境工具

我在 Homebrew环境Python 实践时注意到,官方文档 Homebrew Documentation: Python 提到:

Important: Python may be upgraded to a newer version at any time. Consider using a version manager such as pyenv if you require stability of minor or patch versions for virtual environments.

也就是说, Homebrew 并不会pin住Python版本,随时可能会进行版本升级。这对于生产环境来说,需要确保稳定的模块兼容性,是有特定版本要求的。正是因为这个需求,催生出类似 Ruby版本管理器 一样的Python版本管理工具 pyenv

现在我们来理清一些Python环境工具的关系:

  • venv : 从Python 3.3开始的最新版本,提供了内建的 venv 模块,默认安装,提供了类似 Python virtualenv 的隔离Python环境

  • pyvenv : 从Python 3.3开始,提供了 pyvenv 脚本 来帮助创建不同环境, pyvenv 实际上是 venv 模块的一个包装,提供了 venv 相同功能(也就是说,你直接使用 venv 模块就可以了)

  • pyenv 是一个第三方工具,用于在统一个主机上安装管理多个Python版本以及创建虚拟环境。 pyenvvenvpyvenv 没有关系,但是提供了相似的功能

  • virtualenv 是一个第三方工具,用于创建隔离的虚拟环境。不过Python默认不安装 virtualenv ,你需要通过 pip 手工安装

  • virtualenvwrapper 是一系列shell脚本用来在 virtualenv 上提供附加功能。 virtualenvwrapper 可以管理多个虚拟环境并且提供一些附加功能,如对于部分项目使用特定的虚拟环境

  • pipenv 是结合了 virtualenvpip 的工具,允许微怒项目创建虚拟环境和管理Python包,这个工具设计成比直接使用 virtualenvpip 更方便

备注

GitHub: pyenv/pyenv 是从 rbenvruby-build fork出来的项目,并使用Python做了修改

总之,如果作为底层使用,你需要使用:

  • pyenv 来安装和管理多个Python版本以适应开发、测试、生产环境:

    • 为每个项目制定运行的Python版本

    • 为每个用户指定全局的Python版本

    • 只需要一个环境变量就可以覆盖默认Python版本(切换到指定Python版本)

    • 一次性从Python的多个版本搜索命令,这对于 tox 这样的Python自动化标准测试非常有用( OpenStack使用tox完成单元测试 )

  • venv 来构建Python的隔离虚拟环境(结合 pyenv 可以构建不同的版本环境)

使用 pyenv 管理Python版本

  • 安装 pyenv :

安装 pyenv
brew install pyenv
  • 使用 pyenv 安装指定版本:

pyenv 安装python
pyenv install 3.12.4
  • 查看当前可用版本:

查看当前可用版本
pyenv versions
  • 注意通过 pyenv 安装python之后,需要调整环境变量 PATH :

设置pyenv的PATH环境变量(这里以 zsh 为例,设置 ~/.zshrc )
export PATH=$(pyenv root)/shims:$PATH

再次启动终端,使用 whic python 就可以看到:

pyenv 设置的路径中优先级python
% which python
/Users/huatai/.pyenv/shims/python

% python
Python 3.12.4 (main, Jul 19 2024, 08:19:37) [Clang 15.0.0 (clang-1500.3.9.4)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 
  • 设置全局版本:

使用 pyenv 设置全局优先版本
pyenv global 2.7.18

# 也可以设置切换到最新版本
pyenv global 3.12.4

参考