python-3.x - pxd 相对 cimport 适用于 language_level 2 但不适用于 3
问题描述
!一切都适用于language_level = 2,但不适用于language_level = 3
我必须用 Cython 包装 c-library,并且我还想复制库的结构以便更好地理解。所以我想用 pxd 文件创建单独的文件夹。
项目结构如下:
设置.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 一起工作,我必须以这种方式在 somecode.pyx 中导入 pxd:
from .pxd_include.inc_file cimport *
或者
from lib.wrapper.pxd_include.inc_file cimport *
最后一个符号与 language_level=2 兼容
推荐阅读
- python - 使用python的json模块解析json请求
- r - 如何在ggplot2中为同一变量添加具有不同单位的第二个图例?
- laravel - 带有 vue js 和 laravel 的数据表
- python - Python 不执行使用 pip 安装的脚本
- linux - 将命令的输出用于另一个
- three.js - 具有多种材质的 Threejs 对象不适用于 RayCasting
- python - 将 django 与 aiohttp/asyncio 集成
- php - 在 AJAX 成功时显示成功消息
- java - 为什么 type param 不支持下限有什么具体的理由不支持
- java - 使地图不按任意顺序打印水果,而是按从最低到最高的顺序打印