我有一个程序,它包含一个主脚本.py和一些自定义模块作为.pyd。所有文件都位于同一目录中。主脚本使用import module
语法导入模块,从我的IDE中它一切正常。但是当我cx冻结程序时,我收到错误dynamic module does not define init function
。
更奇怪的是,quavers
模块是第二个导入,因此第一个模块可以工作,但是这个模块会中断。两者在内容方面没有太大差异(每个内容只有几个功能)。我之前也使用自定义pyd模块创建了冻结程序,之前从未遇到过。
什么是init
函数以及为什么cx-freeze需要它?它有什么作用?我是否需要在导入的每个模块中创建一个init函数?
答案 0 :(得分:1)
我弄明白了这个问题。我有两个版本的同一模块quavers1
和quavers2
。我首先使用nuitka将它们编译为pyd,然后在cx冻结时将创建的pyd文件从quavers1
重命名为quavers
。重新命名后nuitka编译是导致问题的原因。如果我重命名,在nuitka中编译,然后冻结,它可以正常工作。