Python依赖管理:uv与pip混用避坑( pyproject.toml/uv.lock/requirements.txt )

版本管理文件

python工程中有如下几个文件涉及到版本

pyproject.toml: 只管理顶层依赖,面相开发者

uv.lock:使用uv sync根据pyproject.toml生成&更新,如果版本不一致则会提示

requirements.txt:使用uv pip install -r requirements.txt生成的,是对pip的兼容

pyproject.toml这个文件优先级最高,如果uv.lock,或者venv环境不一致自动同步。或者使用uv sync和uv lock同步

uv和pip混合使用场景

问题场景:如果pyproject.tom pytest==9.1.0,生成requirements.txt,修改requirements.txt文件:pytest==9.1.1。这时候在一个新venv环境执行pip install -r requirements.txt文件,mytest版本就是9.1.1。再执行uv lock,uv sync后,那么pytest==9.1.0。这时候再次执行pip list,pytest==9.1.1。这个就矛盾了,这时候我理解版本pip list的pytest的版本应该被uv sync给降下来了,怎么还是9.1.1呢

# 查看虚拟路径

(dev2) D:\workspace3\py-vue-1\backend>echo %VIRTUAL_ENV%

D:\workspace3\py-vue-1\backend\dev2

# 查看pip使用的命令位置

(dev2) D:\workspace3\py-vue-1\backend>where pip

C:\Users\****\AppData\Local\Python\bin\pip.exe

可以看出直接用pip install -r requirements.txt 是安装到全局,而dev的实际依赖是9.1.0,不是requirements.txt文件设置的9.1.1。说明生效的uv sync命令。

# uv tree 显示的是默认.venv 环境下的依赖包,而非当前dev2 环境。

(dev3) D:\workspace3\py-vue-1\backend>uv tree

Resolved 16 packages in 5ms

backend v0.1.0

├── pydantic-core v2.48.0

│ └── typing-extensions v4.16.0

├── httpx v0.28.1 (group: dev)

│ ├── anyio v4.14.2

│ │ └── idna v3.18

│ ├── certifi v2026.7.22

│ ├── httpcore v1.0.9

│ │ ├── certifi v2026.7.22

│ │ └── h11 v0.16.0

│ └── idna v3.18

├── pytest v9.1.0 (group: dev)

│ ├── colorama v0.4.6

│ ├── iniconfig v2.3.0

│ ├── packaging v26.3

│ ├── pluggy v1.6.0

│ └── pygments v2.20.0

└── pytest-asyncio v1.4.0 (group: dev)

└── pytest v9.1.0 (*)

(*) Package tree already displayed

**# 使用pip install -r requirements.txt是不准确的,**需要用uv pip install -r requirements.txt,这样就可以安装到当前venv环境,查看使用uv pip list | findstr pytest查看。

dev3实际依赖:

经验结论

  1. uv和pip不要混合使用

  2. uv的一些命令,在多venv环境下,可能只找默认的.venv环境,需要注意

  3. uv.lock和requirements.txt作为pyproject.tmol文件的单向生成文件,不要手动修改

相关推荐
Luminbox紫创测控1 天前
太阳模拟器如何模拟真实太阳?积分球与氙灯光源技术解析
人工智能·测试工具·安全性测试·uv·测试标准
如何原谅奋力过但无声2 天前
现代化Python工具:uv、Ruff、Pyright、Rich(只讲重点版)
vscode·python·uv
10mAh3 天前
Python 环境彻底不乱:uv、pip、venv、Conda 怎么选?Windows 项目迁移与锁版本实战
python·pip·uv
二进制杯莫停5 天前
Pycharm直接使用uv管理项目
ide·pycharm·uv
Patrick在香港7 天前
Python依赖管理从踩坑到选型:pip/poetry/uv四种方案全面实测
开发语言·python·数据分析·scikit-learn·ai编程·pip·uv
百年੭ ᐕ)੭*⁾⁾8 天前
【uv切换国内镜像源】
uv
梦想三三10 天前
LangChain Output Parser 实战:从字符串到结构化数据的完整指南
android·服务器·langchain·github·uv
立心者010 天前
uv 现代化的虚拟环境管理工具
uv
寒水馨10 天前
Linux下载、安装uv-0.12.0(附安装包uv-x86_64-unknown-linux-gnu.tar.gz)
linux·python·项目管理·gnu·uv·包管理器·pip替代