痛饮:3.0.12 -> 4.0.2 迁移:.so 导入

swig: 3.0.12 -> 4.0.2 migration: .so import

我正在将 python2+swig-3.0.12 代码库迁移到 python3+swig-4.0.2。

目录布局为:

base_dir/_xxx.cpython-37m-x86_64-linux-gnu.so
base_dir/xxx/__init__.py
base_dir/xxx/xxx.py

PYTHONPATH 指向 base-dir。 _xxx.cpython-37m-x86_64-linux-gnu.so 的导入失败,因为它被这个生成的代码片段限制在本地目录。

# Import the low-level C/C++ module                                                                                                                                                                                                           
if __package__ or "." in __name__:
    from . import _xxx
else:
    import _xxx

如果我在这两种情况下都使用纯 'import _xxx',导入将会成功。我真的不想改变目录布局,有没有办法解决这个问题?

Swig 团队在 github 上提供了答案:https://github.com/swig/swig/issues/2260#issuecomment-1100915731

解决方法在接口文件自定义,使用

%module(package="mypackage", moduleimport="import $module") foo
vs
%module(package="mypackage") foo