我有几个python模块(组织成包),它们 相互依赖 。例如
假设开发应用程序的相关接口在Module4中,而我想使用 cython 生成 Module4.so 。如果我以幼稚的方式进行操作,则会得到扩展Module4.so,但可以导入该扩展, 但 该扩展 依赖于 Module1,Module2,Module3 的python源代码 。
有没有一种方法可以编译Module1,Module2,Module3 并链接 到Module4?我想 避免手动完成所有操作 ,例如,首先编译Module1.so,然后在Module2中更改导入声明,以便导入Module1.so而不是Module1.py,然后将Module2编译为Module2.so,依此类推。
谢谢!
编辑。前两个选项涉及Cython的特定代码,我想念的是关于纯python模块的问题,因此选项3是解决方案。
有几种选择:
1.参见以下“如何在包中创建模块层次结构”:https : //github.com/cython/cython/wiki/PackageHierarchy
2.我更喜欢“ include”语句:http : //docs.cython.org/src/userguide/language_basics.html#the-include- statement我有很多.pyx文件,它们都包含在main.pyx中,全部集中在一个名称空间中。结果是一个很大的模块:http : //code.google.com/p/cefpython/source/browse/cefpython.pyx
3.您可以使用安装程序通过添加多个“扩展”来一次编译所有模块:
setup( cmdclass = {'build_ext': build_ext}, ext_modules = [Extension("example", sourcefiles), Extension("example2", sourcefiles2), Extension("example3", sourcefiles3)] )
4.更有效的编译-请参见此处。
setup ( name = 'MyProject', ext_modules = cythonize(["*.pyx"]), )