Modulobjekte¶
-
PyTypeObject PyModule_Type¶
- Teil der Stable ABI.
Diese Instanz von
PyTypeObjectrepräsentiert den Python-Modultyp. Dies wird Python-Programmen alstypes.ModuleTypebereitgestellt.
-
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_Typeist. 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 aufNonegesetzt). Der Aufrufer ist dafür verantwortlich, ein__file__-Attribut zu setzen.Gibt
NULLmit einer gesetzten Ausnahme im Fehlerfall zurück.Hinzugefügt in Version 3.3.
Geändert in Version 3.4:
__package__und__loader__sind jetzt aufNonegesetzt.
-
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, wirdSystemErrorausgelöst undNULLzurückgegeben.Es wird empfohlen, dass Erweiterungen andere
PyModule_*undPyObject_*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, wirdSystemErrorausgelöst undNULLzurü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. SiehePyModuleDef.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, oderNULL, 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, wirdSystemErrorausgelöst undNULLzurü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östUnicodeEncodeErrorbei nicht kodierbaren Dateinamen aus, verwenden Sie stattdessenPyModule_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_STRVARerstellt 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_freeaufgerufen 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_sizeauf-1gesetzt wird, bedeutet dies, dass das Modul keine Unterinterpretern unterstützt, da es globalen Zustand hat. Ein negativerm_sizeist 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. KannNULLsein, 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_slotsNULLsein.
-
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, wennm_sizegrößer als 0 ist und der Modulzustand (wie vonPyModule_GetState()zurückgegeben)NULList.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, wennm_sizegrößer als 0 ist und der Modulzustand (wie vonPyModule_GetState()zurückgegeben)NULList.Wie
PyTypeObject.tp_clearwird 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 undm_freewird 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, wennm_sizegrößer als 0 ist und der Modulzustand (wie vonPyModule_GetState()zurückgegeben)NULList.Geändert in Version 3.9: Wird nicht mehr vor der Allokation des Modulzustands aufgerufen.
-
PyModuleDef_Base m_base¶
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.
-
int slot¶
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 undNULLzurü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_createnicht angegeben ist, wird die Import-Maschinerie ein normales Modulobjekt unter Verwendung vonPyModule_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_Typeist. Jeder Typ kann verwendet werden, solange er das Setzen und Abrufen von Import-bezogenen Attributen unterstützt. NurPyModule_Type-Instanzen dürfen jedoch zurückgegeben werden, wenn diePyModuleDefeine nicht-NULLm_traverse,m_clear,m_free; nicht-nullm_size; oder Slots außerPy_mod_createhat.-
PyObject *create_module(PyObject *spec, PyModuleDef *def)¶
-
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
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_interpretersnicht angegeben ist, wird die Import-Maschinerie standardmäßig aufPy_MOD_MULTIPLE_INTERPRETERS_SUPPORTEDgesetzt.Hinzugefügt in Version 3.12.
-
Py_MOD_MULTIPLE_INTERPRETERS_NOT_SUPPORTED¶
-
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-gilkonfiguriert 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_gilnicht angegeben ist, wird die Import-Maschinerie standardmäßig aufPy_MOD_GIL_USEDgesetzt.Hinzugefügt in Version 3.13.
-
Py_MOD_GIL_USED¶
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 aufPYTHON_API_VERSIONgesetzt aufruft, oder aufPYTHON_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
RuntimeWarningausgegeben.Gibt
NULLmit einer gesetzten Ausnahme im Fehlerfall zurück.Diese Funktion unterstützt keine Slots. Das Mitglied
m_slotsvon def mussNULLsein.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 aufPYTHON_API_VERSIONgesetzt, oder aufPYTHON_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
RuntimeWarningausgegeben.Gibt
NULLmit einer gesetzten Ausnahme im Fehlerfall zurück.Beachten Sie, dass dies keine Ausführungs-Slots (
Py_mod_exec) verarbeitet. SowohlPyModule_FromDefAndSpecals auchPyModule_ExecDefmü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
3fü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
0zurückgegeben. Im Fehlerfall wird eine Ausnahme ausgelöst und-1zurü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
NULLvalue mit einer gesetzten Ausnahme. In diesem Fall wird-1zurückgegeben und die ausgelöste Ausnahme unverändert gelassen.Das Beispiel kann auch ohne explizite Überprüfung geschrieben werden, ob obj
NULListstatic 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 vonPy_DECREF()verwendet werden sollte, da objNULLsein 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()undPyObject_SetAttr()direkt aufzurufen. Für weitere Details siehePyUnicode_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 (wenn0zurückgegeben wird) eine Referenz auf value.Die neuen Funktionen
PyModule_Add()oderPyModule_AddObjectRef()werden empfohlen, da es durch falsche Verwendung der FunktionPyModule_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
-1mit einer gesetzten Ausnahme bei einem Fehler zurück,0bei Erfolg.Dies ist eine Komfortfunktion, die
PyLong_FromLong()undPyModule_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
NULLabgeschlossen sein. Gibt-1mit einer gesetzten Ausnahme bei einem Fehler zurück,0bei Erfolg.Dies ist eine Komfortfunktion, die
PyUnicode_InternFromString()undPyModule_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-1mit einer gesetzten Ausnahme bei einem Fehler zurück,0bei 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 vontp_namenach dem Punkt entnommen. Gibt-1mit einer gesetzten Ausnahme bei einem Fehler zurück,0bei 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
NULLabgeschlossenen Array functions zu module hinzu. Beziehen Sie sich auf die Dokumentation vonPyMethodDeffü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
PyModuleDefaufgerufen (z. B. bei Verwendung der Multi-Phasen-Initialisierung,PyModule_CreateoderPyModule_FromDefAndSpec). Einige Modulautoren ziehen es möglicherweise vor, Funktionen in mehrerenPyMethodDef-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
PyModuleDefaufgerufen (z. B. bei Verwendung der Multi-Phasen-Initialisierung,PyModule_CreateoderPyModule_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_gilverwendet 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-gilkonfiguriert sind. Gibt-1mit einer gesetzten Ausnahme bei einem Fehler zurück,0bei 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 esNULLzurü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_AddModuleautomatisch 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äterPyState_FindModuleaufruft. 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
-1mit einer gesetzten Ausnahme bei einem Fehler zurück,0bei 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
-1mit einer gesetzten Ausnahme bei einem Fehler zurück,0bei Erfolg.Der Aufrufer muss einen Thread-Status angehängt haben.
Hinzugefügt in Version 3.3.