从 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.so
lib所在的位置,做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 可执行文件