uv管理python环境时pip无法将包装到venv中

ChainPray 发布于 2 天前 21 次阅读 434 字 预计阅读时间: 2 分钟


引言

从之前搞mcp开始就一直都在用uv管理python项目的环境,以前添加包都是直接uv add的,但是uv add xxx会将包加到依赖里,最近想测试某个功能的时候希望不写到依赖所以就直接激活venv然后pip install xxx,结果运行代码的时候提示没有这个包,就很奇怪

探究

首先激活虚拟环境后运行pip --version

神奇的事发生了,这个pip竟然是系统的pip而不是虚拟环境的venv,所以pip install 装的包虚拟环境的python当然找不到

那么为什么pip会使用系统的pip,是环境变量的顺序问题么,此时笔者尝试了python -m pip --version,结果出乎意料,竟然没有这个模块

笔者到.venv/Scripts/下找了一下确实没有pip3.exe,这说明uv创建的虚拟环境并不包含pip,所以运行pip install时使用的是系统的pip并将包装在了系统的python环境里

解决

有两种方法,第一种兼容传统装包方式,第二种是官方推荐的兼容方式

1.uv add pip

因为uv创建的虚拟环境不包括pip包,所以我们直接uv add pip将pip包添加到项目环境中就好了

然后运行pip --version自然就没有问题了

2.uv pip install xxx

这是官方的兼容pip的命令,所有pip相关的指令加上uv前缀就能实现和传统pip一样的效果,不同的是:

  • uv pip 会在虚拟环境里操作包
  • uv pip install xxx会利用uv的并行安装功能,比pip install更快

深圳大学腾讯创新俱乐部的一名TICer,目前致力于成为全栈工程师
最后更新于 2025-10-31