gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 15:22:14 25 4
gpt4 key购买 nike

我正在使用 boost::python 将一些 python 代码嵌入到应用程序中。我能够正确评估打印语句或其他表达式,但是当我尝试导入模块时,它没有导入并且应用程序正在退出。此外,嵌入式代码中的 globals() 函数调用也会产生运行时错误。

#include <boost/python.hpp>

using namespace boost;
using namespace boost::python;
using namespace boost::python::api;

int main(void) {
Py_Initialize();
object main_module = import("__main__");
object main_namespace = main_module.attr("__dict__");
main_namespace["urllib2"] = import("urllib2");

object ignored = exec(
"print 'time'\n", main_namespace);
}

在这里,我尝试使用 boost 导入函数导入 urllib2,这可以正常编译和运行,但是使用以下 exec 语句时,它会出错。

    object ignored = exec(
"print urllib2\n"
"print 'time'\n", main_namespace);

或者当我删除 boost 导入函数并从嵌入式代码中进行导入时,它会报错。我尝试使用 try: except: block 但这也不起作用。这是因为 C++ 应用程序无法找到 urllib2 py 模块的位置还是什么?有没有办法在尝试导入之前设置模块的路径?

这仅供内部使用,因此可以接受对路径进行一些硬编码。

编辑:更多信息:
这就是发生的事情。我做了一个 try .. catch 并在出现异常时调用 PyErr_Print() ,并且在有模块导入甚至函数调用时一直将此作为错误。错误信息:

Traceback (most recent call last):
File "<string>", line 1, in <module>
TypeError: 'NoneType' object does not support item assignment

谁能想到什么原因?

最佳答案

如果你还没有,你需要

import syssys.path.append("/home/user/whatever")

这解决了我几年前在嵌入 boost::python (Python v2.5) 时遇到的问题。

编辑:

翻阅旧代码。也许这可以解决问题:

Py_SetProgramName(argv[0]);Py_InitializeEx(0);

听起来不确定您是否真的需要 Py_SetProgramName(),但我依稀记得那里有些可疑的事情。

关于c++ - 如何在 boost::python 嵌入式 python 代码中导入模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/937884/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com