импорт Cython в типах расширений - PullRequest
0 голосов
/ 21 мая 2018

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

...