使用 pyenv
升级 Python (推荐)
pyenv
(如果还没有安装的话):brew update
brew install pyenv
brew info pyenv
的提示,将必要的初始化脚本添加到你的 shell 配置文件中(通常是 ~/.zshrc
或 ~/.bash_profile
),例如:
# 对于 zsh (默认 macOS shell)
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo '[[ -d "$PYENV_ROOT/bin" ]] && export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
source ~/.zshrc
(或相应文件) 使配置生效。pyenv install --list
找到你想要安装的 3.12+ 版本,比如 3.12.3
。
pyenv install 3.12.3
这可能需要一些时间,因为它会从源码编译 Python。
pyenv global 3.12.3
fastapi-project
),然后运行:
pyenv local 3.12.3
.python-version
文件。python --version
# 或者 python3 --version
确保它显示的是你刚刚安装和设置的版本 (e.g., Python 3.12.3
)。
重要:升级 Python 后的步骤
升级 Python 版本后,你必须为你的项目使用新的 Python 版本重新创建虚拟环境并重新安装依赖:
fastapi-project
) 中,删除旧的 .venv
文件夹:rm -rf .venv
python -m venv .venv
# 或者 python3 -m venv .venv
source .venv/bin/activate
如果你有 requirements.txt
文件:
pip install -r requirements.txt
或者手动安装需要的库:
pip install fastapi uvicorn supabase python-dotenv psycopg2 alembic # 以及其他你需要的库
Python生态系统中有几种不同的包管理工具,类似于JavaScript世界中的npm、yarn和pnpm。Python包管理器全面对比分析如下:
特性 | pip | conda | poetry | pipenv | uv | hatch | pdm | rye |
---|---|---|---|---|---|---|---|---|
实现语言 | Python | Python | Python | Python | Rust | Python | Python | Rust |
解析速度 | 慢 | 中等 | 中等 | 慢 | 极快(10-100x pip) | 中等 | 快 | 快 |
锁文件 | 无(需pip-tools) | environment.yml | poetry.lock | Pipfile.lock | uv.lock | hatch.lock | pdm.lock | requirements.lock |
环境管理 | 需配合venv | 内置 | 内置 | 内置 | 内置 | 内置 | 内置 | 内置 |
依赖解析 | 简单 | 强大 | 强大 | 较好 | 极强(PubGrub) | 良好 | 强大(PEP 665) | 强大 |
发布支持 | 需twine | 支持 | 内置 | 无 | 内置 | 内置 | 内置 | 内置 |
工具执行 | 无 | 无 | 有 | 无 | 内置 | 有 | 有 | 有 |
Python版本管理 | 无 | 有 | 无 | 无 | 内置 | 无 | 无 | 内置 |
工作区支持 | 无 | 无 | 有限 | 无 | 强大 | 有 | 有 | 有 |
首次发布 | 2008 | 2012 | 2018 | 2017 | 2023 | 2022 | 2019 | 2022 |
社区活跃度 | 极高 | 高 | 高 | 中等 | 极高(50.5k★) | 中 | 中 | 中 |
速度排名:uv >>> rye/pdm > poetry/hatch > conda > pipenv > pip
pip:Python的官方包管理器,简单直接但功能有限。虽然易于使用,但缺乏依赖解析、环境管理和锁文件等现代化功能。至今仍是许多工具链的基础。
conda:起源于科学计算社区,解决了pip的主要缺点 - 环境隔离和包依赖问题。能同时管理Python和非Python包(如C库),特别适合数据科学。但conda解决方案较重,解析速度一般。
pipenv 和 poetry:引入了项目级依赖管理和锁文件概念,让Python项目更接近npm或Cargo的体验。
pdm、hatch、rye 和 uv:采用现代解析算法,支持多项目工作区,更遵循Python打包标准(PEP)。
🌟 推荐:uv 或 poetry
🌟 推荐:uv + conda
🌟 推荐:conda 或 uv
🌟 推荐:uv
从CTO角度,我建议关注uv的发展 - 作为Ruff团队的产品,已获50.5k GitHub星标 (https://github.com/astral-sh/uv),解决了Python生态系统中长期存在的性能问题,且能替代多个工具,简化工具链并提高效率。对于新项目,uv是很有竞争力的选择;而对于现有项目,可考虑逐步迁移测试。
pyenv 是 Python 版本的管理工具,与 Node.js 世界中的 nvm 有许多相似之处。如果你已经熟悉 nvm,理解 pyenv 将会很直观。
pyenv 是一个 Python 版本管理工具,它允许你:
特性 | pyenv | nvm |
---|---|---|
管理对象 | Python 解释器版本 | Node.js 版本 |
工作原理 | 通过修改 PATH 环境变量和 shims | 通过修改 PATH 环境变量 |
配置文件 | .python-version | .nvmrc |
范围设置 | 支持全局、本地和 shell 会话范围 | 支持全局和 shell 会话范围 |
环境隔离 | 需要与 virtualenv/venv 配合 | node_modules 自动隔离包 |
包管理器集成 | 不直接管理包(需配合 pip 等) | 集成 npm/yarn |
版本获取 | 从源码编译或下载预编译版本 | 下载预编译二进制版本 |
实现语言 | Bash | Bash |
自动切换 | 自动根据 .python-version 切换 | 自动根据 .nvmrc 切换 |
操作系统支持 | 主要面向 Unix-like 系统 | 主要面向 Unix-like 系统 |
# 安装 pyenv (MacOS)
brew install pyenv
# 查看可用的 Python 版本
pyenv install --list
# 安装特定 Python 版本
pyenv install 3.10.0
# 设置全局 Python 版本
pyenv global 3.10.0
# 为当前目录设置 Python 版本(创建 .python-version 文件)
pyenv local 3.8.12
# 为当前 shell 会话设置 Python 版本
pyenv shell 3.9.7
# 列出所有已安装的 Python 版本
pyenv versions
# 显示当前激活的 Python 版本
pyenv version
# 安装 nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
# 查看可用的 Node.js 版本
nvm ls-remote
# 安装特定 Node.js 版本
nvm install 16.13.0
# 设置全局 Node.js 版本
nvm alias default 16.13.0
# 为当前目录设置 Node.js 版本(创建 .nvmrc 文件)
echo "14.18.1" > .nvmrc
nvm use
# 为当前 shell 会话设置 Node.js 版本
nvm use 14.18.1
# 列出所有已安装的 Node.js 版本
nvm ls
# 显示当前激活的 Node.js 版本
nvm current
环境隔离的处理方式:
配合包管理器的方式:
# pyenv 与 virtualenv 配合使用(推荐)
pyenv install 3.10.0
pyenv local 3.10.0
python -m venv .venv
source .venv/bin/activate # 激活虚拟环境
pip install requests # 在隔离环境中安装包
原生的插件扩展:
# 使用 pyenv-virtualenv 插件
pyenv virtualenv 3.10.0 my-project-env
pyenv local my-project-env # 自动激活/切换环境
为了获得更接近 nvm 的体验,推荐使用 pyenv-virtualenv 插件:
# 安装插件
brew install pyenv-virtualenv
# 在 .zshrc 或 .bashrc 中添加
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
# 创建虚拟环境并与 Python 版本绑定
pyenv virtualenv 3.10.0 my-project-env
# 为项目自动激活环境
pyenv local my-project-env
对于有 Node.js 背景的开发者,可以这样理解:
如果你习惯了 nvm 的工作流程,建议组合使用 pyenv + pyenv-virtualenv,这会给你提供最接近 Node.js 开发体验的 Python 版本管理方式。