Skip to content

[C API] Add PyImport_ImportModuleAttr(mod_name, attr_name) helper function #128911

Description

@vstinner

Feature 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

Activity

  1. added a commit that references this issue on Jan 16, 2025
  2. encukou commented on Jan 16, 2025

    @encukou
    Member

    IMO, the *String functions should generally have variants that take PyObject*.
    So, if we add this we should also add PyImport_GetModuleAttr.

  3. added 2 commits that reference this issue on Jan 16, 2025
  4. vstinner commented on Jan 16, 2025

    @vstinner
    MemberAuthor

    So, if we add this we should also add PyImport_GetModuleAttr.

    Ok, I added PyImport_GetModuleAttr() to my PR.

  5. added 4 commits that reference this issue on Jan 17, 2025
  6. added a commit that references this issue on Jan 18, 2025
  7. added a commit that references this issue on Jan 19, 2025
  8. malemburg commented on Jan 20, 2025

    @malemburg
    Member

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

  9. added a commit that references this issue on Jan 21, 2025
  10. 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, 2025
  11. vstinner commented on Jan 27, 2025

    @vstinner
    MemberAuthor

    See also #129367 which proposes adding PySys_GetAttr().

  12. added a commit that references this issue on Jan 30, 2025
  13. added 2 commits that reference this issue on Feb 4, 2025
  14. added 2 commits that reference this issue on Feb 7, 2025
  15. added a commit that references this issue on Feb 8, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions