SWIG - 导入时运行Python代码

1 投票
1 回答
515 浏览
提问于 2025-04-16 03:45

我有一个C++模块,我用SWIG把它包装起来,这个模块使用了动态链接。由于Python处理导入函数的方式,我不得不在导入后直接运行命令dl.open(library, dl.RLTD_NOW, dl.RTLD_GLOBAL)。这样做是为了确保C++库的函数可以被它导入的其他库使用。

当然,这意味着在导入这个模块时需要三行代码,而不是一行。不过,其他的两行是固定的,不依赖于任何东西。也就是说,我想把以下几行:

import dl
import module
dl.open(library, dl.RTLD_NOW, dl.RTLD_GLOBAL)

简化成:

import module

我试着查阅SWIG的文档,想看看有没有办法在导入模块时运行代码,但我找不到相关的信息。这有可能做到吗?

谢谢。

1 个回答

2

试着把你的模块包裹起来。把你的C++代码做成一个“私有”的模块,可以叫它 module_ 或者其他名字,这样就能明确表示不应该导入它。然后,在 module.py(这个包裹模块)里:

import dl
from module_ import *
dl.open(library, dl.RTLD_NOW, dl.RTLD_GLOBAL)

撰写回答