Cython pxd“cimport XXX as YYY”导致YYY.pxd公司“未找到”,即使“cimport XXX”有效

2024-05-13 01:23:50 发布

您现在位置:Python中文网/ 问答频道 /正文

标题几乎可以解释一切。在

我正试图用

cimport myMinExPkg.someModule.base as someModuleBase

然后使用“someModuleBase”别名

^{pr2}$

但这会导致错误

myMinExPkg/someModule/baseExt.pxd:7:5: 'someModuleBase.pxd' not found

我不知道为什么Cython要找这个pxd文件。如果我将别名重命名为与它工作的文件相同的名称,例如

cimport myMinExPkg.someModule.base as base

或者只是

cimport myMinExPkg.someModule.base

并恰当地使用它们。但这当然不是重点,在我看来,这两种方法都应该奏效。 我尝试过搜索SO和google,但只找到了一些我认为我没有犯的明显错误的解决方案。在

----------------------------->----------------------------

附加信息:

我的文件夹结构如下所示

├── myMinExPkg
│   ├── __init__.py
│   └── someModule
│       ├── base.c
│       ├── baseExt.c
│       ├── baseExt.pxd
│       ├── baseExt.pyx
│       ├── base.pxd
│       ├── base.pyx
│       ├── __init__.py
├── setup.py

在设置.py文件

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
from Cython.Build import cythonize

ecadef = ["-O1", "-Wunused-but-set-variable"]
iddef = ["/usr/local/include/", "./myMinExPkg","/usr/local/lib/"]


extensions = cythonize([
                        Extension('myMinExPkg.someModule.base',
                            sources=['myMinExPkg/someModule/base.pyx'],
                            extra_compile_args = ecadef,
                            include_dirs = iddef
                            ),
                        Extension('myMinExPkg.someModule.baseExt',
                            sources=['myMinExPkg/someModule/baseExt.pyx'],
                            extra_compile_args = ecadef,
                            include_dirs = iddef
                            )
                        ])


setup(name = 'myMinExPkg',
      packages = ['myMinExPkg', 'myMinExPkg.someModule'],
      package_data={'myMinExPkg': ['*.pxd'], 
                    'myMinExPkg.someModule': ['*.pxd']},
      cmdclass = {'build_ext': build_ext},
      ext_modules = extensions
     )

Tags: 文件frompyimportbasesetupextcython