我仍然很难搞清楚这一点。在名为PyFoo.pyx
的文件中使用这个简单的场景cdef extern from "Foo.h" namespace "Foo":
cdef cppclass C_FOO:
...........
cdef class PythonFoo:
C_FOO* pythonFoo
def __cinit__(self):
self.pythonFoo=new CFOO()
我也有一个PyFoo.PXD,它只是为了一个前向decl这样做,所以其他类可以看到它
cdef class PythonFoo:
C_FOO * pythonFoo
现在我有另一个需要PythonFoo.pythonFoo作为成员的类(在PyBar.pyx中)
cdef extern from "Bar.h" namespace "Bar":
cdef cppclass C_Bar:
ThisFunctionNeeds(C_FOO*)
cimport PythonFoo
cdef class PythonBar:
C_Bar* pythonBar
def __cinit__(self):
self.pythonBar=new C_Bar()
def SomeFunction(self,PythonFoo):
ThisFunctionNeeds(PythonFoo.pythonFoo)
无论我如何尝试使用它,我都会得到#Python;未定义的PythonFoo" (因为我猜pxd文件中没有 init )或者我必须手动包含Foo.pyx,使其成为Bar的成员。
有人可以告诉我(请举例说明)这应该如何运作?
谢谢。
编辑:PythonFoo和PythonBar在包中的单独模块中。
在Python测试程序中,我尝试使用此
import PythonFoo
import PythonBar
foo=PythonFoo()
bar=PythonBar()
bar.SomeFunction(foo)
这是我得到的#34;没有名为' PyFoo'
的模块答案 0 :(得分:0)
我能够找到它为什么不起作用...模块的实际目录没有放置,事实上,文件放在构建目录的更高目录中。
我用简单的
修复了它sys.path.append(' package_directory&#39)
编辑:我也发现了为什么这是...我在我的setup.py文件所在的目录中有一个__init__.py
,因此编译器认为该目录是该软件包的一部分。我删除了__init__.py
,我不再需要附加目录。