【发布时间】:2018-09-16 08:04:05
【问题描述】:
我们有一个基于 python 的模块,我们希望通过创建一个 linux 系统可以理解的编译副本(即 .so 文件)来分发给我们的客户
我们已经评估了 cython,它很容易做到这一点,但我们看到它创建的 .so 文件与 .pyx/.py 文件一样多,但我们想制作一个 uber .so 文件来完成整个包。我们希望巧妙地做到这一点,如果我们将来向其他模块添加依赖项,uber 编译的文件应该具有所有依赖项。
任何建议,我们如何才能巧妙地做到这一点?
【问题讨论】:
-
是否可以将它们编译为静态库 (.a) 而不是动态库(最终产品仍将是动态的)?
-
Python 只允许每个
.so一个模块。我建议将你的库打包成一个轮子。那么.so文件的数量就意味着更少了。他们只需要处理一个文件。 -
创建一个 uber 编译文件背后的想法是减少内存占用,我正在检查在 python 程序中导入任何 3rd 方模块并运行此类程序的多个实例线性消耗内存,我想创建 .so因此,随着同一程序执行次数的增加,比例集大小(PSS)可以减小。如果创建一个轮子可以做到这一点,我很想知道我们如何做到这一点?
-
@kabanus 如何将 .a 库导入任何 python 程序,我知道我可以将任何基于 .so 的 python 模块导入 py 程序。
-
@VardanGupta 您可以将 .a 文件合并到带有
gcc的.so文件。此外,另一种选择是在编译之前通过一些脚本将您的代码合并为一个。
标签: python linux python-2.7 cython cythonize