Python C API:如何使用Py_eval_input的PyRun_String导入模块?

4 投票
1 回答
1845 浏览
提问于 2025-04-16 18:27
PyRun_String("random.randint(1,10)", Py_eval_input, globals, globals);

返回错误,内容是:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
NameError: name 'random' is not defined

在代码的前面,我做了:

PyImport_ImportModule("random");

我想这不是让它工作的正确方法。那正确的方法是什么呢?谢谢!

1 个回答

3

PyImport_ImportModule 是一个用来导入模块的函数,它会返回你导入的内容。你需要把这个内容保存在 globals 里,命名为 random。简单来说就是:

PyMapping_SetItemString(globals, "random", PyImport_ImportModule("random"));

不过别忘了检查导入的结果,以防它出现错误。

撰写回答