痛饮: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
我正在将 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