pxd относительный cimport работает для language_level 2, но не для 3 - PullRequest
1 голос
/ 13 мая 2019

! Все работает с language_level = 2, но не с language_level = 3

Мне нужно обернуть c-библиотеку Cython, и я также хочу скопировать структуру библиотеки для лучшего понимания.Поэтому я хотел бы создать отдельную папку с файлами pxd.

Структура проекта следующая:

enter image description here

setup.py:

from setuptools import setup, Extension
from Cython.Build import cythonize
from Cython.Distutils import build_ext
from pathlib import Path

setup_file_directory = Path(__file__).resolve().parent
NAME = 'example'
SRC_DIR = "lib"
PACKAGES = [SRC_DIR]

ext = Extension(name=SRC_DIR + ".wrapper.some_code",
                sources=[SRC_DIR + "/wrapper/some_code.pyx"]
                )

EXTENSIONS = [ext]

if __name__ == "__main__":
    setup(
        packages=PACKAGES,
        zip_safe=False,
        name=NAME,
        cmdclass={"build_ext": build_ext},
        ext_modules=cythonize(EXTENSIONS, language_level=3),
    )

some_code.pyx:

from pxd_include.inc_file cimport *

cdef custom_int return_int(custom_int input_int):
    print(input_int)

inc_file.pxd:

ctypedef int custom_int

с language_level = 2 в setup.py все работает и компилируется.Если я переключаю его на 3, я получаю сообщение об ошибке:

enter image description here

Это вызвано невозможностью импортировать файл pxd с language_level = 3.Как это исправить?

1 Ответ

0 голосов
/ 14 мая 2019

Чтобы относительный путь работал с language_level = 3, мне пришлось импортировать pxd в somecode.pyx следующим образом:

from .pxd_include.inc_file cimport *

или

from lib.wrapper.pxd_include.inc_file cimport *

Последняя запись совместима с language_level= 2

...