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文件的单向生成文件,不要手动修改

相关推荐
大衛說2 天前
02 · 环境搭建:uv 包管理与现代 IDE
ide·uv
咋吃都不胖lyh6 天前
使用 uv 根据 requirements.txt 创建并应用虚拟环境
uv
欧叶冲冲冲8 天前
uv Python 环境管理笔记
笔记·python·uv
hqzing8 天前
几个主流的环境管理器(rustup、uv、nvm、fnm)已经在鸿蒙 PC 上可用
uv
vortex59 天前
从Conda到UV:Python项目依赖管理的现代演进
python·conda·uv
zoujiahui_201812 天前
Python 包与环境管理工具 uv
开发语言·python·uv
eagle_Annie12 天前
Python/torch/深度学习——Miniforge+uv环境安装
python·深度学习·uv
天天进步201513 天前
Pixelle-Video 源码解析 #4:快速启动流程:uv、Streamlit、ffmpeg 分别负责什么?
ffmpeg·uv
源码学社18 天前
DeerFlow Windows 本地运行教程(uv)
windows·uv·沙箱·deerflow·超级智能体·deerflow安装