如何使用uv以可编辑模式安装自定义Python包?
如何使用uv以可编辑模式安装自定义Python包?
嘿,我明白你遇到的问题了——用uv代替venv后,原本顺手的pip install -e .突然不管用,脚本找不到自己的src模块,确实挺闹心的。我来帮你捋清楚问题出在哪,以及怎么解决:
问题根源
你当前的pyproject.toml只配置了项目的基础信息,但没有告诉打包工具(比如setuptools)要从src目录里加载你的自定义包。所以哪怕你执行了uv run pip install -e .,实际上并没有把src下的模块真正安装到虚拟环境的可编辑路径里,脚本自然找不到这些模块。
另外,其实不用绕路调用pip,uv本身就支持可编辑安装,用它的原生命令更靠谱。
解决方案步骤
1. 修正pyproject.toml的包配置
打开你的pyproject.toml,在现有内容基础上,添加包的查找规则。有两种方式可选:
方式一:手动指定包名
如果你的src下的包结构明确(比如src.backend、src.utils),可以直接列出来:
[project] name = "test-repo" version = "0.1.0" description = "Add your description here" readme = "README.md" requires-python = ">=3.12" dependencies = [] # 新增:指定要包含的包 packages = ["src.backend", "src.utils"]
方式二:自动查找src下的所有包
如果你的src目录下有多个子包,想自动识别的话,推荐用setuptools的自动查找配置:
[project] name = "test-repo" version = "0.1.0" description = "Add your description here" readme = "README.md" requires-python = ">=3.12" dependencies = [] # 新增:让setuptools自动从src目录找包 [tool.setuptools.packages.find] where = ["src"]
2. 用uv进行可编辑安装
现在直接用uv的原生命令来安装本地包,二选一即可:
- 推荐方式(会把本地包添加到依赖列表):
uv add -e .
- 或者用uv的pip命令(和原有的pip逻辑更接近):
uv pip install -e .
3. 验证并运行脚本
安装完成后,你可以用uv pip list查看,应该能看到test-repo处于可编辑模式(标记为editable)。
之后再运行你的脚本:
uv run scripts/importmylist.py
这时候应该就能正常导入src.utils里的模块了!
额外提示
- 尽量用uv的原生命令代替
uv run pip ...,这样能更好地利用uv的缓存和环境管理优势,避免兼容性问题。 - 如果你的项目之前用
setup.py,其实uv也能兼容,但用pyproject.toml是现在Python打包的标准方式,更推荐。
备注:内容来源于stack exchange,提问作者ava_punksmash




