在Ubuntu上从Python代码创建静态库

时间:2014-06-20 02:00:26

标签: python matlab ubuntu numpy

上下文:我想使用我编写的一些Python代码并从Matlab调用它(不是理想的设置,但这是我现在必须遵守的约束)。该代码使用numpy,scipy和pandas包。我尝试动态链接选项,并在matpy取得了一些成功。但是,要使用numpy,我需要覆盖Matlab自己的库(libgfortran,liblapack,libblas,libstdc ++),而是使用LD_PRELOAD指向系统的相同库版本。然后,如果下游的Matlab代码尝试使用这些库,那么它总是会出现段错误。事实证明这种可靠性较低,即使我现在解决了所有这些问题,随着下游Matlab代码的发展,也会出现不可预测的后果。

因此我决定将python代码编译成静态库 (包括来自numpy,scipy和pandas的所有依赖项),然后编写一个链接到此的Mex静态库。

在这种情况下,我希望您对以下问题有专家意见:

  1. 哪些是最可靠的工具,用于将python代码编译为STATIC lib,目的是将其链接到Mex?我现在只关注Ubuntu 12.04平台。我查看了Cython,Pyrex,pyInstaller,py2exe,cx_freeze - 很棒的工具,但是作为python的新手并没有将python编译成除自动化.pyc以外的任何东西,我需要你帮助做出这个选择。

    < / LI>
  2. 在这个设置中我应该注意哪些陷阱/可能出错的事情? 我指的是(custom.py + numpy + scipy + pandas) - &gt; static lib ---&gt; Mex - &gt;从Matlab调用设置。

  3. 非常感谢!

1 个答案:

答案 0 :(得分:2)

我建议您使用套接字在Mex和Python之间进行通信,而不是直接调用Python代码。操作系统将使用内存到内存(或映射技巧)进行套接字传输,因此速度很快。一旦你有了单独的可执行文件,你应该能够摆脱这个共享的库地狱。

如果您仍然需要Python作为单个可执行文件,请考虑pyinstallercx_freeze