gpt4 book ai didi

python - 如何使用 cython 编译和链接多个 python 模块(或包)?

转载 作者:太空狗 更新时间:2023-10-29 17:19:48 35 4
gpt4 key购买 nike

我有几个 python 模块(组织成包),它们相互依赖。例如

  • 模块 1
  • 模块 2:导入模块 1
  • 模块 3
  • 模块 4:导入模块 3、模块 2、模块 1

假设开发应用程序的相关接口(interface)在 Module4 中,我想使用 cython 生成一个 Module4.so。如果我以天真的方式继续,我会得到一个扩展 Module4.so,我可以导入它但是扩展依赖于 Module1、Module2、Module3 的 python 源代码

有没有一种编译方式,使得 Module1、Module2、Module3 也被编译并链接到 Module4?我想避免手动执行所有操作,例如先编译Module1.so 然后修改Module2 中的import 声明,导入Module1.so 而不是Module1.py,然后将Module2 编译成Module2.so 等等....

最佳答案

编辑。前两个选项引用了 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"]),
)

关于python - 如何使用 cython 编译和链接多个 python 模块(或包)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11507101/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com