如何使用用Cython编译和链接多Python模块(或包)?(How to compile and

2019-06-26 08:03发布

我有几个Python模块(组织到包),这依赖于对方 。 例如

  • 模块1
  • 模块2:进口模块1
  • 单词数
  • 单词数:进口单词数,模块2,模块1

假设相关的接口来开发应用程序是在单词数和我想要生成Module4.so使用用Cython。 如果我用简单的方式进行,我得到一个扩展Module4.so我可以导入扩展依赖于模块1,单词数,单词数的Python源代码

有没有办法来编译,这样也模块1,单词数,单词数被编译并链接到单词数? 我想避免手工做的一切 ,例如,首先编译Module1.so然后改变进口报关的单词数,从而导入Module1.so而非Module1.py,然后编译单词数为Module2.so等等....

谢谢!

Answer 1:

编辑。 前两个选项是指用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.比较有效的编译-见这里 。

setup (
    name = 'MyProject',
    ext_modules = cythonize(["*.pyx"]),
)


文章来源: How to compile and link multiple python modules (or packages) using cython?