我还是很难弄明白。以这个简单的场景为例。。在一个名为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
现在我又上了一节课PyBar.pyx文件)这需要Python。Python作为成员
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)
无论我如何尝试cimport它,我都会得到“pythonfoonotdefined”(因为pxd文件中没有init),或者我必须手动包含Foo.pyx文件,使其成为酒吧的一员。你知道吗
有人能告诉我(请举例)这是如何工作的吗?你知道吗
谢谢你。你知道吗
编辑:PythonFoo和PythonBar在包的不同模块中。你知道吗
在Python测试程序中,我尝试使用
import PythonFoo
import PythonBar
foo=PythonFoo()
bar=PythonBar()
bar.SomeFunction(foo)
在这里我得到了“没有名为‘PyFoo’的模块”
我找到了为什么它不起作用。。。模块的实际目录没有被放置,事实上,文件被放置在构建目录的一个更高的目录中。你知道吗
我用一个简单的
你知道吗系统路径附加('package\u directory')
编辑:我也发现了为什么。。。我的
__init__.py
和我的设置.py因此编译器认为目录是包的一部分。我删除了__init__.py
,不再需要附加目录。你知道吗相关问题 更多 >
编程相关推荐