是否可以在cython扩展类型中导入其他模块?我尝试了一个我不理解的错误,经过一些网络搜索后无法修复。
见这个最小的例子:
.
├── a.cpython-35m-x86_64-linux-gnu.so
├── main.py
├── setup.py
└── src
├── a.pyx
├── __init__.py
我在python3 setup.py build_ext --inplace
文件夹中运行src
以启动构建过程。
__init__.py
模块为空。
a.pyx :
import sys # This import is the problem, doesn't matter what I import
cdef class A:
cdef int my
def __init__(self):
self.my = 2
def foo(self):
print(str(self.my))
setup.py :
from Cython.Build import cythonize
from setuptools import find_packages, Extension, setup
setup(
name='cy_pack',
ext_modules=cythonize([Extension("a", ["src/a.pyx"])]),
packages=find_packages()
)
main.py :
import a
ob = a.A()
ob.foo()
当我尝试运行main.py
时,我收到此错误:
Traceback (most recent call last):
File "/home/simon/Documents/cythonTest/main.py", line 1, in <module>
import a
File "src/a.pyx", line 2, in init src.a (src/a.c:983)
SystemError: Parent module '' not loaded, cannot perform relative import
问题是,如果我删除a.pyx
中的导入行,则不会发生错误,并且会生成预期的输出。