我有几个python模块(组织成包),相互依赖。 e.g。
让我们假设开发应用程序的相关接口在Module4中,我想使用 cython 生成Module4.so。 如果我以天真的方式继续,我会得到一个扩展Module4.so我可以导入但扩展依赖于Module1,Module2,Module3的python源代码。 / p>
是否有一种编译方式,以便Module1,Module2,Module3 编译并链接到Module4?我想避免手动执行所有操作,例如首先编译Module1.so然后在Module2中更改import声明,以便导入Module1.so而不是Module1.py,然后将Module2编译成Module2.so等等....
谢谢!
答案 0 :(得分:9)
编辑。前两个选项是指Cython的特定代码,我错过的是关于纯python模块的问题,因此选项3是解决方案。
有几个选择:
1。 请参阅“如何在程序包中创建模块的层次结构”: https://github.com/cython/cython/wiki/PackageHierarchy
2。 我更喜欢“包含”声明: 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。 更有效的编译 - 见here。
setup (
name = 'MyProject',
ext_modules = cythonize(["*.pyx"]),
)