Modulobjekte

PyTypeObject PyModule_Type
Teil der Stable ABI.

Diese Instanz von PyTypeObject repräsentiert den Python-Modultyp. Dies wird Python-Programmen als types.ModuleType bereitgestellt.

int PyModule_Check(PyObject *p)

Gibt wahr zurück, wenn p ein Modulobjekt oder eine Unterklasse eines Modulobjekts ist. Diese Funktion ist immer erfolgreich.

int PyModule_CheckExact(PyObject *p)

Gibt wahr zurück, wenn p ein Modulobjekt, aber keine Unterklasse von PyModule_Type ist. Diese Funktion ist immer erfolgreich.

PyObject *PyModule_NewObject(PyObject *name)
Rückgabewert: Neue Referenz. Teil der Stable ABI seit Version 3.7.

Gibt ein neues Modulobjekt zurück, dessen module.__name__ auf name gesetzt ist. Die Attribute __name__, __doc__, __package__ und __loader__ des Moduls werden gefüllt (alle außer __name__ sind auf None gesetzt). Der Aufrufer ist dafür verantwortlich, ein __file__-Attribut zu setzen.

Gibt NULL mit einer gesetzten Ausnahme im Fehlerfall zurück.

Hinzugefügt in Version 3.3.

Geändert in Version 3.4: __package__ und __loader__ sind jetzt auf None gesetzt.

PyObject *PyModule_New(const char *name)
Rückgabewert: Neue Referenz. Teil der Stabilen ABI.

Ähnlich wie PyModule_NewObject(), aber der Name ist eine UTF-8-kodierte Zeichenkette statt eines Unicode-Objekts.

PyObject *PyModule_GetDict(PyObject *module)
Rückgabewert: Ausgeliehene Referenz. Teil der Stable ABI.

Gibt das Dictionary-Objekt zurück, das den Namensraum von module implementiert; dieses Objekt ist identisch mit dem Attribut __dict__ des Modulobjekts. Wenn module kein Modulobjekt (oder eine Unterklasse eines Modulobjekts) ist, wird SystemError ausgelöst und NULL zurückgegeben.

Es wird empfohlen, dass Erweiterungen andere PyModule_* und PyObject_* Funktionen verwenden, anstatt direkt auf das __dict__ eines Moduls zuzugreifen.

PyObject *PyModule_GetNameObject(PyObject *module)
Rückgabewert: Neue Referenz. Teil der Stable ABI seit Version 3.7.

Gibt den Wert von __name__ von module zurück. Wenn das Modul keines bereitstellt oder es keine Zeichenkette ist, wird SystemError ausgelöst und NULL zurückgegeben.

Hinzugefügt in Version 3.3.

const char *PyModule_GetName(PyObject *module)
Teil der Stable ABI.

Ähnlich wie PyModule_GetNameObject(), gibt aber den Namen, kodiert als 'utf-8', zurück.

void *PyModule_GetState(PyObject *module)
Teil der Stable ABI.

Gibt den "Zustand" des Moduls zurück, d.h. einen Zeiger auf den Speicherblock, der bei der Erstellung des Moduls allokiert wurde, oder NULL. Siehe PyModuleDef.m_size.

PyModuleDef *PyModule_GetDef(PyObject *module)
Teil der Stable ABI.

Gibt einen Zeiger auf die PyModuleDef-Struktur zurück, aus der das Modul erstellt wurde, oder NULL, wenn das Modul nicht aus einer Definition erstellt wurde.

PyObject *PyModule_GetFilenameObject(PyObject *module)
Rückgabewert: Neue Referenz. Teil der Stabilen ABI.

Gibt den Namen der Datei zurück, aus der module geladen wurde, indem das Attribut __file__ von module verwendet wird. Wenn dies nicht definiert ist oder keine Zeichenkette ist, wird SystemError ausgelöst und NULL zurückgegeben; andernfalls wird eine Referenz auf ein Unicode-Objekt zurückgegeben.

Hinzugefügt in Version 3.2.

const char *PyModule_GetFilename(PyObject *module)
Teil der Stable ABI.

Ähnlich wie PyModule_GetFilenameObject(), gibt aber den Dateinamen, kodiert als 'utf-8', zurück.

Veraltet seit Version 3.2: PyModule_GetFilename() löst UnicodeEncodeError bei nicht kodierbaren Dateinamen aus, verwenden Sie stattdessen PyModule_GetFilenameObject().

Moduldefinitionen

Die Funktionen im vorherigen Abschnitt arbeiten mit beliebigen Modulobjekten, einschließlich Modulen, die aus Python-Code importiert wurden.

Module, die mithilfe der C-API definiert werden, verwenden typischerweise eine Moduldefinition, PyModuleDef – eine statisch allokierte, konstante "Beschreibung", wie ein Modul erstellt werden soll.

Die Definition wird normalerweise verwendet, um das "Hauptmodulobjekt" einer Erweiterung zu definieren (siehe Definition von Erweiterungsmodulen für Details). Sie wird auch verwendet, um Erweiterungsmodule dynamisch erstellen.

Im Gegensatz zu PyModule_New() ermöglicht die Definition die Verwaltung des Modulzustands – eines Speicherbereichs, der zusammen mit dem Modulobjekt allokiert und gelöscht wird. Im Gegensatz zu den Python-Attributen des Moduls können Python-Code keine Daten ersetzen oder löschen, die im Modulzustand gespeichert sind.

type PyModuleDef
Teil der Stable ABI (einschließlich aller Member).

Die Struktur der Moduldefinition, die alle Informationen enthält, die zur Erstellung eines Modulobjekts benötigt werden. Diese Struktur muss statisch allokiert sein (oder es muss anderweitig sichergestellt sein, dass sie gültig ist, solange Module, die daraus erstellt wurden, existieren). Normalerweise gibt es nur eine Variable dieses Typs für jedes Erweiterungsmodul.

PyModuleDef_Base m_base

Initialisieren Sie dieses Element immer mit PyModuleDef_HEAD_INIT.

const char *m_name

Name für das neue Modul.

const char *m_doc

Docstring für das Modul; normalerweise wird eine Docstring-Variable verwendet, die mit PyDoc_STRVAR erstellt wurde.

Py_ssize_t m_size

Der Modulzustand kann in einem speicherbereich pro Modul aufbewahrt werden, der mit PyModule_GetState() abgerufen werden kann, anstatt in statischen globalen Variablen. Dies macht Module sicher für die Verwendung in mehreren Unterinterpretern.

Dieser Speicherbereich wird basierend auf m_size bei der Erstellung des Moduls allokiert und beim Freigeben des Modulobjekts freigegeben, nachdem die Funktion m_free aufgerufen wurde, falls vorhanden.

Wenn es auf einen nicht-negativen Wert gesetzt wird, bedeutet dies, dass das Modul neu initialisiert werden kann und gibt die zusätzliche Speichermenge an, die es für seinen Zustand benötigt.

Wenn m_size auf -1 gesetzt wird, bedeutet dies, dass das Modul keine Unterinterpretern unterstützt, da es globalen Zustand hat. Ein negativer m_size ist nur erlaubt, wenn Legacy-Initialisierung in einer Phase verwendet wird oder wenn Module dynamisch erstellt werden.

Weitere Details finden Sie in PEP 3121.

PyMethodDef *m_methods

Ein Zeiger auf eine Tabelle von Funktionen auf Modulebene, die durch PyMethodDef-Werte beschrieben werden. Kann NULL sein, wenn keine Funktionen vorhanden sind.

PyModuleDef_Slot *m_slots

Ein Array von Slot-Definitionen für die mehrphasige Initialisierung, beendet durch einen Eintrag {0, NULL}. Bei Verwendung der Legacy-Initialisierung in einer Phase muss m_slots NULL sein.

Geändert in Version 3.5: Vor Version 3.5 war dieses Element immer auf NULL gesetzt und wurde definiert als

inquiry m_reload
traverseproc m_traverse

Eine Traversierungsfunktion, die während der GC-Traversierung des Modulobjekts aufgerufen wird, oder NULL, falls nicht benötigt.

Diese Funktion wird nicht aufgerufen, wenn der Modulzustand angefordert, aber noch nicht allokiert wurde. Dies ist unmittelbar nach der Erstellung des Moduls und vor der Ausführung des Moduls der Fall (Py_mod_exec-Funktion). Genauer gesagt, wird diese Funktion nicht aufgerufen, wenn m_size größer als 0 ist und der Modulzustand (wie von PyModule_GetState() zurückgegeben) NULL ist.

Geändert in Version 3.9: Wird nicht mehr vor der Allokation des Modulzustands aufgerufen.

inquiry m_clear

Eine Clear-Funktion, die während des GC-Clearing des Modulobjekts aufgerufen wird, oder NULL, falls nicht benötigt.

Diese Funktion wird nicht aufgerufen, wenn der Modulzustand angefordert, aber noch nicht allokiert wurde. Dies ist unmittelbar nach der Erstellung des Moduls und vor der Ausführung des Moduls der Fall (Py_mod_exec-Funktion). Genauer gesagt, wird diese Funktion nicht aufgerufen, wenn m_size größer als 0 ist und der Modulzustand (wie von PyModule_GetState() zurückgegeben) NULL ist.

Wie PyTypeObject.tp_clear wird diese Funktion nicht *immer* vor der Freigabe eines Moduls aufgerufen. Wenn beispielsweise die Referenzzählung ausreicht, um festzustellen, dass ein Objekt nicht mehr verwendet wird, ist der zyklische Garbage Collector nicht involviert und m_free wird direkt aufgerufen.

Geändert in Version 3.9: Wird nicht mehr vor der Allokation des Modulzustands aufgerufen.

freefunc m_free

Eine Funktion, die während der Freigabe des Modulobjekts aufgerufen wird, oder NULL, falls nicht benötigt.

Diese Funktion wird nicht aufgerufen, wenn der Modulzustand angefordert, aber noch nicht allokiert wurde. Dies ist unmittelbar nach der Erstellung des Moduls und vor der Ausführung des Moduls der Fall (Py_mod_exec-Funktion). Genauer gesagt, wird diese Funktion nicht aufgerufen, wenn m_size größer als 0 ist und der Modulzustand (wie von PyModule_GetState() zurückgegeben) NULL ist.

Geändert in Version 3.9: Wird nicht mehr vor der Allokation des Modulzustands aufgerufen.

Modul-Slots

type PyModuleDef_Slot
int slot

Eine Slot-ID, ausgewählt aus den unten erklärten verfügbaren Werten.

void *value

Wert des Slots, dessen Bedeutung von der Slot-ID abhängt.

Hinzugefügt in Version 3.5.

Die verfügbaren Slot-Typen sind

Py_mod_create

Gibt eine Funktion an, die aufgerufen wird, um das Modulobjekt selbst zu erstellen. Der value-Zeiger dieses Slots muss auf eine Funktion der Signatur zeigen:

PyObject *create_module(PyObject *spec, PyModuleDef *def)

Die Funktion erhält eine ModuleSpec-Instanz, wie in PEP 451 definiert, und die Moduldefinition. Sie sollte ein neues Modulobjekt zurückgeben oder einen Fehler setzen und NULL zurückgeben.

Diese Funktion sollte minimal gehalten werden. Insbesondere sollte sie keinen beliebigen Python-Code aufrufen, da der Versuch, dasselbe Modul erneut zu importieren, zu einer Endlosschleife führen kann.

Mehrere Py_mod_create-Slots dürfen in einer Moduldefinition nicht angegeben werden.

Wenn Py_mod_create nicht angegeben ist, wird die Import-Maschinerie ein normales Modulobjekt unter Verwendung von PyModule_New() erstellen. Der Name wird aus spec entnommen, nicht aus der Definition, um es Erweiterungsmodulen zu ermöglichen, sich dynamisch an ihren Platz in der Modulhierarchie anzupassen und unter verschiedenen Namen über Symlinks importiert zu werden, während eine einzige Moduldefinition gemeinsam genutzt wird.

Es gibt keine Anforderung, dass das zurückgegebene Objekt eine Instanz von PyModule_Type ist. Jeder Typ kann verwendet werden, solange er das Setzen und Abrufen von Import-bezogenen Attributen unterstützt. Nur PyModule_Type-Instanzen dürfen jedoch zurückgegeben werden, wenn die PyModuleDef eine nicht-NULL m_traverse, m_clear, m_free; nicht-null m_size; oder Slots außer Py_mod_create hat.

Py_mod_exec

Gibt eine Funktion an, die aufgerufen wird, um das Modul zu executen. Dies ist äquivalent zur Ausführung des Codes eines Python-Moduls: typischerweise fügt diese Funktion Klassen und Konstanten zum Modul hinzu. Die Signatur der Funktion ist

int exec_module(PyObject *module)

Wenn mehrere Py_mod_exec-Slots angegeben sind, werden sie in der Reihenfolge verarbeitet, in der sie im m_slots-Array erscheinen.

Py_mod_multiple_interpreters

Gibt einen der folgenden Werte an

Py_MOD_MULTIPLE_INTERPRETERS_NOT_SUPPORTED

Das Modul unterstützt nicht den Import in Subinterpretern.

Py_MOD_MULTIPLE_INTERPRETERS_SUPPORTED

Das Modul unterstützt den Import in Subinterpretern, aber nur, wenn sie den GIL des Hauptinterpreters teilen. (Siehe Isolating Extension Modules.)

Py_MOD_PER_INTERPRETER_GIL_SUPPORTED

Das Modul unterstützt den Import in Subinterpretern, auch wenn diese ihren eigenen GIL haben. (Siehe Isolating Extension Modules.)

Dieser Slot bestimmt, ob der Import dieses Moduls in einem Subinterpreter fehlschlägt.

Mehrere Py_mod_multiple_interpreters-Slots dürfen in einer Moduldefinition nicht angegeben werden.

Wenn Py_mod_multiple_interpreters nicht angegeben ist, wird die Import-Maschinerie standardmäßig auf Py_MOD_MULTIPLE_INTERPRETERS_SUPPORTED gesetzt.

Hinzugefügt in Version 3.12.

Py_mod_gil

Gibt einen der folgenden Werte an

Py_MOD_GIL_USED

Das Modul ist von der Anwesenheit des globalen Interpreter-Locks (GIL) abhängig und darf auf globale Zustände ohne Synchronisation zugreifen.

Py_MOD_GIL_NOT_USED

Das Modul ist sicher, ohne einen aktiven GIL ausgeführt zu werden.

Dieser Slot wird von Python-Builds, die nicht mit --disable-gil konfiguriert sind, ignoriert. Andernfalls bestimmt er, ob der Import dieses Moduls den GIL automatisch aktiviert. Weitere Details finden Sie unter Free-threaded CPython.

Mehrere Py_mod_gil-Slots dürfen in einer Moduldefinition nicht angegeben werden.

Wenn Py_mod_gil nicht angegeben ist, wird die Import-Maschinerie standardmäßig auf Py_MOD_GIL_USED gesetzt.

Hinzugefügt in Version 3.13.

Erweiterungsmodule dynamisch erstellen

Die folgenden Funktionen können verwendet werden, um ein Modul außerhalb einer Initialisierungsfunktion einer Erweiterung zu erstellen. Sie werden auch in der Initialisierung in einer Phase verwendet.

PyObject *PyModule_Create(PyModuleDef *def)
Rückgabewert: Neue Referenz.

Erstellt ein neues Modulobjekt, gegeben die Definition in def. Dies ist ein Makro, das PyModule_Create2() mit module_api_version auf PYTHON_API_VERSION gesetzt aufruft, oder auf PYTHON_ABI_VERSION, wenn die begrenzte API verwendet wird.

PyObject *PyModule_Create2(PyModuleDef *def, int module_api_version)
Rückgabewert: Neue Referenz. Teil der Stabilen ABI.

Erzeugt ein neues Modulobjekt, basierend auf der Definition in def, unter Annahme der API-Version module_api_version. Wenn diese Version nicht mit der Version des laufenden Interpreters übereinstimmt, wird eine RuntimeWarning ausgegeben.

Gibt NULL mit einer gesetzten Ausnahme im Fehlerfall zurück.

Diese Funktion unterstützt keine Slots. Das Mitglied m_slots von def muss NULL sein.

Hinweis

Die meisten Verwendungen dieser Funktion sollten stattdessen PyModule_Create() verwenden; verwenden Sie diese nur, wenn Sie sicher sind, dass Sie sie benötigen.

PyObject *PyModule_FromDefAndSpec(PyModuleDef *def, PyObject *spec)
Rückgabewert: Neue Referenz.

Dieses Makro ruft PyModule_FromDefAndSpec2() mit module_api_version auf PYTHON_API_VERSION gesetzt, oder auf PYTHON_ABI_VERSION, wenn die begrenzte API verwendet wird.

Hinzugefügt in Version 3.5.

PyObject *PyModule_FromDefAndSpec2(PyModuleDef *def, PyObject *spec, int module_api_version)
Rückgabewert: Neue Referenz. Teil der Stable ABI seit Version 3.7.

Erstellt ein neues Modulobjekt, basierend auf der Definition in def und dem Modul-Spec spec, unter Annahme der API-Version module_api_version. Wenn diese Version nicht mit der Version des laufenden Interpreters übereinstimmt, wird eine RuntimeWarning ausgegeben.

Gibt NULL mit einer gesetzten Ausnahme im Fehlerfall zurück.

Beachten Sie, dass dies keine Ausführungs-Slots (Py_mod_exec) verarbeitet. Sowohl PyModule_FromDefAndSpec als auch PyModule_ExecDef müssen aufgerufen werden, um ein Modul vollständig zu initialisieren.

Hinweis

Die meisten Verwendungen dieser Funktion sollten stattdessen PyModule_FromDefAndSpec() verwenden; verwenden Sie diese nur, wenn Sie sicher sind, dass Sie sie benötigen.

Hinzugefügt in Version 3.5.

int PyModule_ExecDef(PyObject *module, PyModuleDef *def)
Teil der Stable ABI seit Version 3.7.

Verarbeitet alle Ausführungs-Slots (Py_mod_exec), die in def angegeben sind.

Hinzugefügt in Version 3.5.

PYTHON_API_VERSION

Die C-API-Version. Definiert für Abwärtskompatibilität.

Derzeit wird diese Konstante in neuen Python-Versionen nicht aktualisiert und ist nicht nützlich für die Versionskontrolle. Dies kann sich in Zukunft ändern.

PYTHON_ABI_VERSION

Definiert als 3 für Abwärtskompatibilität.

Derzeit wird diese Konstante in neuen Python-Versionen nicht aktualisiert und ist nicht nützlich für die Versionskontrolle. Dies kann sich in Zukunft ändern.

Unterstützungsfunktionen

Die folgenden Funktionen werden bereitgestellt, um die Modulstatusverwaltung zu unterstützen. Sie sind für die Ausführungs-Slots eines Moduls (Py_mod_exec), die Initialisierungsfunktion für Legacy-Initialisierung mit einer Phase oder Code, der Module dynamisch erstellt, vorgesehen.

int PyModule_AddObjectRef(PyObject *module, const char *name, PyObject *value)
Teil der Stable ABI seit Version 3.10.

Fügt ein Objekt zu module unter dem Namen name hinzu. Dies ist eine Komfortfunktion, die aus der Initialisierungsfunktion des Moduls verwendet werden kann.

Bei Erfolg wird 0 zurückgegeben. Im Fehlerfall wird eine Ausnahme ausgelöst und -1 zurückgegeben.

Beispielverwendung

static int
add_spam(PyObject *module, int value)
{
    PyObject *obj = PyLong_FromLong(value);
    if (obj == NULL) {
        return -1;
    }
    int res = PyModule_AddObjectRef(module, "spam", obj);
    Py_DECREF(obj);
    return res;
 }

Um praktisch zu sein, akzeptiert die Funktion NULL value mit einer gesetzten Ausnahme. In diesem Fall wird -1 zurückgegeben und die ausgelöste Ausnahme unverändert gelassen.

Das Beispiel kann auch ohne explizite Überprüfung geschrieben werden, ob obj NULL ist

static int
add_spam(PyObject *module, int value)
{
    PyObject *obj = PyLong_FromLong(value);
    int res = PyModule_AddObjectRef(module, "spam", obj);
    Py_XDECREF(obj);
    return res;
 }

Beachten Sie, dass in diesem Fall Py_XDECREF() anstelle von Py_DECREF() verwendet werden sollte, da obj NULL sein kann.

Die Anzahl der verschiedenen name-Strings, die an diese Funktion übergeben werden, sollte klein gehalten werden, normalerweise durch die Verwendung nur von statisch zugewiesenen Strings als name. Für Namen, die zur Kompilierzeit nicht bekannt sind, ist es vorzuziehen, PyUnicode_FromString() und PyObject_SetAttr() direkt aufzurufen. Für weitere Details siehe PyUnicode_InternFromString(), das intern verwendet werden kann, um ein Schlüsselobjekt zu erstellen.

Hinzugefügt in Version 3.10.

int PyModule_Add(PyObject *module, const char *name, PyObject *value)
Teil des Stable ABI seit Version 3.13.

Ähnlich wie PyModule_AddObjectRef(), aber "stiehlt" eine Referenz auf value. Es kann mit dem Ergebnis einer Funktion aufgerufen werden, die eine neue Referenz zurückgibt, ohne sich darum zu kümmern, ihr Ergebnis zu überprüfen oder sie überhaupt in einer Variablen zu speichern.

Beispielverwendung

if (PyModule_Add(module, "spam", PyBytes_FromString(value)) < 0) {
    goto error;
}

Hinzugefügt in Version 3.13.

int PyModule_AddObject(PyObject *module, const char *name, PyObject *value)
Teil der Stable ABI.

Ähnlich wie PyModule_AddObjectRef(), stiehlt aber im Erfolgsfall (wenn 0 zurückgegeben wird) eine Referenz auf value.

Die neuen Funktionen PyModule_Add() oder PyModule_AddObjectRef() werden empfohlen, da es durch falsche Verwendung der Funktion PyModule_AddObject() leicht zu Referenzlecks kommen kann.

Hinweis

Im Gegensatz zu anderen Funktionen, die Referenzen stehlen, gibt PyModule_AddObject() die Referenz auf value nur **im Erfolgsfall** frei.

Das bedeutet, dass ihr Rückgabewert überprüft werden muss und der aufrufende Code value manuell mit Py_XDECREF() dekrementieren muss, wenn ein Fehler auftritt.

Beispielverwendung

PyObject *obj = PyBytes_FromString(value);
if (PyModule_AddObject(module, "spam", obj) < 0) {
    // If 'obj' is not NULL and PyModule_AddObject() failed,
    // 'obj' strong reference must be deleted with Py_XDECREF().
    // If 'obj' is NULL, Py_XDECREF() does nothing.
    Py_XDECREF(obj);
    goto error;
}
// PyModule_AddObject() stole a reference to obj:
// Py_XDECREF(obj) is not needed here.

Seit Version 3.13 veraltet: PyModule_AddObject() ist soft deprecated.

int PyModule_AddIntConstant(PyObject *module, const char *name, long value)
Teil der Stable ABI.

Fügt eine ganze Zahl als Konstante zu module unter dem Namen name hinzu. Diese Komfortfunktion kann aus der Initialisierungsfunktion des Moduls verwendet werden. Gibt -1 mit einer gesetzten Ausnahme bei einem Fehler zurück, 0 bei Erfolg.

Dies ist eine Komfortfunktion, die PyLong_FromLong() und PyModule_AddObjectRef() aufruft; siehe deren Dokumentation für Details.

int PyModule_AddStringConstant(PyObject *module, const char *name, const char *value)
Teil der Stable ABI.

Fügt eine Zeichenkette als Konstante zu module unter dem Namen name hinzu. Diese Komfortfunktion kann aus der Initialisierungsfunktion des Moduls verwendet werden. Die Zeichenkette value muss mit NULL abgeschlossen sein. Gibt -1 mit einer gesetzten Ausnahme bei einem Fehler zurück, 0 bei Erfolg.

Dies ist eine Komfortfunktion, die PyUnicode_InternFromString() und PyModule_AddObjectRef() aufruft; siehe deren Dokumentation für Details.

PyModule_AddIntMacro(module, macro)

Fügt eine ganze Zahl als Konstante zu module hinzu. Der Name und der Wert werden aus macro übernommen. Zum Beispiel fügt PyModule_AddIntMacro(module, AF_INET) die ganze Zahl Konstante AF_INET mit dem Wert von AF_INET zu module hinzu. Gibt -1 mit einer gesetzten Ausnahme bei einem Fehler zurück, 0 bei Erfolg.

PyModule_AddStringMacro(module, macro)

Fügt eine Zeichenkette als Konstante zu module hinzu.

int PyModule_AddType(PyObject *module, PyTypeObject *type)
Teil der Stable ABI seit Version 3.10.

Fügt ein Typobjekt zu module hinzu. Das Typobjekt wird durch internen Aufruf von PyType_Ready() finalisiert. Der Name des Typobjekts wird aus der letzten Komponente von tp_name nach dem Punkt entnommen. Gibt -1 mit einer gesetzten Ausnahme bei einem Fehler zurück, 0 bei Erfolg.

Hinzugefügt in Version 3.9.

int PyModule_AddFunctions(PyObject *module, PyMethodDef *functions)
Teil der Stable ABI seit Version 3.7.

Fügt die Funktionen aus dem mit NULL abgeschlossenen Array functions zu module hinzu. Beziehen Sie sich auf die Dokumentation von PyMethodDef für Details zu einzelnen Einträgen (aufgrund des Fehlens eines gemeinsamen Modul-Namensraums erhalten Modul-weite "Funktionen", die in C implementiert sind, typischerweise das Modul als ersten Parameter, was sie ähnlich wie Instanzmethoden bei Python-Klassen macht).

Diese Funktion wird automatisch beim Erstellen eines Moduls aus PyModuleDef aufgerufen (z. B. bei Verwendung der Multi-Phasen-Initialisierung, PyModule_Create oder PyModule_FromDefAndSpec). Einige Modulautoren ziehen es möglicherweise vor, Funktionen in mehreren PyMethodDef-Arrays zu definieren; in diesem Fall sollten sie diese Funktion direkt aufrufen.

Hinzugefügt in Version 3.5.

int PyModule_SetDocString(PyObject *module, const char *docstring)
Teil der Stable ABI seit Version 3.7.

Setzt den Docstring für module auf docstring. Diese Funktion wird automatisch beim Erstellen eines Moduls aus PyModuleDef aufgerufen (z. B. bei Verwendung der Multi-Phasen-Initialisierung, PyModule_Create oder PyModule_FromDefAndSpec).

Hinzugefügt in Version 3.5.

int PyUnstable_Module_SetGIL(PyObject *module, void *gil)
Dies ist eine Instabile API. Sie kann sich ohne Vorwarnung in kleineren Releases ändern.

Gibt an, ob module die Ausführung ohne den globalen Interpreter-Lock (GIL) unterstützt oder nicht, indem einer der Werte aus Py_mod_gil verwendet wird. Es muss während der Initialisierungsfunktion von module aufgerufen werden, wenn Legacy-Initialisierung mit einer Phase verwendet wird. Wenn diese Funktion während der Modulinitialisierung nicht aufgerufen wird, geht die Import-Maschinerie davon aus, dass das Modul keine Ausführung ohne GIL unterstützt. Diese Funktion ist nur in Python-Builds verfügbar, die mit --disable-gil konfiguriert sind. Gibt -1 mit einer gesetzten Ausnahme bei einem Fehler zurück, 0 bei Erfolg.

Hinzugefügt in Version 3.13.

Modulsuchlauf (Initialisierung mit einer Phase)

Das Legacy-Schema für die Initialisierung mit einer Phase erstellt Singleton-Module, die im Kontext des aktuellen Interpreters gesucht werden können. Dies ermöglicht den späteren Abruf des Modulobjekts mit nur einer Referenz auf die Moduldefinition.

Diese Funktionen funktionieren nicht für Module, die mit der Multi-Phasen-Initialisierung erstellt wurden, da mehrere solcher Module aus einer einzigen Definition erstellt werden können.

PyObject *PyState_FindModule(PyModuleDef *def)
Rückgabewert: Ausgeliehene Referenz. Teil der Stable ABI.

Gibt das Modulobjekt zurück, das für den aktuellen Interpreter aus def erstellt wurde. Diese Methode erfordert, dass das Modulobjekt mit PyState_AddModule() zuvor an den Interpreterstatus angehängt wurde. Falls das entsprechende Modulobjekt nicht gefunden wird oder noch nicht an den Interpreterstatus angehängt wurde, gibt es NULL zurück.

int PyState_AddModule(PyObject *module, PyModuleDef *def)
Teil der Stable ABI seit Version 3.3.

Hängt das der Funktion übergebene Modulobjekt an den Interpreterstatus an. Dies ermöglicht den Zugriff auf das Modulobjekt über PyState_FindModule().

Nur wirksam auf Module, die mit der Initialisierung mit einer Phase erstellt wurden.

Python ruft PyState_AddModule automatisch auf, nachdem ein Modul importiert wurde, das die Initialisierung mit einer Phase verwendet, sodass es unnötig (aber harmlos) ist, es aus dem Initialisierungscode des Moduls aufzurufen. Ein expliziter Aufruf ist nur dann erforderlich, wenn der eigene Init-Code des Moduls später PyState_FindModule aufruft. Die Funktion ist hauptsächlich für die Implementierung alternativer Importmechanismen gedacht (entweder durch direkten Aufruf oder durch Bezugnahme auf ihre Implementierung für Details der erforderlichen Statusaktualisierungen).

Wenn ein Modul zuvor unter Verwendung desselben def angehängt wurde, wird es durch das neue module ersetzt.

Der Aufrufer muss einen Thread-Status angehängt haben.

Gibt -1 mit einer gesetzten Ausnahme bei einem Fehler zurück, 0 bei Erfolg.

Hinzugefügt in Version 3.3.

int PyState_RemoveModule(PyModuleDef *def)
Teil der Stable ABI seit Version 3.3.

Entfernt das aus def erstellte Modulobjekt aus dem Interpreterstatus. Gibt -1 mit einer gesetzten Ausnahme bei einem Fehler zurück, 0 bei Erfolg.

Der Aufrufer muss einen Thread-Status angehängt haben.

Hinzugefügt in Version 3.3.