如何允许通过嵌入式 Python 解释器中调用的脚本导入第三方库
How to allow 3rd-party libraries to be imported by scripts called in embedded Python interpreter?
我使用 Python C API 将 Python 2.7.2 解释器嵌入到C++应用程序中。
在目标机器上,我不能保证安装Python,所以我试图让嵌入式解释器查看我的应用程序所在的文件夹。 所以在应用程序目录中,我有Python的Lib,Libs和DLLs文件夹。
在代码中,我使用了Py_SetPythonHome()和Py_SetProgramName()来加载Python,并允许安装标准库。
我正在使用的测试脚本之一具有:
import csv
import numpy
csv 行现在很好。 在 \libs 目录中,我可以看到站点包umpy。 但是导入在这条线上崩溃了。 我为此使用 numpy 1.6.1。
我想我可能需要更改模块搜索路径 - 这是对的吗,实现此目的的最佳方法是什么,以允许我的脚本访问像 numpy 这样的第三方库? 您可以假设我可以生成指向 numpy 目录的绝对路径,如果这有帮助的话。
编辑:更多信息 - 我已经设法产生了回溯,我得到的错误是在umpy\core\_init_.py中,当它尝试"导入多数组"行时,错误为"导入错误:DLL加载失败:找不到指定的模块"。 检查目录,我找到了一个multiarray.pyd。 有什么想法吗?
使用 python C API 导入 numpy 时,我和你有完全相同的问题。某些 .pyd 模块无法导入。当我改用boost.python时,没有问题。也许你也可以试试boost.python。下面是示例:
事实证明,这是一个DLL不匹配错误。 代码正在查找的numpy版本的编译路线与嵌入解释器的C++代码的编译路线略有不同。
解决方案是针对我在应用程序中使用的 Python 发行版重新编译 numpy,但使用完全相同的编译器设置。 这解决了问题。
- 在从Qt调用的Python脚本中导入OpenCV崩溃
- 用户控制从 c++ 到 java 脚本的 Webassembly 访问调用
- bash脚本在使用popen()时不返回代码以调用C ++程序
- 在 Qt C++ 中并行调用脚本
- 从C++调用 Python 脚本以持续流式传输数据
- 从带有参数的C++程序中调用shell脚本
- 获取对源文件中特定函数的所有调用并生成其他文件(使用 C、C++预处理器或脚本)
- 从 LUA 脚本调用类函数C++
- 如何从C代码调用PowerShell脚本
- 使用来自 SOCI 的匿名 PL SQL 块调用 PLsql 脚本
- 如何避免在Qt项目中调用Python脚本时出现分段错误
- 使用正在调用TCL脚本的CPP代码的GCC编译
- OpenCV 函数在由C++线程程序调用的 Python 脚本本身调用时锁定
- 在QT Creator中使用C++调用Python脚本
- 在C++中嵌入Python:在Python脚本中导入模块在一个函数调用过程中有效,但在另一个调用过程中无效
- 如何在 Linux 中从 CPP 代码内部调用脚本
- RCPP 的基准测试或 RCaller 的 C++ 或调用 R 脚本的 Java
- 从shell调用脚本和使用system()有什么区别
- 当我从c++程序调用脚本时,我得到语法错误
- 当我调用脚本并使脚本保持运行时,C++应用程序在退出时挂起