如何允许嵌入式Python解释器中调用的脚本导入第三方库?

时间:2012-05-29 12:46:03

标签: c++ python

我已经使用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。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

当我使用python C API导入numpy时,我遇到了完全相同的问题。某些.pyd模块无法导入。当我改为boost.python时,没有问题。也许你也可以试试boost.python。 Here是示例:

答案 1 :(得分:0)

原来是DLL不匹配错误。代码所看到的numpy版本与我的嵌入解释器的C ++代码的编译路径略有不同。

解决方案是针对我在我的应用程序中使用的Python发行版重新编译numpy,但使用完全相同的编译器设置。这清除了问题。