来自.pth文件的Python模块将覆盖可编辑安装
解决方案
我有一个被多位用户共享的“中心” Python 3.12虚拟环境(venv)。
我想为开发建立这个环境的本地克隆。为了显得聪明,我只搭建了一个空的环境,然后在它的site-packages目录里放了一个.pth文件,指向中心环境的site-packages目录。
这工作得很顺利,我的本地环境就能导入中心环境的所有包,而无需复制它们。只有当我更新某个包时,新的版本会安装到本地并取代来自中心环境的版本,因为后者的父文件夹在sys.path中排在后面。
然而,这似乎对可编辑安装不起作用:如果我使用
pip install -e <path to package repo>
在本地环境中,pip构建、安装并正确地将该包列为可编辑状态。但当我在Python会话中尝试导入它时,总是得到来自中心环境的那个。
可能的原因是什么?有没有解决方案?
解决方案
感谢各位的评论,如若问题描述不够详细,敬请见谅!
我在方法中找到了答案——在我的情况下,setuptools 会创建可编辑安装,并把它们提供给导入机制:
它创建了一个 EditableFinder,随后被追加到 sys.meta_path。这样,可编辑的包将始终被同名的其他项遮蔽,这些项可以通过 PathFinder 找到,PathFinder 会搜索 sys.path,并且默认在任何 EditableFinder 之前被调用。
由于我觉得这个行为有点不直观,我在这里提出了修改建议:在这里
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。