【问题标题】:Parent module not loaded for Cython library未为 Cython 库加载父模块
【发布时间】:2018-03-14 21:50:25
【问题描述】:

我正在尝试 Cython,我写了一个小模块来编译。但是,当我编译它时,该库被写入一个子目录。从子目录中复制该库会中断导入并显示以下消息:

Traceback (most recent call last):
  File "driver.py", line 1, in <module>
    from sum_func import sum_func
  File "sum_func.pyx", line 1, in init cython_fail.sum_func
    from itertools import count
SystemError: Parent module 'sum_func' not loaded, cannot perform relative import

为什么导入中断,或者为什么首先将库写入子目录?

我将整个项目发布到GitHub,但模块非常简单:

# sum_func.pyx
from itertools import count

def sum_func(x):
    n = 0
    for i in count():
        n += i
        if n >= x:
            return -i

安装文件是教程的直接副本:

from distutils.core import setup
from Cython.Build import cythonize

setup(ext_modules=cythonize("sum_func.pyx"))

驱动程序只是调用库模块。

from sum_func import sum_func

print(sum_func(10))
print(sum_func(100))
print(sum_func(1000))

__init__.py 文件为空。

【问题讨论】:

    标签: python cython python-import


    【解决方案1】:

    在剪掉所有不相关的代码发布这个问题的过程中,我发现了问题:__init__.py 文件。如this questionthis one 中所述,__init__.py 文件将使 Cython 将库编译到子文件夹中。起初我没有找到这些问题,因为我正在寻找我的导入错误消息,而不是库被写入子文件夹的事实。

    没关系,因为我真的不需要__init__.py 文件。我认为它是从旧版本的项目中遗留下来的。删除它解决了这个问题。

    【讨论】:

      猜你喜欢
      • 2020-05-11
      • 1970-01-01
      • 1970-01-01
      • 2016-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      相关资源
      最近更新 更多