一、项目结构如下:

your_project/
├── match/
│   ├── __init__.py     # 空文件,声明为包
│   └── matcher.py        # 包含 compete_image 类
├── stitch/
│   ├── __init__.py     # 空文件,声明为包
│   └── total_stich_side.py  # 包含 TotalStich_side 类
└── multiReadStitchClassClasss_side.py  # 主模块,包含 multiDealImg 类

2、确保代码中的导入正确

stitch/total_stich_side.py

from match.matcher import compete_image  # 绝对导入

class TotalStich_side:
    def __init__(self):
        self.processor = compete_image

multiReadStitchClassClasss_side.py

from stitch.total_stich_side import TotalStich_side
from match.matcher import compete_image

class multiDealImg:
    def __init__(self):
        self.stitcher = TotalStich_side()
        self.image_processor = compete_image()

3. 编译步骤

步骤 1:编译底层模块 match/matcher.py

nuitka --module match/matcher.py \
       --output-dir=build/match \
       --include-package=match

  • --output-dir=build/match:将编译后的 .so 文件输出到 build/match。
  • --include-package=match:确保 match 包被包含。

步骤 2:编译中间模块 stitch/total_stich_side.py

nuitka --module stitch/total_stich_side.py \
       --output-dir=build/stitch \
       --include-package=stitch \
       --include-module=match.matcher  # 显式包含依赖的 match 模块

步骤 3:编译主模块 multiReadStitchClassClasss_side.py

nuitka --module multiReadStitchClassClasss_side.py \
       --output-dir=build \
       --include-package=match \
       --include-package=stitch \
       --follow-import-to=stitch.total_stich_side \
       --follow-import-to=match.matcher

4. 编译后目录结构

编译完成后,目录结构如下:

your_project/
└── build/
    ├── match/
    │   ├── match.so         # 或 .pyd(Windows)
    │   └── __init__.so      # 包的 __init__ 文件(自动生成)
    ├── stitch/
    │   ├── total_stich_side.so
    │   └── __init__.so
    └── multiReadStitchClassClasss_side.so

5. 测试程序

创建 test.py 并放置在 项目根目录(与 build 同级):

import sys
import os

# 添加编译后的模块路径
sys.path.extend([
    os.path.abspath("build"),          # 主模块路径
    os.path.abspath("build/match"),    # match 包路径
    os.path.abspath("build/stitch")    # stitch 包路径
])

from multiReadStitchClassClasss_side import multiDealImg

# 实例化并运行
processor = multiDealImg()
print("所有模块调用成功!")

6. 完整编译脚本

# 清理旧编译文件
rm -rf build/

# 编译 match 模块
nuitka --module match/matcher.py \
       --output-dir=build/match \
       --include-package=match

# 编译 stitch 模块
nuitka --module stitch/total_stich_side.py \
       --output-dir=build/stitch \
       --include-package=stitch \
       --include-module=match.matcher

# 编译主模块
nuitka --module multiReadStitchClassClasss_side.py \
       --output-dir=build \
       --include-package=match \
       --include-package=stitch \
       --follow-import-to=stitch.total_stich_side \
       --follow-import-to=match.matcher

更多推荐