未为 Cython 库加载父模块
Parent module not loaded for Cython library
我正在试用 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
文件是空的。
在修剪掉所有与post这个问题无关的代码的过程中,我发现了问题:__init__.py
文件。如 this question and 中所述,__init__.py
文件将使 Cython 将库编译到子文件夹中。一开始我没有发现那些问题,因为我在寻找我的导入错误消息,而不是库被写入子文件夹的事实。
没关系,因为我并不真的需要 __init__.py
文件。我认为它是该项目的旧版本遗留下来的。删除它解决了问题。
我正在试用 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
文件是空的。
在修剪掉所有与post这个问题无关的代码的过程中,我发现了问题:__init__.py
文件。如 this question and __init__.py
文件将使 Cython 将库编译到子文件夹中。一开始我没有发现那些问题,因为我在寻找我的导入错误消息,而不是库被写入子文件夹的事实。
没关系,因为我并不真的需要 __init__.py
文件。我认为它是该项目的旧版本遗留下来的。删除它解决了问题。