2016-02-19 51 views
0

試圖從其他包中導入pxd定義。編譯Cython文件時出錯:包中未找到pxd

簡單的例子,a.pxd文件:

cdef inline void a(): 
    print "a" 

b.pyx文件:

cimport a 

def b(): 
    a.a() 

直到這裏,一切都很好,和$ cython b.pyx作品。

如果我a.pxd移動到文件夾,如a/,然後我改變b.pyx到:

from a cimport a 

def b(): 
    a.a() 

,然後我有錯誤:

$ cython b.pyx 

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

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

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

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

但A/A .pxd在那裏。 什麼是從其他軟件包導入pxd定義的正確方法?

回答

1

A directory is not a package unless it contains a __init__.py file,即使該文件爲空。因此,將一個空的__init__.py文件添加到a目錄。


使用該目錄結構,你a.pxdb.pyxsetup.pyscript.py(下同),

% tree . 
. 
├── a 
│   ├── 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() 
相關問題