作为一名长期使用Anaconda的Python开发者,我最近彻底转向了uv这个新兴的包管理工具。这个决定并非一时冲动,而是经过深思熟虑后的选择。Anaconda虽然功能强大,但随着项目复杂度增加,它的臃肿和缓慢开始成为开发效率的瓶颈。
uv最吸引我的是它的"项目即环境"理念。传统Anaconda工作流中,我需要手动创建环境、激活环境、安装依赖,最后还要在PyCharm中配置解释器路径。这个过程不仅繁琐,还容易出错。而uv将这些步骤自动化,让我能专注于代码本身而非环境管理。
Anaconda采用集中式环境管理:
~/anaconda3/envs/)conda activate命令uv则采用项目本地化管理:
.venv文件夹Anaconda使用environment.yml:
uv使用pyproject.toml:
提示:uv的依赖解析速度比conda快3-5倍,特别是在大型项目中差异更明显。
在安装uv前,请确保:
powershell复制# 以管理员身份打开PowerShell
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
bash复制curl -LsSf https://astral.sh/uv/install.sh | sh
安装完成后,重启终端并验证:
bash复制uv --version
# 应输出类似:uv 0.1.0
首次使用建议配置:
bash复制uv config --set auto-update true
uv config --set python.auto-install true
bash复制mkdir my_project && cd my_project
uv init
这会生成:
pyproject.toml(项目配置).gitignore(默认过滤虚拟环境)README.md(项目说明模板)bash复制uv add numpy pandas # 添加依赖
uv remove pandas # 移除依赖
uv sync # 同步环境
bash复制uv python install 3.11 # 安装指定版本
uv python pin 3.11 # 固定项目版本
python复制# /// script
# dependencies = [
# "matplotlib",
# "scipy"
# ]
# ///
import matplotlib.pyplot as plt
运行:
bash复制uv run script.py # 自动安装临时依赖
bash复制uvx black . # 临时运行代码格式化
uvx ruff check . # 临时运行代码检查
bash复制conda env export > environment.yml
bash复制uv init
bash复制uv add -r environment.yml
.venv/bin/python(Unix)或.venv/Scripts/python.exe(Windows)注意:首次同步可能需要几分钟,取决于项目依赖数量
问题:uv run找不到正确Python版本
解决:
bash复制uv python pin 3.11
uv sync
问题:依赖冲突
解决:
bash复制uv pip compile --upgrade
uv sync
bash复制uv config --set pip.index-url https://pypi.tuna.tsinghua.edu.cn/simple
bash复制uv pip install -j8 -r requirements.txt
bash复制uv cache clean
经过数月的实际使用,我总结了uv的几大优势:
特别是对于需要频繁创建、切换环境的开发者,uv能节省大量时间。实测在大型数据分析项目中,环境准备时间从原来的15分钟缩短到2分钟以内。
利用uv的灵活特性,可以创建开发和生产两套依赖:
toml复制[project]
dependencies = [
"numpy",
"pandas"
]
[project.optional-dependencies]
dev = [
"pytest",
"black"
]
安装开发依赖:
bash复制uv add -e dev
在CI/CD中利用uv的确定性:
yaml复制# .github/workflows/test.yml
steps:
- uses: actions/checkout@v4
- run: curl -LsSf https://astral.sh/uv/install.sh | sh
- run: uv sync
- run: uv run pytest
uv默认缓存位置:
~/.cache/uv%LOCALAPPDATA%\uv\cache可以调整缓存策略:
bash复制uv config --set cache.ttl 30d
作为同时使用过Anaconda和uv的开发者,我的实际体验对比如下:
环境创建:
依赖安装:
跨机器同步:
多版本管理:
对于考虑从Anaconda迁移到uv的开发者,建议:
我在迁移过程中最大的收获是:uv让Python项目真正实现了"开箱即用"。新成员加入项目时,只需uv sync就能获得完全一致的环境,彻底解决了"在我机器上能运行"的问题。