编译后的 Python3 模块产生错误“动态模块未定义模块导出功能”

时间:2021-05-03 05:19:01

标签: python-3.7 cythonize

我正在尝试编译我最近从 Python2 迁移到 Python3 的 Python 包。 在 Python3 中运行源代码时,它按预期工作,Python2 的源代码和编译版本也是如此,但是当我对 Python3 包进行 cythonize 和编译时,生成的二进制文件在导入某个模块时会抛出此错误:

dynamic module does not define module export function (PyInit_NKPD)

编辑: 当我关闭 Python 解释器时,再次打开它并导入它工作的相同模型。

有趣的是,当我将代码放在本地驱动器上时,它可以正常导入,但是当我将其放在我的服务器上并从那里导入时,我收到了上述错误。更糟糕的是,如果我等一会儿再试,有时它也可以从服务器中正常导入:

lockjaw:controller frank$ python3.7
Python 3.7.7 (v3.7.7:d7c567b08f, Mar 10 2020, 02:56:16)
[Clang 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import common
added to sys.path: /opt/ohufx/transfer/NUBRIDGE_COMPILE/osx/NKPD/src
trying to import model.NukepediaDB...
NukepediaDB imported
trying to import model.NKPD...
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "src/controller/common.py", line 15, in init controller.common
    import model.NKPD           # this does not import
ImportError: dynamic module does not define module export function (PyInit_NKPD)
>>> import common
added to sys.path: /opt/ohufx/transfer/NUBRIDGE_COMPILE/osx/NKPD/src
trying to import model.NukepediaDB...
trying to import model.NKPD...
NKPD imported

model.NKPD 似乎总是很好地导入,但 model.NKPD 似乎是绊脚石,即使这可能是一个红鲱鱼。它几乎表现为有时服务器连接在第一次导入后断开,但在这种情况下,其他化身(Python 2/源代码)也会抛出错误(更不用说我办公室中的很多其他事情会中断) . 我已将包缩减为三个模块,只有 import 和 print 语句,这些语句可以在 here 中找到(包括生成的 C++ 和二进制文件)。

结构很简单:

enter image description here

其中common 是我通过cd-ing 导入到src/controller 文件夹中进行测试的模块,打开Python3.7 并导入commonCommon 然后导入model.NukepediaDB 和model.NKPD,后者导致了问题。

我用这一行对 python 文件进行了 cythonized: /Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7 py2cpp.py

然后用这个编译: /Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7 setup.py build_ext --inplace

我很想知道为什么从服务器运行时导入有时会失败,因为我必须将此包分发给其他人并需要确保它可靠运行。

谢谢, 弗兰克

0 个答案:

没有答案
相关问题