使用SWIG生成Python扩展时如何设置源码文件编码
方案1:使用SWIG内置编码参数(推荐)
直接在swig命令中添加-coding utf-8选项即可,SWIG会自动将编码声明放在生成py文件的首行,是官方支持的标准实现方式。
完整命令如下:
swig -python -coding utf-8 my_ext.i
无需额外在接口文件中添加%pythonbegin相关配置。
方案2:关闭SWIG默认头部横幅
如果你需要自定义更多首行内容,可在执行swig命令时添加-noswigbanner参数关闭SWIG自动生成的头部注释横幅,你之前写的%pythonbegin片段内容就会自动成为文件首行:
- 修改swig执行命令:
swig -python -noswigbanner my_ext.i - 接口文件中保留你原有配置即可:
%pythonbegin %{ # -*- coding: utf-8 %}
方案3:构建流程自动插入声明
如果你既需要保留SWIG的头部横幅,又要求编码声明位于首行,可在setup.py中添加自定义构建钩子,在扩展构建完成后自动修改生成的py文件:
from distutils.command.build_ext import build_ext as _build_ext import os class build_ext(_build_ext): def run(self): super().run() # 替换为你生成的py文件实际路径 py_file_path = os.path.join(self.build_lib, "my_ext.py") if os.path.exists(py_file_path): with open(py_file_path, "r+", encoding="utf-8") as f: old_content = f.read() f.seek(0) f.write("# -*- coding: utf-8 -*-\n" + old_content) setup( # 原有其他配置保持不变 cmdclass = {"build_ext": build_ext} )
内容的提问来源于stack exchange,提问作者Balaïtous
相关产品推荐
相关产品推荐

