【问题标题】:What is the init function of a dynamic module in python?python中动态模块的init函数是什么?
【发布时间】:2013-06-04 02:18:05
【问题描述】:

我遇到了与其他两个问题相同的错误: 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')

我可以访问我的共享库的功能。

任何想法如何解决这个问题? 谢谢。

【问题讨论】:

    标签: python c dll ctype


    【解决方案1】:

    删除该行

    import playfaircrack
    

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

    或者,将playfaircrack.so 重命名为其他名称或将其移至其他目录。 如果您有两个具有相同模块名称的文件,Python 会感到困惑,即 playfaircrack.pyplayfaircrack.so 在同一目录中。 Python 尝试导入 playfaircrack.so,它不是有效的 Python 模块,然后才到达 playfaircrack.py

    【讨论】:

    • 好吧。我只是不能这样做,因为 playfair 是主程序,而 playfaircrack 是从主程序调用的模块。
    • 我从来没有遇到过这样的事情。有效。谢谢你:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-06
    • 2023-03-22
    • 1970-01-01
    • 2011-04-06
    • 2013-11-27
    • 2019-08-16
    相关资源
    最近更新 更多