我已经使用Python C API将Python 2.7.2解释器嵌入到C ++应用程序中。
在目标计算机上,我不能保证Python安装,所以我试图让嵌入式解释器查看我的应用程序所在的文件夹。所以在应用程序中,我有Python的Lib,Libs和DLLs文件夹。
在代码中,我使用Py_SetPythonHome()和Py_SetProgramName()来加载Python,并允许安装标准库。
我正在使用的一个测试脚本有:
import csv
import numpy
csv系列现在很好。在\ libs目录中,我可以看到site-packages \ numpy。但是这条线上的进口崩溃了。我正在使用numpy 1.6.1。
我想我可能需要更改模块搜索路径 - 这是正确的,实现这一目标的最佳方法是什么,以允许我的脚本可以访问像numpy这样的第三方库?您可以假设我可以生成numpy目录的绝对路径,如果这会有所帮助。
编辑:更多信息 - 我设法生成回溯,我得到的错误是在\ numpy \ core \ _ init _。py当它尝试“import multiarray”行时“出错”ImportError:DLL加载失败:找不到指定的模块“。检查目录,我找到一个multiarray.pyd。有什么想法吗?
答案 0 :(得分:0)
当我使用python C API导入numpy时,我遇到了完全相同的问题。某些.pyd模块无法导入。当我改为boost.python时,没有问题。也许你也可以试试boost.python。 Here是示例:
答案 1 :(得分:0)
原来是DLL不匹配错误。代码所看到的numpy版本与我的嵌入解释器的C ++代码的编译路径略有不同。
解决方案是针对我在我的应用程序中使用的Python发行版重新编译numpy,但使用完全相同的编译器设置。这清除了问题。