在 macOS 上管理本地 Python 环境,有如下主流方式:
1 使用 pyenv
pyenv 可以安装和切换多个 Python 版本,非常适合开发者。
1.1 pyenv 的作用和使用场景
- 作用:管理和切换多个不同版本的 Python 解释器(比如 2.7、3.6、3.11 等)。
- 使用场景 :
- 需要在一台机器上安装和切换多个 Python 版本。
- 某些项目依赖特定的 Python 版本。
- 避免污染或破坏系统自带的 Python。
- 举例 :
- 有一个老项目需要 Python2,新项目用 Python3,可以用 pyenv 安装并切换。
1.2 操作示例
安装 pyenv:
sh
brew install pyenv
安装 Python 版本:
sh
pyenv install 3.11.8
pyenv install 2.7.18
设置全局/本地 Python 版本:
sh
pyenv global 3.11.8 # 设置全局默认
pyenv local 2.7.18 # 针对当前目录设置
优点:
- 多版本共存,互不干扰
- 切换方便
- 不污染系统自带 Python
2 使用 venv/virtualenv(管理项目依赖)
venv (Python 3.3+ 内置)或 virtualenv(兼容 Python2/3)用于创建项目级虚拟环境,隔离依赖。
2.1 venv/virtualenv 的作用和使用场景
- 作用:为每个项目创建独立的"包依赖环境",隔离不同项目的第三方库。
- 使用场景 :
- 不同项目依赖不同版本的第三方包(如 Django、Flask 等)。
- 避免全局 pip 安装包导致依赖冲突。
- 举例 :
- 项目A用 Django 2.2,项目B用 Django 4.0,各自用 venv/virtualenv 创建独立环境,互不影响。
2.2 操作示例
创建虚拟环境:
sh
python3 -m venv venv
# 或
virtualenv venv
激活虚拟环境:
sh
source venv/bin/activate
退出虚拟环境:
sh
deactivate
优点:
- 每个项目独立依赖
- 避免包冲突
3 uv
uv
是一款由 Charlie Marsh (Rust 社区知名开发者)使用 Rust 语言编写的高性能 Python 包管理器,旨在解决传统工具(如 pip
、venv
)在速度和效率上的痛点。可以参考: Python 包管理器 uv
:原理简介与使用指南I
3.1 操作示例
sh
# 列出已安装和当前使用的版本
uv python list
# 显示所有可供下载的补丁版本
uv python list --all-versions
# 只显示已安装的版本
uv python list --only-installed
# 安装最新的稳定版 (如果尚未安装)
uv python install
# 安装特定版本
uv python install 3.11.5
# 安装 3.10 系列的最新可用版
uv python install 3.10
# 查看python管理的目录,受 UV_PYTHON_INSTALL_DIR 影响
uv python dir
# 固定项目 Python 版本, 会在当前目录创建或更新 .python-version 文件,声明项目应使用的 Python 版本。
# 之后 uv venv, uv run, uv sync 等命令会优先查找并使用这个版本。
uv python pin 3.11
# 卸载 Python 版本
uv python uninstall 3.10.8
# 卸载 3.11 系列所有已安装版本
uv python uninstall 3.11
# 默认创建 .venv 目录
uv venv
# 使用 --prefix 指定环境目录:
uv venv --prefix ./myenv
# 指定 Python 版本
uv venv --python 3.11
# 指定路径创建虚拟环境
uv venv --python 3.11 /root/.venv
# 创建轻量级虚拟环境(无需复制标准库):
uv venv --seed
# 清除所有缓存文件
uv clean
# 激活虚拟环境
source /root/.venv/bin/activate
# 退出虚拟环境
deactivate
3.2 部分问题
-
uv 安装的 Python 解释器在哪里?
- uv 安装的 Python 版本,默认会被放在 uv 的专用目录(如
~/.uv/pythons/
)。 - 这些 Python 解释器不会自动加入你的系统 PATH。
- 你可以通过 uv 命令(如
uv python
,uv venv
,uv run
等)直接调用这些解释器。
- uv 安装的 Python 版本,默认会被放在 uv 的专用目录(如
-
能不能直接用 uv 安装的 Python 解释器?
-
可以,但需要手动指定路径。
-
你可以在
~/.uv/pythons/
目录下找到对应的 Python 解释器,直接运行,比如:sh~/.uv/pythons/3.11.5/bin/python3
-
你也可以把这个路径加到 PATH,或者在 shebang 里写绝对路径。
-
-
和 pyenv 的区别
-
pyenv 会自动在 PATH 里插入 shim,让你在 shell 里直接用
python3.11
等命令。 -
uv 更推荐用自己的命令行工具来管理和调用,避免 PATH 污染和冲突。
-
-
uv 如何查找 Python 解释器?
- uv 会在你的 PATH 路径下查找可用的 Python 解释器(比如 python3、python3.11 等)。
- 只要 pyenv 的 shims 目录(通常是
~/.pyenv/shims
)在 PATH 里,uv 就能检测到 pyenv 管理的 Python 版本。 - 如果你已经用 pyenv global/local/shell 设定了 Python 版本 ,在当前 shell 下运行
python
或python3
,实际就是 pyenv 的 shim。 - 这时,uv 运行如
uv venv
、uv pip
、uv python
时,默认会用当前 PATH 下的 python,也就是 pyenv 选中的版本。 - 你也可以用
uv venv --python=python3.8
这样指定具体的解释器(只要 PATH 里能找到)。
4 推荐组合
- 开发者/多版本需求:pyenv + venv/virtualenv
- pyenv 解决"用哪个 Python 解释器"的问题。
- venv/virtualenv 解决"用哪些第三方包"的问题。
- 常见组合 :用 pyenv 先切换到合适的 Python 版本,再用 venv/virtualenv 创建虚拟环境。 示例流程:
sh
pyenv install 3.11.8
pyenv local 3.11.8
python -m venv venv
source venv/bin/activate
# 现在你用的是 pyenv 管理的 3.11.8 解释器 + venv 隔离的依赖