引言
从之前搞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更快

Comments NOTHING