如何使Python模块可共享?

如何使Python模块可共享?,python,linux,python-2.7,cython,cythonize,Python,Linux,Python 2.7,Cython,Cythonize,我们有一个基于python的模块,我们希望通过创建一个linux系统可以理解的编译副本(即.so文件),将其分发给我们的客户 我们已经评估了cython,它很容易做到这一点,但我们看到它创建的.so文件与.pyx/.py文件一样多,但我们希望为完整的包创建一个uber.so文件。从某种意义上说,如果我们将来向其他模块添加依赖项,uber编译的文件应该具有所有依赖项,我们希望能够巧妙地做到这一点 有什么建议吗?我们如何才能干净利落地做到这一点?可以创建可重新分发的python模块包 例如: cxf

我们有一个基于python的模块,我们希望通过创建一个linux系统可以理解的编译副本(即.so文件),将其分发给我们的客户

我们已经评估了cython,它很容易做到这一点,但我们看到它创建的.so文件与.pyx/.py文件一样多,但我们希望为完整的包创建一个uber.so文件。从某种意义上说,如果我们将来向其他模块添加依赖项,uber编译的文件应该具有所有依赖项,我们希望能够巧妙地做到这一点

有什么建议吗?我们如何才能干净利落地做到这一点?

可以创建可重新分发的python模块包

例如:

cxfreeze my\u script\u使用\u my\u python\u module.py--target dir dist

python包是编译的还是普通的python并不真正相关。与此相关的是,您的客户需要有兼容的python版本以及兼容的libc/gcc才能运行它

因此,为了将python模块分发给第三方,单个
.So
将无法与所有人兼容。永远


cx\u freeze
捆绑了所需的python解释器版本和python包,因此没有依赖关系。它也是跨平台的。

是否可以将它们编译为静态库(.a)而不是动态库(最终产品仍然是动态的)?Python只允许每个
有一个模块。因此
。我建议将您的库打包为一个轮子。那么
文件的数量就少了。他们只需要处理一个文件。创建一个uber编译文件背后的想法是减少内存占用,我正在检查在python程序中导入任何第三方模块,并且运行这些程序的多个实例时线性地消耗内存,我想创建。因此,成比例的设置大小(PSS)可以随着同一程序执行次数的增加而减少。如果创建一个轮子可以做到这一点,我很想知道我们如何做到这一点?@kabanus我如何能够将.a库导入任何python程序,我知道我可以将任何基于.so的python模块导入py程序。@VardanGupta您可以将.a文件合并到
。so
文件和
gcc
。另外,另一个选择是在编译之前通过一些脚本将代码合并到一个脚本中。完全同意您的观点。因此永远不会与每个客户兼容,但更重要的是,我们正在努力提高内存消耗。关于一些统计数据,我们对python repo有依赖性,它依赖于导入等基本用法,占用50MB,我们希望运行1000多个类似的进程,如果我们能够使分发共享,我们肯定会提高并发执行。关于cxfreeze,如果它能帮助我们的话,我们一定会尝试一下!非常感谢您所编写的python代码占用了50MB的内存。它主要是python解释器。因此,50MB将作为共享进程内存在解释器中的所有线程之间以及Linux上的进程之间共享。无论哪种方式,cx\u freeze都将绑定给它运行的python脚本。如果它启动1000个进程,它们将共享相同的python发行版。