Python动态模块的init函数是什么?

6
我看到了和这两个问题相同的错误信息: ImportError: dynamic module does not define init function, but it doesCython compiled C extension: ImportError: dynamic module does not define init function 但是它们的解决方案并不相同,也没有对我产生作用。
我正在尝试在我的Python程序中调用一个我用C语言写的共享库中的函数。
我像这样编译我的共享库:
gcc -shared -Wl,-soname,playfaircrack.so -o playfaircrack.so -fPIC playfaircrack.c scoreText.o

我创建了一个模块,在这个模块内,我使用以下代码加载了这个库:

cracker = ctypes.cdll.LoadLibrary('./playfaircrack.so')

但是当我运行代码时,我收到了以下错误信息:
Traceback (most recent call last):
  File "playfair.py", line 2, in <module>
    import playfaircrack
ImportError: dynamic module does not define init function (initplayfaircrack)

非常奇怪,因为如果我运行Python解释器并直接调用以下命令:
cracker = ctypes.cdll.LoadLibrary('./playfaircrack.so')

我可以访问我的共享库的函数。

有什么想法如何解决这个问题? 谢谢。

1个回答

3

删除该行

import playfaircrack

playfair.py 中,应该可以正常工作。

或者,将 playfaircrack.so 重命名为其他名称或将其移动到不同目录中。 如果您在同一目录中有两个具有相同模块名称的文件,即 playfaircrack.pyplayfaircrack.so,Python 会感到困惑。 Python 尝试导入 playfaircrack.so,但它不是有效的 Python 模块,并且在导入 playfaircrack.py 之前执行了此步骤。


好的。我做不到那个,因为Playfair是主程序,而Playfaircrack是从主程序调用的一个模块。 - Lucas Radaelli
从来没有发生过这样的事情。它起作用了。谢谢 :) - Lucas Radaelli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接