本文介绍了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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!