如何不修改原安装目录为Python包svgpathtools新增扩展功能
结论
你的需求可实现,属于Python原生支持的使用场景,操作错误是问题的核心原因。
问题原因
你当前的错误来源于给自定义的svgpathtools目录添加了__init__.py文件:带__init__.py的目录会被Python识别为普通包,导入时Python找到第一个匹配的普通包就会停止搜索,因此不会再读取site-packages下的官方svgpathtools包内容。
正确实现方案
Python原生支持命名空间包特性,允许同一个顶层包名的内容拆分存储在多个不同路径下,按以下步骤操作即可实现需求:
- 删除自定义
svgpathtools目录下的__init__.py文件,不需要保留 - 确保自定义
svgpathtools的上级目录(这里为/home/simone/blender_learning/mesh-20210920)在Python模块搜索路径中,可在代码开头添加以下代码确认:
import sys # 把项目根目录加入搜索路径优先级最高的位置,避免被其他路径的同名包覆盖 sys.path.insert(0, "/home/simone/blender_learning/mesh-20210920")
- 完成后可同时导入官方原有功能和自定义扩展功能,导入示例:
# 导入官方原生功能 from svgpathtools import Path, Line import svgpathtools.bezier # 导入自定义扩展功能 import svgpathtools.distance from svgpathtools.distance import your_custom_method
不推荐该方案的常见弊端(供你验证参考)
- 若后续官方
svgpathtools包正式新增了distance模块,你本地的自定义模块会和官方模块冲突,默认优先加载你本地的版本 - 协作场景下其他开发者不清楚命名空间包的设计时,会出现本地安装官方包后仍找不到
distance模块的问题 - 代码打包分发时,自定义扩展的处理逻辑比普通独立模块更复杂
内容的提问来源于stack exchange,提问作者simone
相关产品推荐
相关产品推荐

