从 MATLAB Compiler 应用程序调用 python 时无法调用 python 库

Posted

技术标签:

【中文标题】从 MATLAB Compiler 应用程序调用 python 时无法调用 python 库【英文标题】:Can't call python library when calling python from MATLAB Compiler application 【发布时间】:2017-11-08 08:53:56 【问题描述】:

我正在尝试从 MATLAB 编译的应用程序(使用 MATLAB 编译器)运行 python 脚本,但由于某种奇怪的原因,它无法从 scipy 中找到任何导入。当我尝试调用任何 scipy 方法时,它给了我这个错误

Python Error: ImportError: cannot import name sigtools

如果我直接从 Python 或 MATLAB 调用相同的代码,它就可以工作。但不是来自 MATLAB 编译器。

另外一件奇怪的事情是,从 MATLAB 中调用 python 看到的 python 路径是正确的,那是什么原因造成的呢?

编辑 我的蟒蛇路径

/usr/lib/python2.7
/usr/lib/python2.7/plat-x86_64-linux-gnu
/usr/lib/python2.7/lib-tk
/usr/lib/python2.7/lib-old
/usr/lib/python2.7/lib-dynload
/usr/local/lib/python2.7/dist-packages
/usr/lib/python2.7/dist-packages
/usr/lib/python2.7/dist-packages/PILcompat
/usr/lib/python2.7/dist-packages/gtk-2.0

我有文件sigtools.x86_64-linux-gnu.so

/usr/lib/python2.7/dist-packages/scipy/signal/

【问题讨论】:

信息不足。 sigtools在哪里,你是什么sys.path,你有没有安装sigtools等等等等。 我的 /usr/lib/python2.7/dist-packages/scipy/signal/ 目录中有这个文件 sigtools.x86_64-linux-gnu.so,所以我假设它是安装。另一个信息是,如果我直接从 python 调用相同的代码,它可以工作,如果我直接从 MATLAB 调用相同的代码,而不是它的 MATLAB 编译器版本。感谢您的帮助 如果它是您声称的位置,那么很明显sys.path 不会找到它。但是import scipy.signal.sigtools 应该可以工作。 我猜你在 Linux,你能在你的 Linux 主机中找到 sigtools.so 库吗? 它给了我这个漂亮的错误 Python 错误:ImportError: cannot import name sigtools =(,有没有办法直接给它我的 sigtools.so 的路径? 【参考方案1】:

我找到了问题的解决方案。 MATLAB运行环境提供的libstdc++版本太旧,无法导入一些python库。它应该libstdc++.so.6 version 3.4.21。我已将文件 libstdc++.so.6 替换为 v901/sys/os/glnxa64/ 中的更新版本 (3.4.21),这是 MATLAB 运行时目录。

【讨论】:

【参考方案2】:

回答您的问题。

直接到你机器中sigtools.solib所在的位置,做python -c "import sigtools",然后在你的文件中,就可以导入了。

【讨论】:

你能解释一下为什么这应该有效吗?您所做的只是导入文件以创建 .pyc 文件。这可以从任何目录完成,此外,代码已被声明为直接适用于 Python 和 Matlab,所以我看不出这将如何解决问题。 这在 MATLAB 中不起作用,我说它起作用,但是当我只使用 python 时,从 matlab 端它给了我 Python 错误:ImportError: cannot import name sigtools。似乎 MATLAB 在开始其 python 调用时弄乱了 python 路径中的某些内容。 检查 MATLAB 运行时目录(需要在没有 MATLAB 的情况下运行可执行文件),我发现了一些 python 文件,其中一个引起了我的注意。似乎是 python 代码查询 python 以获取初始化嵌入式解释器所需的信息。里面有一个叫LibraryFinder的类,可能里面有bug。

以上是关于从 MATLAB Compiler 应用程序调用 python 时无法调用 python 库的主要内容,如果未能解决你的问题,请参考以下文章

尝试运行 Matlab-Compiler-Runtime 应用程序时,Windows 7 中出现 SxS 错误

使用 MATLAB Compiler Runtime (MCR) 运行 Matlab 可执行文件

MATLAB 2014a (8.3) Compiler Runtime (MCR)

在设置 matlab 以访问外部 c++ 编译器时需要帮助

VB.NET 调用MATLAB的M文件(生成COM控件)

Matlab Compiler Runtime安装文件找不到Java Runtime Environment