编译Cython文件时出错:在软件包中找不到pxd

安德烈·潘尼森

尝试从其他程序包导入pxd定义。

一个简单的示例,一个.pxd文件:

cdef inline void a():
    print "a"

b.pyx文件:

cimport a

def b():
    a.a()

到这里为止,一切正常,并且$ cython b.pyx可以正常工作。

如果我将a.pxd移至文件夹,例如libs/,则将b.pyx更改为:

from libs cimport a

def b():
    a.a()

然后我有错误:

$ cython b.pyx 

Error compiling Cython file:
------------------------------------------------------------
...
from libs cimport a
^
------------------------------------------------------------

b.pyx:1:0: 'a.pxd' not found

Error compiling Cython file:
------------------------------------------------------------
...
from libs cimport a
^
------------------------------------------------------------

b.pyx:1:0: 'libs/a.pxd' not found

但是libs / a.pxd在那里。从其他包中导入pxd定义的正确方法是什么?

算了吧

目录不是包,除非它包含__init__.py文件,即使该文件为空。因此,将一个空__init__.py文件添加libs目录中。


使用此目录结构,您的a.pxdb.pyxsetup.py以及script.py(如下),

% tree .
.
├── libs
│   ├── a.pxd
│   └── __init__.py
├── b.c
├── b.pyx
├── b.so
├── build
│   ├── temp.linux-x86_64-2.7
│   │   └── b.o
│   └── temp.linux-x86_64-3.4
│       └── b.o
├── script.py
├── setup.py

运行script.py作品:

% python setup.py build_ext --inplace
% python ./script.py 
a

setup.py:

# python setup.py build_ext --inplace

from distutils.core import setup
from Cython.Build import cythonize

setup(
    name='test',
    ext_modules=cythonize("b.pyx"),
)

script.py:

import b
b.b()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章