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

使用setuptools与SWIG构建Windows平台Python 3.6.4模块

在Windows上用setuptools构建Python 3.6.4的SWIG模块

我帮你把setup.py补全并优化,完美适配你的需求——自动处理所有SWIG接口文件,生成并打包所需的.py、.pyd和.pyc文件。下面是完整的实现:

from setuptools import setup, Extension
from setuptools.command.build_ext import build_ext
from pathlib import Path
import shutil

# 自动收集当前目录下所有SWIG接口文件
swig_files = list(Path('.').glob('*.i'))

# 生成扩展模块和对应Python模块的配置
extensions = []
py_modules = []
for swig_file in swig_files:
    module_name = swig_file.stem
    # 扩展模块命名为_xxx(遵循SWIG默认生成规则,和自动生成的.py文件对应)
    ext = Extension(
        f'_{module_name}',
        sources=[str(swig_file)],
        swig_opts=['-python']  # 明确告诉SWIG生成Python绑定代码
    )
    extensions.append(ext)
    py_modules.append(module_name)

# 自定义build_ext命令,确保SWIG生成的.py文件被正确纳入安装包
class CustomBuildExt(build_ext):
    def run(self):
        # 先执行默认的扩展编译流程(生成.pyd和临时的.py文件)
        super().run()
        
        # 将SWIG生成的.py文件从临时目录复制到最终构建目录
        for ext in self.extensions:
            module_name = ext.name[1:]  # 去掉扩展名前面的下划线
            target_py = Path(self.build_lib) / f'{module_name}.py'
            temp_py = Path(self.build_temp) / f'{module_name}.py'
            if temp_py.exists() and not target_py.exists():
                shutil.copyfile(temp_py, target_py)

setup(
    name='your-swig-module',  # 替换成你的模块名称
    version='0.1.0',
    py_modules=py_modules,
    ext_modules=extensions,
    cmdclass={'build_ext': CustomBuildExt},
    # 配置安装时自动生成.pyc文件
    options={
        'install': {'optimize': 1},  # 1生成普通pyc,2生成优化版pyc,0不生成
    },
)

关键部分拆解

  • 自动收集SWIG文件:用Path.glob批量扫描.i文件,不用手动逐个添加,后续新增接口文件也不用改代码。
  • Extension配置:每个接口对应一个命名为_模块名的扩展,和SWIG自动生成的.py文件的调用逻辑匹配,避免导入错误。
  • 自定义build_ext:默认情况下SWIG生成的.py文件会留在临时构建目录,这个自定义命令会把它复制到最终目录,确保安装时能一起打包。
  • py_modules指定:告诉setuptools要安装这些SWIG生成的.py文件,不会遗漏。
  • optimize选项:设置为1会让setuptools在安装时自动编译生成.pyc文件,满足你的需求。

Windows平台必看注意事项

  1. 编译器环境:Python 3.6.4在Windows上必须用Visual Studio 2015(或对应的Build Tools)编译扩展。安装后要打开对应位数的命令提示符(比如x64 Native Tools Command Prompt for VS 2015)再执行安装命令,否则会编译失败。
  2. SWIG安装:确保SWIG已安装,且其可执行文件路径已加入系统PATH,这样setuptools能找到swig.exe处理接口文件。
  3. 执行安装:在命令提示符里运行:
    python setup.py install
    
    要是想生成可分发的wheel包,就运行:
    python setup.py bdist_wheel
    

安装完成后,去Python的site-packages目录检查,你会看到对应的.py、.pyd文件,以及__pycache__目录下的.pyc文件,说明构建成功了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:20:36