2017-03-09 27 views
2

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

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

跨项目有可能import/cimport

回答

0

是的,绝对。从Cython documentation

当你cimport一个名为ModuleName模块中,用Cython编译 搜索名为modulename.pxd文件。它沿包含文件的路径搜索此文件 (由-I命令行 选项或cythonize())的include_path选项指定)以及 sys.path。

使用package_data在您的setup.py脚本中安装.pxd文件 允许其他软件包将您模块中的项目作为 依赖项进行导入。

而且,只要你编译一个文件modulename.pyx,相应 定义文件modulename.pxd首先搜索用于沿包括 路径(但不sys.path中),并且如果发现,则前 处理来处理.pyx文件。

重要的部分是中段。在您定义了Cython类的项目的setup.py文件中,您需要列出package_data项中的.pxd文件。例如,

# setup.py 
setup(
    name='my_cython_package', 
    packages=['example'], 
    package_data={'example': '*.pxd'}, # or wherever the files are 
    # ...etc... 
) 

这将导致它们与包装的其余部分一起安装,然后你可以从他们在其他项目cimport。