?!
准确说不是弃用,而是将pip换成了uv。uv是一个用Rust开发的Python包管理器,和pip相比,它有几个显著优势:
构建速度更快 :Nick在多个项目中测试后发现,使用uv安装依赖的速度几乎是pip的10倍。
无需虚拟环境 :uv允许你直接在非root用户下安装依赖,而不是依赖venv隔离环境,这对容器化部署尤其友好。
自动生成锁文件 :只需在pyproject.toml
里写下最顶层依赖,uv会自动生成uv.lock
,而且能保持依赖树的完整性,比pip freeze更可控。
博主Nick Janetakis演示了切换步骤:
删除原来的requirements.txt
,改用pyproject.toml
声明依赖;
Dockerfile中通过COPY指令引入uv的二进制文件,并替换依赖安装脚本;
设置相关环境变量,避免在容器中生成虚拟环境,同时预编译字节码;
替换安装命令,用uv sync --frozen --no-install-project
保持锁定版本;
可用脚本快捷运行uv add/remove
、检查依赖更新等操作。
博主Nick的Flask和Django两个项目,都已经完成了从pip到uv的切换,并成功跑起来,切换过程非常顺滑。