跨项目的Cython定义?

时间:2017-03-09 20:03:24

标签: python c++ cython

我有一个Cython包装的C ++项目,Foo带有一个python包装器,它暴露了一些类:py_foo.Bar()。该项目通常使用.pxd和.pyx文件定义,并使用标准`setup.py安装。方法

我有另一个Cython包装项目Baz,它有一个带有构造函数的C ++类,该构造函数接受Foo.Bar的实例。现在,我看到转换和类型错误,例如Bar不是类型标识符。

跨项目可以import / cimport吗?

1 个答案:

答案 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...
)

这将导致它们与包的其余部分一起安装,然后您可以在另一个项目中从它们中进行安装。