我有一个Cython包装C++项目,Foo
与暴露一些类的python包装:py_foo.Bar()。该项目通常使用.pxd和.pyx文件进行定义,并使用标准的setup.py进行安装。方法。跨项目的Cython定义?
我有另一个Cython包装项目Baz
,它有一个C++类,其构造函数采用Foo.Bar
的实例。现在,我看到转换和类型错误,例如Bar
不是类型标识符。
跨项目有可能import
/cimport
?
我有一个Cython包装C++项目,Foo
与暴露一些类的python包装:py_foo.Bar()。该项目通常使用.pxd和.pyx文件进行定义,并使用标准的setup.py进行安装。方法。跨项目的Cython定义?
我有另一个Cython包装项目Baz
,它有一个C++类,其构造函数采用Foo.Bar
的实例。现在,我看到转换和类型错误,例如Bar
不是类型标识符。
跨项目有可能import
/cimport
?
是的,绝对。从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。