Search code examples
pythoncglobal-variablespython-modulepython-c-api

Define a global in a Python module from a C API


I am developing a module for Python using a C API. How can I create a variable that is seen as global from Python?

For example, if my module is module, I want to create a variable g that does this job:

import module
print module.g

In particular, g is an integer.

Solution from Alex Martelli

PyObject *m = Py_InitModule("mymodule", mymoduleMethods);
PyObject *v = PyLong_FromLong((long) 23);

PyObject_SetAttrString(m, "g", v);
Py_DECREF(v);

Solution

  • You can use PyObject_SetAttrString in your module's initialization routine, with first argument o being (the cast to (PyObject*) of) your module, second argument attr_name being "g", third argument v being a variable

    PyObject *v = PyLong_FromLong((long) 23);
    

    (or whatever other value of course, 23 is just an example!-).

    Do remember to decref v afterwards.

    There are other ways, but this one is simple and general.