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

使用SWIG与Setuptools构建Python包时的扩展打包异常问题

问题修复方案

你的核心问题是setup.py存在几处配置错误,导致setuptools无法自动触发SWIG处理,也没正确打包扩展模块。以下是分步修复步骤:

1. 修正setup.py配置

恢复注释掉的Extension配置(这是让setuptools自动调用SWIG的关键,setuptools会识别.i文件并自动生成包装代码),同时修正setup函数的错误参数:

from setuptools import setup, Extension, find_packages    

# 启用该配置,让setuptools自动处理SWIG
my_module = Extension('_MyModule',
                     sources=['myPackage/my_interface.i'],
                     swig_opts=["-c++", "-ImyPackage"],
                     library_dirs=['myPackage'],
                     libraries=["my_lib"],
                     include_dirs=['myPackage']
                    )
    
setup(
    name='MyPackage',
    version='1.0',
    author="",
    description="SWIG wrapper",
    ext_modules=[my_module],
    # 自动发现所有Python包,替代手动拼写的packages参数
    packages=find_packages(),
    # 打包需要的非Python文件
    package_data={"myPackage": ["my_dll.dll", "my_lib.lib"]},
    # 确保非Python文件被正确安装
    include_package_data=True
)

关键修正点:

  • 用.i文件作为Extension的sources:setuptools会自动执行swig -c++ -python -ImyPackage myPackage/my_interface.i,生成C++包装代码和对应的Python模块。
  • 移除错误的py_modules = ["myModule.myModule"]:该路径不符合SWIG生成的模块结构,find_packages()会自动包含生成的Python模块。
  • 修正package=["myPackage"]为packages=find_packages():原参数拼写错误(应为复数packages),find_packages()能自动识别包结构更可靠。

2. 配置MANIFEST.in

确保源码分发包包含所有依赖文件,在MANIFEST.in中添加:

include myPackage/*.i
include myPackage/*.hpp
include myPackage/*.dll
include myPackage/*.lib

这能避免python -m build生成源码包时遗漏关键文件。

3. 确保pyproject.toml配置正确

pyproject.toml需要指定构建依赖,保证setuptools和wheel可用:

[build-system]
requires = ["setuptools>=61.0", "wheel"]
build-backend = "setuptools.build_meta"

4. 执行构建

直接运行以下命令,setuptools会自动完成SWIG处理、扩展编译和打包:

python -m build

5. 验证安装

用pip安装生成的包测试:

pip install dist/MyPackage-1.0-py3-none-any.whl

之后在Python中导入验证:

import myPackage
# 根据你的SWIG接口定义调用对应功能即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 19:55:11