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

如何修改setup.py以包含Swig绑定流程并创建依赖共享库的Pip包

解决Swig绑定的Pip打包问题

你不需要手动复制共享对象文件,应该让setuptools自动处理Swig绑定的生成、编译和打包流程。以下是修改后的setup.py,包含完整的Swig集成逻辑:

import setuptools
from setuptools import Extension
import sys

# 定义Swig扩展模块
example_ext = Extension(
    name='_example',  # 需与Swig生成的.py文件中导入的共享库名称一致
    sources=[
        'src/example.i',  # Swig接口文件的实际路径
        'src/example.cpp'  # 你的C++源文件,多文件可继续添加至列表
    ],
    swig_opts=['-c++', '-py3'],  # 指定处理C++代码,生成Python3兼容绑定
    extra_compile_args=['-std=c++11'] if sys.platform != 'win32' else ['/std:c++11'],  # 适配不同系统的C++编译标准
)

setuptools.setup(
    name='example',
    version='0.0.1',
    author='me',
    description='brief description',
    keywords='example, pypi, package',
    long_description=open('README.md').read(),
    long_description_content_type='text/markdown',
    url='repo.com',
    project_urls={
        'Documentation': 'docs.com',
        'Bug Reports':'repo/issues.com',
        'Source Code': 'repo.com',
    },
    # 保留Python API文件的位置配置(如果你的.py文件确实在Python目录下)
    package_dir={'': 'Python'},
    packages=setuptools.find_packages(where='Python'),
    ext_modules=[example_ext],  # 核心:将扩展模块纳入打包流程
    classifiers=[
        'Development Status :: 5 - Production/Stable',
        'Intended Audience :: Developers',
        'Topic :: Software Development :: Build Tools',
        'Programming Language :: Python :: 3',
        'Programming Language :: Python :: 3.6',
        'Programming Language :: Python :: 3.7',
        'Programming Language :: Python :: 3.8',
        'Programming Language :: Python :: 3.9',
        'Programming Language :: Python :: 3.10',
        'Programming Language :: Python :: 3 :: Only',
        'Operating System :: POSIX :: Linux',
        'Operating System :: MacOS :: MacOS X',
        'Operating System :: Microsoft :: Windows',
    ],
    python_requires='>=3.6',
)

关键修改说明:

  • 引入Extension类:用来定义C扩展模块,将Swig接口文件和C源文件纳入自动编译流程。
  • 添加swig_opts参数:-c++指定Swig处理C++代码,-py3确保生成Python3兼容的绑定代码。
  • 新增ext_modules参数:把定义好的扩展模块传给setup函数,setuptools会自动完成Swig绑定生成、编译共享对象、打包进Pip包的全流程。
  • 移除package_data配置:不再需要手动指定.so文件路径,编译后的共享对象会被自动识别并打包。

额外注意事项:

  1. 编译环境需提前安装Swig(可在项目requirements中添加swig,或要求用户手动安装)。
  2. 根据项目实际路径调整sources列表中的文件路径。
  3. 如果有多个C++源文件,全部添加至sources列表即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 21:40:24