扩展类型中的cython导入

时间:2018-05-20 22:13:56

标签: python cython python-import

是否可以在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中的导入行,则不会发生错误,并且会生成预期的输出。

0 个答案:

没有答案