You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何通过自定义模块为svgpathtools的已有类添加扩展功能?

解决方案

你遇到的两个报错本质是自定义的包名和第三方官方库svgpathtools重名,导致导入逻辑混乱,按以下步骤调整即可:

1. 调整目录结构

首先修改自定义模块的顶层目录名,避免和官方库重名,示例结构如下:

├── svgpathtools_extensions  # 改个不冲突的名字即可
│   ├── __init__.py
│   └── distance.py

2. 调整模块代码

distance.py 代码

不需要修改业务逻辑,目录名不冲突后import svgpathtools会自动导入pip安装的官方库:

import svgpathtools
import numpy

def complex_distance(a, b):
    return ((a.real - b.real) ** 2 + (a.imag - b.imag) ** 2) ** 0.5

def foo(path_a, path_b):
    d = 0
    for t in range(0, 101, 1):
        d += complex_distance(path_a.point(t / 100), path_b.point(t / 100))
    return d / 100

# 给官方Path类注入扩展方法
setattr(svgpathtools.Path, 'foo', foo)

init.py 可选配置

如果希望用户只要导入扩展包就自动完成方法注入,不需要单独导入distance模块,可以在__init__.py中添加:

from . import distance

3. 验证使用

把svgpathtools_extensions目录放到Python可识别的导入路径下(比如项目根目录、site-packages目录),执行以下命令验证:

python3 -c "import svgpathtools_extensions.distance; import svgpathtools; p = svgpathtools.Path('M0 0 L10 10'); print(p.foo(p))"

正常会输出0.0,代表方法注入成功。

原报错原因说明

  • 保留自定义svgpathtools/__init__.py报错:Python导入时优先匹配当前目录下和官方库同名的自定义包,你的自定义包中没有定义/导入Path类,因此抛出AttributeError
  • 删除__init__.py报错:Python不会将没有__init__.py的目录识别为合法包,因此找不到svgpathtools.distance模块,抛出ModuleNotFoundError

内容的提问来源于stack exchange,提问作者simone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 05:12:03