Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python C API: How to get PyRun_String with Py_eval_input to use imported modules?

PyRun_String("random.randint(1,10)", Py_eval_input, globals, globals);

returns error with:

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

earlier in the code, I did:

PyImport_ImportModule("random");

I guess this is not the way to get it work. What is the correct way? Thank you!

like image 593
David Avatar asked Oct 20 '25 23:10

David


1 Answers

PyImport_ImportModule returns the imported value. You need to save it in globals under the name random. In summary:

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

but don't forget to also check the result of the import in case it throws an exception.

like image 96
Duncan Avatar answered Oct 23 '25 14:10

Duncan