Search code examples
pythonpython-c-api

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!


Solution

  • 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.