我有一个Cython包装的C ++项目,Foo
带有一个python包装器,它暴露了一些类:py_foo.Bar()。该项目通常使用.pxd和.pyx文件定义,并使用标准`setup.py安装。方法
我有另一个Cython包装项目Baz
,它有一个带有构造函数的C ++类,该构造函数接受Foo.Bar
的实例。现在,我看到转换和类型错误,例如Bar
不是类型标识符。
跨项目可以import
/ cimport
吗?
答案 0 :(得分:0)
是的,当然。来自Cython documentation:
当您导入名为modulename的模块时,Cython编译器 搜索名为modulename.pxd的文件。它搜索此文件 沿着包含文件的路径(由-I命令行指定) 选项或cythonize()的include_path选项,以及 sys.path中。
使用package_data在setup.py脚本中安装.pxd文件 允许其他包从您的模块中导入项目作为 依赖性。
另外,每当你编译一个文件modulename.pyx时,相应的 首先在include中搜索定义文件modulename.pxd path(但不是sys.path),如果找到,则在之前处理 处理.pyx文件。
重要的部分是中段。在定义了Cython类的项目的setup.py
文件中,您需要在.pxd
项中列出package_data
个文件。例如,
# setup.py
setup(
name='my_cython_package',
packages=['example'],
package_data={'example': '*.pxd'}, # or wherever the files are
# ...etc...
)
这将导致它们与包的其余部分一起安装,然后您可以在另一个项目中从它们中进行安装。