当前位置:首页>python>Python优雅的管理环境

Python优雅的管理环境

  • 2026-09-10 00:35:01
Python优雅的管理环境

这两年折腾 AI 开源项目,一个很明显的变化是:

电脑里的 Python 环境越来越多了。

这个项目要求 Python 3.10,那个项目要求 3.11,新一点的模型开始要求 3.12。

然后你的电脑里可能同时存在:

  • 系统 Python
  • Homebrew 安装的 Python
  • Conda 里的 Python
  • pyenv 安装的 Python
  • 各个项目自己的 .venv
  • 某些 AI 软件偷偷创建的 Python 环境

最后最常见的问题不是代码跑不起来,而是:

python --version
which python
which pip

看完之后开始怀疑人生:

我现在到底用了哪个 Python?

如果经常折腾 AI、Hugging Face、Whisper、TTS、Stable Diffusion 之类的项目,我建议至少搞清楚两套方案:

传统稳定方案:pyenv + venv
新项目方案:uv

我现在更推荐:老项目不折腾,新项目优先 uv。


一、先说最稳的:pyenv + venv

这套方案最大的优点就是:

职责非常清晰。

pyenv 只负责一件事情:

管理 Python 版本

venv 只负责:

创建项目虚拟环境

Python 官方的 venv 本身就是用来创建相互隔离的 Python 环境,而 pyenv 官方也明确把自己的定位放在 Python 多版本切换上。

例如一个项目需要 Python 3.12:

pyenv install 3.12.14

进入项目:

cd my-project

指定当前目录使用 Python 3.12:

pyenv local 3.12.14

这时目录下会出现:

.python-version

然后创建虚拟环境:

python -m venv .venv

激活:

source .venv/bin/activate

Windows:

.venv\Scripts\activate

安装依赖:

pip install torch
pip install transformers
pip install yt-dlp

整个关系非常简单:

pyenv
  ↓
Python 3.12
  ↓
venv
  ↓
.venv
  ↓
pip install

如果项目已经稳定运行,我其实不建议为了追新工具强行迁移。

pyenv + venv 最大的优势就是简单、透明、出了问题知道去哪里找。


二、但新项目,我更建议直接用 uv

uv 是 Astral 推出的 Python 包管理和项目管理工具,使用 Rust 编写。

它有意思的地方不是简单替代 pip。

而是把过去散落的很多工具整合到了一起:

Python 版本管理
虚拟环境
pip
依赖管理
依赖锁定
项目管理
命令运行

都可以交给 uv。官方目前也直接支持 Python 版本安装、项目环境、依赖锁定以及 uv run 等完整工作流。

以前:

pyenv
+
venv
+
pip
+
requirements.txt

现在可以变成:

uv

这才是它真正吸引人的地方。


三、安装 uv

macOS / Linux:

curl -LsSf https://astral.sh/uv/install.sh | sh

这是 uv 官方提供的安装方式之一。

安装完成:

uv --version

然后就可以开始用了。


四、用 uv 创建一个 Python 3.12 项目

假设我要创建一个 AI 项目:

uv init ai-demo

uv init 会直接初始化一个 Python 项目。

进入目录:

cd ai-demo

指定 Python 3.12:

uv python pin 3.12

如果本机没有 Python 3.12,可以直接:

uv python install 3.12

也就是说,以前需要:

pyenv install 3.12

现在 uv 自己也能处理 Python 版本。

接下来安装依赖。

以前:

pip install transformers

现在:

uv add transformers

例如:

uv add transformers torch

开发依赖:

uv add --dev pytest ruff

官方推荐在项目模式下通过 uv add 管理依赖,而不是手动向 .venv 里安装包。

你会看到几个关键东西:

ai-demo/
├── .python-version
├── .venv/
├── pyproject.toml
├── uv.lock
└── main.py

其中:

.python-version

控制 Python 版本。

pyproject.toml

记录项目以及依赖声明。

uv.lock

记录精确的依赖版本。

.venv 则仍然是熟悉的虚拟环境。

所以 uv 并没有抛弃虚拟环境。

它只是把虚拟环境自动管理起来了。


五、运行项目甚至不用 activate

传统方式:

source .venv/bin/activate
python main.py

uv 可以直接:

uv run python main.py

甚至很多时候你根本不需要关心:

source .venv/bin/activate

uv run 会检查项目环境;如果环境不存在或者依赖发生变化,会确保项目环境处于正确状态。

例如:

uv run python main.py

测试:

uv run pytest

运行脚本:

uv run app.py

这个体验对经常切换多个 AI 项目的人特别舒服。


六、最常用的 uv 命令,其实就几个

创建项目:

uv init my-project

安装 Python:

uv python install 3.12

指定项目 Python:

uv python pin 3.12

添加依赖:

uv add transformers

删除依赖:

uv remove transformers

同步环境:

uv sync

运行程序:

uv run python main.py

实际上日常开发记住这几个就已经够用了。


七、怎么从 pyenv + venv 切换到 uv?

如果你已经有一个老项目:

project/
├── .venv/
├── requirements.txt
└── main.py

首先看有没有:

requirements.txt

有的话非常简单。

先退出旧环境:

deactivate

如果确认依赖已经完整记录,可以删除旧环境:

rm -rf .venv

然后:

uv init

指定 Python:

uv python pin 3.12

把原来的依赖导入:

uv add -r requirements.txt

uv 官方已经支持直接从 requirements.txt 导入依赖。

最后:

uv sync

以后运行:

uv run python main.py

就可以了。


八、没有 requirements.txt 怎么办?

很多老项目就是:

pip install xxx
pip install xxx
pip install xxx

装了一堆,根本没记录。

这种情况下先在旧环境里:

pip freeze > requirements.txt

然后:

deactivate

再迁移:

rm -rf .venv

uv init

uv python pin 3.12

uv add -r requirements.txt

uv sync

不过这里有一个细节:

pip freeze 会把直接依赖和间接依赖全部导出来。

所以它适合迁移救急,但迁移完成以后最好再整理一下 pyproject.toml,只留下真正需要的直接依赖。


九、如果原来已经有 pyproject.toml

那就不要再:

uv init

因为 uv init 遇到已经存在的 pyproject.toml 会退出。

通常直接:

uv sync

然后:

uv run python main.py

即可逐渐把项目切到 uv 的工作流。


十、我现在会怎么选?

我的原则非常简单。

已经稳定运行的老项目

继续:

pyenv + venv

没必要为了工具升级而升级。

新的普通 Python 项目

直接:

uv

新的 AI 项目

我现在也会优先:

uv

尤其电脑里同时存在 Python 3.10、3.11、3.12,各种 Transformers、Whisper、TTS、PyTorch 项目时,uv 的体验会明显舒服很多。


最后

以前我们创建一个 Python 项目,脑子里要同时记住:

Python 从哪里来?
当前到底是什么版本?
venv 创建了吗?
activate 了吗?
pip 是哪个 pip?
requirements.txt 更新了吗?

uv 做的事情,本质上就是把这些东西重新收拢到一个项目工作流里。

以前:

pyenv local 3.12

python -m venv .venv

source .venv/bin/activate

pip install transformers

pip freeze > requirements.txt

python main.py

现在:

uv init

uv python pin 3.12

uv add transformers

uv run python main.py

少折腾环境,才能把时间真正花在代码和模型上。

如果你最近准备开始一个新的 Python / AI 项目,uv 很值得直接试一次。

最新文章

随机文章