管理 Python 版本

推荐使用 https://github.com/pyenv/pyenv 来管理不同版本的 python,但是它不支持 windows,如果你使用 windows,请使用 https://github.com/pyenv-win/pyenv-win

如果你需要使用特定版本的 python,先安装它,类似于

1
pyenv install 3.9.6

随后在项目的根目录,使用

1
pyenv local 3.9.6

它会生成一个配置文件 .python-version ,就会让进入项目根目录,就会自动切换到 3.9.6 的版本。

管理虚拟环境

Poetry 适合现代 Python 项目开发、个人或小型团队开发、需要发布到 PyPI 的项目。

特点

  • 自动化依赖管理:Poetry 能够自动处理依赖冲突,生成 pyproject.toml 和 poetry.lock 文件,确保依赖一致性。
  • 内置虚拟环境管理:Poetry 会自动为每个项目创建虚拟环境,隔离项目依赖,保证项目间的互不干扰。
  • 简化的发布流程:通过 poetry build 和 poetry publish,可以轻松地将 Python 包发布到 PyPI。
  • 现代化设计:Poetry 支持 pyproject.toml,这是 Python 最新的标准配置文件格式。

优点:

  • 统一的依赖管理和虚拟环境管理,操作简单。
  • 自动解决依赖冲突,生成锁定文件,保证不同环境依赖的一致性。
  • 提供项目的创建、构建、依赖管理、测试和发布的全流程工具。
  • pyproject.toml 文件非常清晰,方便配置。
1
2
3
4
5
poetry new my_project      # 创建新项目
poetry add requests # 添加依赖
poetry install # 安装依赖
poetry shell # 进入虚拟环境
poetry run python script.py # 在虚拟环境外,使用虚拟环境运行脚本

Poetry 对当前的 python 解释器有依赖。当你使用 Poetry 创建虚拟环境时,它会检查系统中当前使用的 Python 版本是否符合项目中的版本要求。如果当前系统或环境中的 Python 版本不符合 pyproject.toml 中的规定,Poetry 会提示错误,阻止虚拟环境的创建或依赖安装。报错类似 Poetry could not find a compatible version of python for your project.

为了弥补 Poetry 不能直接管理 Python 版本的缺点,你可以结合 pyenv 这类工具来一起使用。

以上 pyenv 会自动切换环境,这样就没有问题了。


相比 conda,poetry 专注于依赖管理和包管理,适合纯 Python 项目。Conda 创建的虚拟环境是完全隔离的,每个环境可以有不同的 Python 版本和不同的依赖包,管理起来非常方便。

但是 Conda 在一些科学计算库上,有预编译的版本(如 numpy, scipy, pandas),Conda 可以直接安装预编译好的版本,避免本地编译的复杂性。尤其在 windows 平台,能解决许多依赖包编译失败的问题


关于 macOS(darwin)系统,它确实在用户体验上下了功夫,并且有类 unix 的系统。但是它的编译工具链,依赖库等生态,还是不如 linux,尤其是需要自行编译的部分,比如部分 python 的包,就会容易遇到各种 bug,需要手动解决,再加上 arm 架构,会进一步造成一些兼容性问题。