本文介绍了Pxd相对cimport适用于Language_Level 2,但不适用于3的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

!当LANGUAGE_LEVEL=2时一切正常,但在LANGUAGE_LEVEL=3时无效

我必须用Cython包装c-库,我还想复制库的结构,以便更好地理解。所以我想用pxd文件创建单独的文件夹。

项目结构如下:

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
使用setup.py中的LANGUAGE_LEVEL=2,一切都会正常工作并进行编译。如果将其切换为3,则会出现错误:

无法导入LANGUAGE_LEVEL=3的pxd文件。如何修复?

推荐答案

若要使相对路径与LANGUAGE_LEVEL=3一起工作,我必须以以下方式将pxd导入到soecode.pyx中:

from .pxd_include.inc_file cimport *

from lib.wrapper.pxd_include.inc_file cimport *

最后一个符号与LANGUAGE_LEVEL=2兼容

这篇关于Pxd相对cimport适用于Language_Level 2,但不适用于3的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-13 15:20