【问题标题】:Can't call python library when calling python from MATLAB Compiler application从 MATLAB Compiler 应用程序调用 python 时无法调用 python 库
【发布时间】:2023-04-10 11:03:01
【问题描述】:

我正在尝试从 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 的路径?

标签: python matlab matlab-deployment matlab-compiler


【解决方案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。
    猜你喜欢
    • 2019-07-31
    • 2018-07-03
    • 2011-02-24
    • 2023-03-21
    • 1970-01-01
    • 2010-12-15
    • 2020-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多