在嵌入式 Python C++ 应用程序中导入 Numpy

Posted

技术标签:

【中文标题】在嵌入式 Python C++ 应用程序中导入 Numpy【英文标题】:Importing Numpy in embedded Python c++ application 【发布时间】:2016-10-29 15:35:27 【问题描述】:

我想让一个脚本通过设置运行时路径来从 c++ 嵌入式 python 运行时调用 numpy,以了解位于站点包中的 numpy 模块。

但是我得到了错误:

无法导入名称'multiarray'

从\Lib\site-packages\numpy\core__init_.py就行了

from . import multiarrray

我尝试将 os.path 设置为 xxx\numpy\core 但在导入语句期间似乎仍然找不到 multiarray.pyd 文件

我已阅读提出的类似问题,但似乎没有一个答案与我的案例相关。

我正在使用 Python 3.4.4(32 位)并使用***安装了 Numpy 1.11.1 numpy-1.11.1-cp34-none-win32.whl

python -m pip install numpy-1.11.1-cp34-none-win32.whl

已完成,没有任何错误。

似乎失败消息可能是 more general 而不仅仅是不完整的 PYTHONPATH?

还认为它可能比 Numpy 更广泛,因为从嵌入式环境导入的基于 ANY .pyd 的包会有这个问题?

任何帮助表示赞赏。

【问题讨论】:

【参考方案1】:

您是否确保所有 NumPy 包括:\numpy\core\include\numpy\ 在构建期间都存在?那是我唯一一次遇到这些类型的错误是如果构建找不到所有 NumPy 包含...虽然在嵌入期间我发现 numpy 整个目录(已经在您的构建机器上构建)必须在Py_SetPath(python35.lib;importlibs); 下的目录,假设 importlibs 是一个目录,里面有 NumPy 和你想要捆绑的任何其他东西。

【讨论】:

谢谢。是的,我做到了。我们已经设法让它在另一个系统上运行。唯一的区别是使用 python 3.4.1 而不是 3.4.4(python34.dll 用于 python 3.4.1)【参考方案2】:

似乎答案是安装 python 3.4.1 以匹配 3.4.1 的 python34.dll 版本。

【讨论】:

以上是关于在嵌入式 Python C++ 应用程序中导入 Numpy的主要内容,如果未能解决你的问题,请参考以下文章

如何在 boost::python 嵌入式 python 代码中导入模块?

如何在 C++ 程序将使用的 Python 脚本中导入 cpython 模块?

如何在 Python 中导入 tensorflow lite 解释器?

在 python 中导入 C++ 类?

如何使用 Java Native Interface 在 C++ 中导入 python 库 - Android Studio

ImportError:在 python 中导入 swigged c++-class 时未定义的符号