如何进行 Python 虚拟环境管理

在 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 包管理器,旨在解决传统工具(如 pipvenv)在速度和效率上的痛点。可以参考: 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 部分问题

  1. uv 安装的 Python 解释器在哪里?

    • uv 安装的 Python 版本,默认会被放在 uv 的专用目录(如 ~/.uv/pythons/)。
    • 这些 Python 解释器不会自动加入你的系统 PATH。
    • 你可以通过 uv 命令(如 uv python, uv venv, uv run 等)直接调用这些解释器。
  2. 能不能直接用 uv 安装的 Python 解释器?

    • 可以,但需要手动指定路径。

    • 你可以在 ~/.uv/pythons/ 目录下找到对应的 Python 解释器,直接运行,比如:

      sh 复制代码
      ~/.uv/pythons/3.11.5/bin/python3
    • 你也可以把这个路径加到 PATH,或者在 shebang 里写绝对路径。

  3. 和 pyenv 的区别

    • pyenv 会自动在 PATH 里插入 shim,让你在 shell 里直接用 python3.11 等命令。

    • uv 更推荐用自己的命令行工具来管理和调用,避免 PATH 污染和冲突。

  4. uv 如何查找 Python 解释器?

    • uv 会在你的 PATH 路径下查找可用的 Python 解释器(比如 python3、python3.11 等)。
    • 只要 pyenv 的 shims 目录(通常是 ~/.pyenv/shims)在 PATH 里,uv 就能检测到 pyenv 管理的 Python 版本。
    • 如果你已经用 pyenv global/local/shell 设定了 Python 版本 ,在当前 shell 下运行 pythonpython3,实际就是 pyenv 的 shim。
    • 这时,uv 运行如 uv venvuv pipuv 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 隔离的依赖
相关推荐
南雨北斗35 分钟前
TP6使用PHPMailer发送邮件
后端
你的人类朋友37 分钟前
🤔什么时候用BFF架构?
前端·javascript·后端
争不过朝夕,又念着往昔2 小时前
Go语言反射机制详解
开发语言·后端·golang
绝无仅有3 小时前
企微审批对接错误与解决方案
后端·算法·架构
Super Rookie3 小时前
Spring Boot 企业项目技术选型
java·spring boot·后端
来自宇宙的曹先生4 小时前
用 Spring Boot + Redis 实现哔哩哔哩弹幕系统(上篇博客改进版)
spring boot·redis·后端
expect7g4 小时前
Flink-Checkpoint-1.源码流程
后端·flink
00后程序员4 小时前
Fiddler中文版如何提升API调试效率:本地化优势与开发者实战体验汇总
后端
用户8122199367224 小时前
C# .Net Core零基础从入门到精通实战教程全集【190课】
后端
bobz9654 小时前
FROM scratch: docker 构建方式分析
后端