有两个与进口有关的问题可能与cython有关,也可能与cython无关?
我有以下简化文件来重新创建问题。所有文件都在同一目录中。.pyx文件已成功编译为*.so
、*.pyc
和*.c
文件。
设置.py:
from distutils.core import setup
from Cython.Build import cythonize
setup(
ext_modules=cythonize("*.pyx"),
)
cy1.pyx:(cython)
cdef int timestwo(int x):
return x * 2
周期1.pxd:
cdef int timestwo(int x)
cy3.py:(普通python)
def tripleit(x):
return x*3
开始时间:
from cy1 import timestwo
print str(timestwo(5))
给出错误:importTerror:无法导入名称times2
如果我改成:
开始时间:
import pyximport; pyximport.install()
import cy1
print str(cy1.timestwo(5))
它告诉我:attributeRor:“module”对象没有属性“timestwo”
如果我将cython全部取出,并尝试使用cy3.py中的普通python调用:
开始时间:
import cy3
print str(cy3.tripeleit(3))
我得到:attributeRor:“module”对象没有属性“tripleIt”
最后,如果我这样做了:
开始时间:
from cy3 import tripleit
print str(tripeleit(3))
我得到:
NameError: name 'tripeleit' is not defined
抱歉,如果这是超基本的,但我似乎无法搞清楚。
关于第二个错误,您有一个错误:
应该是:
问题是在
go.py
中:您正在尝试导入定义为
cdef
的函数。要向Python公开此函数,必须使用
def
或cpdef
。可能您必须保留为cdef
,以便从其他Cython文件中cimport
,从而证明您还拥有pxd
文件的原因。在这种情况下,我通常有一个类似C
的函数和一个可以从Python调用的包装器。在这种情况下,您的
cy1.pyx
文件看起来像:以及您的
cy1.pxd
文件:这样您就可以
cimport
只使用ctimestwo
函数。相关问题 更多 >
编程相关推荐