在python3中显示本机导入尝试

时间:2013-07-27 10:44:27

标签: python python-3.x python-c-extension

我在C中编写了一个Python 3扩展模块,但似乎无法让Python导入它。

有没有办法让Python打印出它试图加载哪些共享库(.so在Linux上)以及它失败的原因?

可悲的是,我读过的所有文档都没有真正帮助,因为没有一个简洁地描述本机导入过程。

我尝试的是:

ctypes.CDLL("libmydep1.so")
ctypes.CDLL("libmydep2.so")

try:
    import my_main
    print("Load python")
except:
    ctypes.CDLL("libmylib.so")
    print("Load shared object")

始终打印Load shared object

libmylib.so包含python入口点,但加载它作为Python 3扩展名似乎不起作用,尽管加载为共享库。

修改

Python不遵守Linux惯例。因此,对于lib,您不要将其命名为libmylib.so,而是mylib.so

更糟糕的是,当它被命名为my_main时,它只会加载my_main.so。太烦人了。

1 个答案:

答案 0 :(得分:0)

尝试查看/proc/<pid>/maps目录。

或尝试在shell中使用lsof -p <PID>命令。

答案来源是this forum。 lsof man page。另请参阅this answer