gpt4 book ai didi

cython - 编译Cython文件: pxd not found in package时出错

转载 作者:行者123 更新时间:2023-12-01 12:29:41 24 4
gpt4 key购买 nike

尝试从其他程序包导入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定义的正确方法是什么?

最佳答案

A directory is not a package unless it contains a __init__.py file,即使文件为空。因此,将一个空的__init__.py文件添加到libs目录。

使用此目录结构,您的a.pxdb.pyxsetup.pyscript.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()

关于cython - 编译Cython文件: pxd not found in package时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35512157/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com