You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The existing PySys_GetObject() function has two issues:
It returns a borrowed reference.
It ignores errors.
I propose adding new functions PySys_GetAttr() and PySys_GetAttrString() to get a sys module attribute which return a strong reference and don't ignore errors.
By the way, I'm also proposing to add PyImport_ImportModuleAttrString(mod_name, attr_name) which is similar: PyImport_ImportModuleAttrString("sys", "path") can be used to get sys.path for example. See issue #128911.
IMO it's still relevant to add PySys_GetAttrString(name) even if PyImport_ImportModuleAttrString(mod_name, attr_name) is added: PySys_GetAttrString(name) is faster, it doesn't have to go into the importlib machinery.
Isn't it a duplicate of #108512? That issue turned out to be more complex, because we have at least 4 different functions that implements this with different particularities.
Activity
pythongh-129367: Add PySys_GetAttr() function
vstinner commentedon Jan 27, 2025
An alternative would be to accept an object and add aStringfunction for theconst char*argument:I'm not sure if it's worth it to have an alternative withPyObject*.UPDATE: I added
PySys_GetAttrString(). @serhiy-storchaka conducted a code analysis in 2023 and found that we need a function which takes aPyObject* name.By the way, I'm also proposing to add
PyImport_ImportModuleAttrString(mod_name, attr_name)which is similar:PyImport_ImportModuleAttrString("sys", "path")can be used to getsys.pathfor example. See issue #128911.IMO it's still relevant to add
PySys_GetAttrString(name)even ifPyImport_ImportModuleAttrString(mod_name, attr_name)is added:PySys_GetAttrString(name)is faster, it doesn't have to go into theimportlibmachinery.vstinner commentedon Jan 27, 2025
See also #108512 "C API: Add a replacement for PySys_GetObject".
serhiy-storchaka commentedon Jan 28, 2025
Isn't it a duplicate of #108512? That issue turned out to be more complex, because we have at least 4 different functions that implements this with different particularities.
vstinner commentedon Jan 28, 2025
Right. I close my issue.