GeezerVison is showing github.com — [C API] Add PyImport_ImportModuleAttr(mod_name, attr_name) helper function · Issue #128911 · python/cpython
[C API] Add PyImport_ImportModuleAttr(mod_name, attr_name) helper function #128911DescriptionFeature or enhancement
Proposal:
Python has an internal _PyImport_GetModuleAttrString(mod_name, attr_name) helper function to import a module and get a module attribute. I propose to make this function public to be able to use it outside Python.
UPDATE: Function renamed to PyImport_ImportModuleAttrString().
The function is convenient to use and is used by the following files in Python:
- Modules/arraymodule.c
- Modules/cjkcodecs/cjkcodecs.h
- Modules/_ctypes/callbacks.c
- Modules/_datetimemodule.c
- Modules/_decimal/_decimal.c
- Modules/_elementtree.c
- Modules/faulthandler.c
- Modules/_lsprof.c
- Modules/_operator.c
- Modules/_pickle.c
- Modules/posixmodule.c
- Modules/selectmodule.c
- Modules/_sqlite/connection.c
- Modules/_sqlite/module.c
- Modules/_sre/sre.c
- Modules/timemodule.c
- Modules/_zoneinfo.c
- Objects/abstract.c
- Objects/fileobject.c
- Objects/memoryobject.c
- Parser/pegen.c
- Parser/tokenizer/file_tokenizer.c
- Python/import.c
- Python/pylifecycle.c
Has this already been discussed elsewhere?
No response given
Links to previous discussion of this feature:
No response
Linked PRs
Activityencukou commented on Jan 16, 2025 IMO, the *String functions should generally have variants that take PyObject*.
So, if we add this we should also add PyImport_GetModuleAttr. Reacted by Erlend E. Aasland and Bénédikt Tran vstinner commented on Jan 16, 2025
So, if we add this we should also add PyImport_GetModuleAttr.
Ok, I added PyImport_GetModuleAttr() to my PR. malemburg commented on Jan 20, 2025 This sounds like a useful addition. The fact that the internal API is already used a lot in CPython is evidence enough 😄
And BTW: I like that you're starting to approach C API design from the perspective of a C programmer again.
Rich C APIs make it a joy programming against them, while minimalist APIs only result in others creating additional layers on top, which adds fragmentation, overall increased maintenance and loss of design control. 👍 changed the title [-][C API] Add PyImport_GetModuleAttrString(mod_name, attr_name) helper function[/-] [+][C API] Add PyImport_ImportModuleAttr(mod_name, attr_name) helper function[/+] on Jan 26, 2025vstinner commented on Jan 27, 2025 See also #129367 which proposes adding PySys_GetAttr().
MetadataMetadataDevelopmentNo branches or pull requestsIssue actions
|