Возможно ли импортировать другие модули в расширениях типа 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
, ошибка не возникнет, и будет получен ожидаемый вывод.