Python-Initialisierungskonfiguration

PyInitConfig C API

Hinzugefügt in Version 3.14.

Python kann mit Py_InitializeFromInitConfig() initialisiert werden.

Die Funktion Py_RunMain() kann verwendet werden, um ein benutzerdefiniertes Python-Programm zu schreiben.

Siehe auch Initialisierung, Finalisierung und Threads.

Siehe auch

PEP 741 „Python Configuration C API“.

Beispiel

Beispiel für eine benutzerdefinierte Python-Umgebung, die immer mit aktiviertem Python-Entwicklermodus ausgeführt wird; Rückgabe von -1 bei Fehler

int init_python(void)
{
    PyInitConfig *config = PyInitConfig_Create();
    if (config == NULL) {
        printf("PYTHON INIT ERROR: memory allocation failed\n");
        return -1;
    }

    // Enable the Python Development Mode
    if (PyInitConfig_SetInt(config, "dev_mode", 1) < 0) {
        goto error;
    }

    // Initialize Python with the configuration
    if (Py_InitializeFromInitConfig(config) < 0) {
        goto error;
    }
    PyInitConfig_Free(config);
    return 0;

error:
    {
        // Display the error message.
        //
        // This uncommon braces style is used, because you cannot make
        // goto targets point to variable declarations.
        const char *err_msg;
        (void)PyInitConfig_GetError(config, &err_msg);
        printf("PYTHON INIT ERROR: %s\n", err_msg);
        PyInitConfig_Free(config);
        return -1;
    }
}

Konfiguration erstellen

struct PyInitConfig

Undurchsichtige Struktur zur Konfiguration der Python-Initialisierung.

PyInitConfig *PyInitConfig_Create(void)

Erstellt eine neue Initialisierungskonfiguration mit den Standardwerten von Isolierte Konfiguration.

Sie muss mit PyInitConfig_Free() freigegeben werden.

Gibt NULL bei einem Fehler bei der Speicherzuweisung zurück.

void PyInitConfig_Free(PyInitConfig *config)

Gibt den Speicher der Initialisierungskonfiguration config frei.

Wenn config NULL ist, wird keine Operation durchgeführt.

Fehlerbehandlung

int PyInitConfig_GetError(PyInitConfig *config, const char **err_msg)

Ruft die Fehlermeldung von config ab.

  • Setzt *err_msg und gibt 1 zurück, wenn ein Fehler gesetzt ist.

  • Setzt *err_msg auf NULL und gibt andernfalls 0 zurück.

Eine Fehlermeldung ist ein UTF-8-kodierter String.

Wenn config einen Exit-Code hat, wird der Exit-Code als Fehlermeldung formatiert.

Die Fehlermeldung bleibt gültig, bis eine andere PyInitConfig Funktion mit config aufgerufen wird. Der Aufrufer muss die Fehlermeldung nicht freigeben.

int PyInitConfig_GetExitCode(PyInitConfig *config, int *exitcode)

Ruft den Exit-Code von config ab.

  • Setzt *exitcode und gibt 1 zurück, wenn config einen Exit-Code gesetzt hat.

  • Gibt 0 zurück, wenn config keinen Exit-Code gesetzt hat.

Nur die Funktion Py_InitializeFromInitConfig() kann einen Exit-Code setzen, wenn die Option parse_argv ungleich Null ist.

Ein Exit-Code kann gesetzt werden, wenn das Parsen der Befehlszeile fehlschlug (Exit-Code 2) oder wenn eine Befehlszeilenoption zur Anzeige der Hilfe aufgefordert wurde (Exit-Code 0).

Optionen abrufen

Der Optionsname name muss ein nicht-NULL UTF-8 kodierter String sein, der mit Null endet. Siehe Konfigurationsoptionen.

int PyInitConfig_HasOption(PyInitConfig *config, const char *name)

Prüft, ob die Konfiguration eine Option mit dem Namen name enthält.

Gibt 1 zurück, wenn die Option existiert, andernfalls 0.

int PyInitConfig_GetInt(PyInitConfig *config, const char *name, int64_t *value)

Ruft eine Integer-Konfigurationsoption ab.

  • Setzt *value und gibt bei Erfolg 0 zurück.

  • Setzt einen Fehler in config und gibt bei einem Fehler -1 zurück.

int PyInitConfig_GetStr(PyInitConfig *config, const char *name, char **value)

Ruft eine String-Konfigurationsoption als UTF-8 kodierten String ab, der mit Null endet.

  • Setzt *value und gibt bei Erfolg 0 zurück.

  • Setzt einen Fehler in config und gibt bei einem Fehler -1 zurück.

*value kann auf NULL gesetzt werden, wenn die Option ein optionaler String ist und die Option nicht gesetzt ist.

Bei Erfolg muss der String mit free(value) freigegeben werden, wenn er nicht NULL ist.

int PyInitConfig_GetStrList(PyInitConfig *config, const char *name, size_t *length, char ***items)

Ruft eine String-Listen-Konfigurationsoption als Array von UTF-8 kodierten Strings ab, die mit Null enden.

  • Setzt *length und *value und gibt bei Erfolg 0 zurück.

  • Setzt einen Fehler in config und gibt bei einem Fehler -1 zurück.

Bei Erfolg muss die String-Liste mit PyInitConfig_FreeStrList(length, items) freigegeben werden.

void PyInitConfig_FreeStrList(size_t length, char **items)

Gibt den Speicher einer String-Liste frei, die von PyInitConfig_GetStrList() erstellt wurde.

Optionen festlegen

Der Optionsname name muss ein nicht-NULL UTF-8 kodierter String sein, der mit Null endet. Siehe Konfigurationsoptionen.

Einige Konfigurationsoptionen haben Nebeneffekte auf andere Optionen. Diese Logik wird nur implementiert, wenn Py_InitializeFromInitConfig() aufgerufen wird, nicht durch die nachstehenden „Set“-Funktionen. Zum Beispiel setzt die Einstellung von dev_mode auf 1 nicht faulthandler auf 1.

int PyInitConfig_SetInt(PyInitConfig *config, const char *name, int64_t value)

Setzt eine Integer-Konfigurationsoption.

  • Gibt bei Erfolg 0 zurück.

  • Setzt einen Fehler in config und gibt bei einem Fehler -1 zurück.

int PyInitConfig_SetStr(PyInitConfig *config, const char *name, const char *value)

Setzt eine String-Konfigurationsoption aus einem UTF-8 kodierten String, der mit Null endet. Der String wird kopiert.

  • Gibt bei Erfolg 0 zurück.

  • Setzt einen Fehler in config und gibt bei einem Fehler -1 zurück.

int PyInitConfig_SetStrList(PyInitConfig *config, const char *name, size_t length, char *const *items)

Setzt eine String-Listen-Konfigurationsoption aus einem Array von UTF-8 kodierten Strings, die mit Null enden. Die String-Liste wird kopiert.

  • Gibt bei Erfolg 0 zurück.

  • Setzt einen Fehler in config und gibt bei einem Fehler -1 zurück.

Modul

int PyInitConfig_AddModule(PyInitConfig *config, const char *name, PyObject *(*initfunc)(void))

Fügt ein integriertes Erweiterungsmodul zur Tabelle der integrierten Module hinzu.

Das neue Modul kann unter dem Namen name importiert werden und verwendet die Funktion initfunc als Initialisierungsfunktion, die beim ersten Importversuch aufgerufen wird.

  • Gibt bei Erfolg 0 zurück.

  • Setzt einen Fehler in config und gibt bei einem Fehler -1 zurück.

Wenn Python mehrmals initialisiert wird, muss PyInitConfig_AddModule() bei jeder Python-Initialisierung aufgerufen werden.

Ähnlich wie die Funktion PyImport_AppendInittab().

Python initialisieren

int Py_InitializeFromInitConfig(PyInitConfig *config)

Initialisiert Python aus der Initialisierungskonfiguration.

  • Gibt bei Erfolg 0 zurück.

  • Setzt einen Fehler in config und gibt bei einem Fehler -1 zurück.

  • Setzt einen Exit-Code in config und gibt -1 zurück, wenn Python beendet werden soll.

Siehe PyInitConfig_GetExitcode() für den Fall eines Exit-Codes.

Konfigurationsoptionen

Option

PyConfig/PyPreConfig Mitglied

Typ

Sichtbarkeit

"allocator"

allocator

int

Nur-Lese

"argv"

argv

list[str]

Öffentlich

"base_exec_prefix"

base_exec_prefix

str

Öffentlich

"base_executable"

base_executable

str

Öffentlich

"base_prefix"

base_prefix

str

Öffentlich

"buffered_stdio"

buffered_stdio

bool

Nur-Lese

"bytes_warning"

bytes_warning

int

Öffentlich

"check_hash_pycs_mode"

check_hash_pycs_mode

str

Nur-Lese

"code_debug_ranges"

code_debug_ranges

bool

Nur-Lese

"coerce_c_locale"

coerce_c_locale

bool

Nur-Lese

"coerce_c_locale_warn"

coerce_c_locale_warn

bool

Nur-Lese

"configure_c_stdio"

configure_c_stdio

bool

Nur-Lese

"configure_locale"

configure_locale

bool

Nur-Lese

"cpu_count"

cpu_count

int

Öffentlich

"dev_mode"

dev_mode

bool

Nur-Lese

"dump_refs"

dump_refs

bool

Nur-Lese

"dump_refs_file"

dump_refs_file

str

Nur-Lese

"exec_prefix"

exec_prefix

str

Öffentlich

"executable"

executable

str

Öffentlich

"faulthandler"

faulthandler

bool

Nur-Lese

"filesystem_encoding"

filesystem_encoding

str

Nur-Lese

"filesystem_errors"

filesystem_errors

str

Nur-Lese

"hash_seed"

hash_seed

int

Nur-Lese

"home"

home

str

Nur-Lese

"import_time"

import_time

int

Nur-Lese

"inspect"

inspect

bool

Öffentlich

"install_signal_handlers"

install_signal_handlers

bool

Nur-Lese

"int_max_str_digits"

int_max_str_digits

int

Öffentlich

"interactive"

interactive

bool

Öffentlich

"isolated"

isolated

bool

Nur-Lese

"legacy_windows_fs_encoding"

legacy_windows_fs_encoding

bool

Nur-Lese

"legacy_windows_stdio"

legacy_windows_stdio

bool

Nur-Lese

"malloc_stats"

malloc_stats

bool

Nur-Lese

"module_search_paths"

module_search_paths

list[str]

Öffentlich

"optimization_level"

optimization_level

int

Öffentlich

"orig_argv"

orig_argv

list[str]

Nur-Lese

"parse_argv"

parse_argv

bool

Nur-Lese

"parser_debug"

parser_debug

bool

Öffentlich

"pathconfig_warnings"

pathconfig_warnings

bool

Nur-Lese

"perf_profiling"

perf_profiling

bool

Nur-Lese

"platlibdir"

platlibdir

str

Öffentlich

"prefix"

prefix

str

Öffentlich

"program_name"

program_name

str

Nur-Lese

"pycache_prefix"

pycache_prefix

str

Öffentlich

"quiet"

quiet

bool

Öffentlich

"run_command"

run_command

str

Nur-Lese

"run_filename"

run_filename

str

Nur-Lese

"run_module"

run_module

str

Nur-Lese

"run_presite"

run_presite

str

Nur-Lese

"safe_path"

safe_path

bool

Nur-Lese

"show_ref_count"

show_ref_count

bool

Nur-Lese

"site_import"

site_import

bool

Nur-Lese

"skip_source_first_line"

skip_source_first_line

bool

Nur-Lese

"stdio_encoding"

stdio_encoding

str

Nur-Lese

"stdio_errors"

stdio_errors

str

Nur-Lese

"stdlib_dir"

stdlib_dir

str

Öffentlich

"tracemalloc"

tracemalloc

int

Nur-Lese

"use_environment"

use_environment

bool

Öffentlich

"use_frozen_modules"

use_frozen_modules

bool

Nur-Lese

"use_hash_seed"

use_hash_seed

bool

Nur-Lese

"use_system_logger"

use_system_logger

bool

Nur-Lese

"user_site_directory"

user_site_directory

bool

Nur-Lese

"utf8_mode"

utf8_mode

bool

Nur-Lese

"verbose"

verbose

int

Öffentlich

"warn_default_encoding"

warn_default_encoding

bool

Nur-Lese

"warnoptions"

warnoptions

list[str]

Öffentlich

"write_bytecode"

write_bytecode

bool

Öffentlich

"xoptions"

xoptions

dict[str, str]

Öffentlich

"_pystats"

_pystats

bool

Nur-Lese

Sichtbarkeit

Runtime Python Konfigurations-API

Zur Laufzeit können Konfigurationsoptionen mit den Funktionen PyConfig_Get() und PyConfig_Set() abgerufen und gesetzt werden.

Der Optionsname name muss ein nicht-NULL UTF-8 kodierter String sein, der mit Null endet. Siehe Konfigurationsoptionen.

Einige Optionen werden aus den sys Attributen gelesen. Zum Beispiel wird die Option "argv" aus sys.argv gelesen.

PyObject *PyConfig_Get(const char *name)

Ruft den aktuellen Laufzeitwert einer Konfigurationsoption als Python-Objekt ab.

  • Gibt eine neue Referenz bei Erfolg zurück.

  • Setzt eine Ausnahme und gibt bei Fehler NULL zurück.

Der Objekttyp hängt von der Konfigurationsoption ab. Er kann sein

  • bool

  • int

  • str

  • list[str]

  • dict[str, str]

Der Aufrufer muss einen angehängten Thread-Status haben. Die Funktion kann nicht vor der Python-Initialisierung oder nach der Python-Finalisierung aufgerufen werden.

Hinzugefügt in Version 3.14.

int PyConfig_GetInt(const char *name, int *value)

Ähnlich wie PyConfig_Get(), ruft aber den Wert als C-Integer ab.

  • Gibt bei Erfolg 0 zurück.

  • Setzt eine Ausnahme und gibt bei Fehler -1 zurück.

Hinzugefügt in Version 3.14.

PyObject *PyConfig_Names(void)

Ruft alle Konfigurationsoptionsnamen als frozenset ab.

  • Gibt eine neue Referenz bei Erfolg zurück.

  • Setzt eine Ausnahme und gibt bei Fehler NULL zurück.

Der Aufrufer muss einen angehängten Thread-Status haben. Die Funktion kann nicht vor der Python-Initialisierung oder nach der Python-Finalisierung aufgerufen werden.

Hinzugefügt in Version 3.14.

int PyConfig_Set(const char *name, PyObject *value)

Setzt den aktuellen Laufzeitwert einer Konfigurationsoption.

  • Löst einen ValueError aus, wenn keine Option name existiert.

  • Löst einen ValueError aus, wenn value ein ungültiger Wert ist.

  • Löst einen ValueError aus, wenn die Option schreibgeschützt ist (nicht gesetzt werden kann).

  • Löst einen TypeError aus, wenn value nicht den richtigen Typ hat.

Der Aufrufer muss einen angehängten Thread-Status haben. Die Funktion kann nicht vor der Python-Initialisierung oder nach der Python-Finalisierung aufgerufen werden.

Löst ein Audit-Ereignis cpython.PyConfig_Set mit den Argumenten name und value aus.

Hinzugefügt in Version 3.14.

PyConfig C API

Hinzugefügt in Version 3.8.

Python kann mit Py_InitializeFromConfig() und der Struktur PyConfig initialisiert werden. Sie kann mit Py_PreInitialize() und der Struktur PyPreConfig vorinitialisiert werden.

Es gibt zwei Arten von Konfiguration

  • Die Python-Konfiguration kann verwendet werden, um ein benutzerdefiniertes Python zu erstellen, das sich wie das reguläre Python verhält. Zum Beispiel werden Umgebungsvariablen und Befehlszeilenargumente zur Konfiguration von Python verwendet.

  • Die Isolierte Konfiguration kann verwendet werden, um Python in eine Anwendung einzubetten. Sie isoliert Python vom System. Zum Beispiel werden Umgebungsvariablen ignoriert, die LC_CTYPE-Locale unverändert gelassen und kein Signal-Handler registriert.

Die Funktion Py_RunMain() kann verwendet werden, um ein benutzerdefiniertes Python-Programm zu schreiben.

Siehe auch Initialisierung, Finalisierung und Threads.

Siehe auch

PEP 587 „Python Initialization Configuration“.

Beispiel

Beispiel für ein benutzerdefiniertes Python, das immer im isolierten Modus ausgeführt wird

int main(int argc, char **argv)
{
    PyStatus status;

    PyConfig config;
    PyConfig_InitPythonConfig(&config);
    config.isolated = 1;

    /* Decode command line arguments.
       Implicitly preinitialize Python (in isolated mode). */
    status = PyConfig_SetBytesArgv(&config, argc, argv);
    if (PyStatus_Exception(status)) {
        goto exception;
    }

    status = Py_InitializeFromConfig(&config);
    if (PyStatus_Exception(status)) {
        goto exception;
    }
    PyConfig_Clear(&config);

    return Py_RunMain();

exception:
    PyConfig_Clear(&config);
    if (PyStatus_IsExit(status)) {
        return status.exitcode;
    }
    /* Display the error message and exit the process with
       non-zero exit code */
    Py_ExitStatusException(status);
}

PyWideStringList

type PyWideStringList

Liste von wchar_t* Strings.

Wenn length ungleich Null ist, muss items nicht NULL sein und alle Strings dürfen nicht NULL sein.

Methoden

PyStatus PyWideStringList_Append(PyWideStringList *list, const wchar_t *item)

Fügt item an list an.

Python muss vorinitialisiert sein, um diese Funktion aufzurufen.

PyStatus PyWideStringList_Insert(PyWideStringList *list, Py_ssize_t index, const wchar_t *item)

Fügt item bei index in list ein.

Wenn index größer oder gleich der Länge von list ist, wird item an list angehängt.

index muss größer oder gleich 0 sein.

Python muss vorinitialisiert sein, um diese Funktion aufzurufen.

Strukturfelder

Py_ssize_t length

Listenlänge.

wchar_t **items

Listenelemente.

PyStatus

type PyStatus

Struktur zur Speicherung eines Initialisierungsfunktionsstatus: Erfolg, Fehler oder Beenden.

Bei einem Fehler kann sie den C-Funktionsnamen speichern, der den Fehler verursacht hat.

Strukturfelder

int exitcode

Exit-Code. Argument, das an exit() übergeben wird.

const char *err_msg

Fehlermeldung.

const char *func

Name der Funktion, die einen Fehler verursacht hat, kann NULL sein.

Funktionen zum Erstellen eines Status

PyStatus PyStatus_Ok(void)

Erfolg.

PyStatus PyStatus_Error(const char *err_msg)

Initialisierungsfehler mit einer Meldung.

err_msg darf nicht NULL sein.

PyStatus PyStatus_NoMemory(void)

Speicherzuweisungsfehler (nicht genügend Speicher).

PyStatus PyStatus_Exit(int exitcode)

Beendet Python mit dem angegebenen Exit-Code.

Funktionen zur Behandlung eines Status

int PyStatus_Exception(PyStatus status)

Ist der Status ein Fehler oder ein Beenden? Wenn wahr, muss die Ausnahme behandelt werden; beispielsweise durch Aufrufen von Py_ExitStatusException().

int PyStatus_IsError(PyStatus status)

Ist das Ergebnis ein Fehler?

int PyStatus_IsExit(PyStatus status)

Ist das Ergebnis ein Abbruch?

void Py_ExitStatusException(PyStatus status)

Rufen Sie exit(exitcode) auf, wenn status ein Abbruch ist. Geben Sie die Fehlermeldung aus und beenden Sie mit einem von Null verschiedenen Exit-Code, wenn status ein Fehler ist. Darf nur aufgerufen werden, wenn PyStatus_Exception(status) ungleich Null ist.

Hinweis

Intern verwendet Python Makros, die PyStatus.func setzen, während Funktionen zum Erstellen eines Status func auf NULL setzen.

Beispiel

PyStatus alloc(void **ptr, size_t size)
{
    *ptr = PyMem_RawMalloc(size);
    if (*ptr == NULL) {
        return PyStatus_NoMemory();
    }
    return PyStatus_Ok();
}

int main(int argc, char **argv)
{
    void *ptr;
    PyStatus status = alloc(&ptr, 16);
    if (PyStatus_Exception(status)) {
        Py_ExitStatusException(status);
    }
    PyMem_Free(ptr);
    return 0;
}

PyPreConfig

type PyPreConfig

Struktur zur Vorinitialisierung von Python.

Funktion zur Initialisierung einer Vorabkonfiguration

void PyPreConfig_InitPythonConfig(PyPreConfig *preconfig)

Initialisiert die Vorabkonfiguration mit der Python-Konfiguration.

void PyPreConfig_InitIsolatedConfig(PyPreConfig *preconfig)

Initialisiert die Vorabkonfiguration mit der isolierten Konfiguration.

Strukturfelder

int allocator

Name der Python-Speicherallokatoren

PYMEM_ALLOCATOR_PYMALLOC und PYMEM_ALLOCATOR_PYMALLOC_DEBUG werden nicht unterstützt, wenn Python mit --without-pymalloc konfiguriert wurde.

PYMEM_ALLOCATOR_MIMALLOC und PYMEM_ALLOCATOR_MIMALLOC_DEBUG werden nicht unterstützt, wenn Python mit --without-mimalloc konfiguriert wurde oder wenn die zugrunde liegende atomare Unterstützung nicht verfügbar ist.

Siehe Speicherverwaltung.

Standard: PYMEM_ALLOCATOR_NOT_SET.

int configure_locale

Setzt das LC_CTYPE-Gebietsschema auf das vom Benutzer bevorzugte Gebietsschema.

Wenn gleich 0, werden die Member coerce_c_locale und coerce_c_locale_warn auf 0 gesetzt.

Siehe Gebietsschema-Kodierung.

Standard: 1 in Python-Konfiguration, 0 in isolierter Konfiguration.

int coerce_c_locale

Wenn gleich 2, erzwinge das C-Gebietsschema.

Wenn gleich 1, lese das LC_CTYPE-Gebietsschema, um zu entscheiden, ob es erzwungen werden soll.

Siehe Gebietsschema-Kodierung.

Standard: -1 in Python-Konfiguration, 0 in isolierter Konfiguration.

int coerce_c_locale_warn

Wenn ungleich Null, gebe eine Warnung aus, wenn das C-Gebietsschema erzwungen wird.

Standard: -1 in Python-Konfiguration, 0 in isolierter Konfiguration.

int dev_mode

Python-Entwicklermodus: siehe PyConfig.dev_mode.

Standard: -1 im Python-Modus, 0 im isolierten Modus.

int isolated

Isolierter Modus: siehe PyConfig.isolated.

Standard: 0 im Python-Modus, 1 im isolierten Modus.

int legacy_windows_fs_encoding

Wenn ungleich Null

Initialisiert aus dem Wert der Umgebungsvariablen PYTHONLEGACYWINDOWSFSENCODING.

Nur unter Windows verfügbar. #ifdef MS_WINDOWS kann für Windows-spezifischen Code verwendet werden.

Standard: 0.

int parse_argv

Wenn ungleich Null, parsen Py_PreInitializeFromArgs() und Py_PreInitializeFromBytesArgs() ihr argv-Argument genauso wie das reguläre Python Kommandozeilenargumente parst: siehe Kommandozeilenargumente.

Standard: 1 in Python-Konfiguration, 0 in isolierter Konfiguration.

int use_environment

Umgebungsvariablen (Umgebungsvariablen) verwenden? Siehe PyConfig.use_environment.

Standard: 1 in Python-Konfiguration und 0 in isolierter Konfiguration.

int utf8_mode

Wenn ungleich Null, aktiviere den Python UTF-8-Modus.

Auf 0 oder 1 gesetzt durch die Kommandozeilenoption -X utf8 und die Umgebungsvariable PYTHONUTF8.

Ebenfalls auf 1 gesetzt, wenn das LC_CTYPE-Gebietsschema C oder POSIX ist.

Standard: -1 in Python-Konfiguration und 0 in isolierter Konfiguration.

Python mit PyPreConfig vorinitialisieren

Die Vorinitialisierung von Python

Die aktuelle Vorabkonfiguration (Typ PyPreConfig) wird in _PyRuntime.preconfig gespeichert.

Funktionen zur Vorinitialisierung von Python

PyStatus Py_PreInitialize(const PyPreConfig *preconfig)

Initialisiert Python aus der Vorabkonfiguration preconfig vor.

preconfig darf nicht NULL sein.

PyStatus Py_PreInitializeFromBytesArgs(const PyPreConfig *preconfig, int argc, char *const *argv)

Initialisiert Python aus der Vorabkonfiguration preconfig vor.

Parst die Kommandozeilenargumente argv (Byte-Strings), wenn parse_argv von preconfig ungleich Null ist.

preconfig darf nicht NULL sein.

PyStatus Py_PreInitializeFromArgs(const PyPreConfig *preconfig, int argc, wchar_t *const *argv)

Initialisiert Python aus der Vorabkonfiguration preconfig vor.

Parst die Kommandozeilenargumente argv (Wide-Strings), wenn parse_argv von preconfig ungleich Null ist.

preconfig darf nicht NULL sein.

Der Aufrufer ist verantwortlich für die Behandlung von Ausnahmen (Fehler oder Abbruch) mit PyStatus_Exception() und Py_ExitStatusException().

Für die Python-Konfiguration (PyPreConfig_InitPythonConfig()), wenn Python mit Kommandozeilenargumenten initialisiert wird, müssen die Kommandozeilenargumente auch zur Vorinitialisierung von Python übergeben werden, da sie die Vorabkonfiguration beeinflussen, z. B. Kodierungen. Zum Beispiel aktiviert die Kommandozeilenoption -X utf8 den Python UTF-8-Modus.

PyMem_SetAllocator() kann nach Py_PreInitialize() und vor Py_InitializeFromConfig() aufgerufen werden, um einen benutzerdefinierten Speicherallokator zu installieren. Er kann vor Py_PreInitialize() aufgerufen werden, wenn PyPreConfig.allocator auf PYMEM_ALLOCATOR_NOT_SET gesetzt ist.

Python-Speicherallokationsfunktionen wie PyMem_RawMalloc() dürfen vor der Python-Vorinitialisierung nicht verwendet werden, während das direkte Aufrufen von malloc() und free() immer sicher ist. Py_DecodeLocale() darf nicht vor der Python-Vorinitialisierung aufgerufen werden.

Beispiel zur Verwendung der Vorinitialisierung zur Aktivierung des Python UTF-8-Modus

PyStatus status;
PyPreConfig preconfig;
PyPreConfig_InitPythonConfig(&preconfig);

preconfig.utf8_mode = 1;

status = Py_PreInitialize(&preconfig);
if (PyStatus_Exception(status)) {
    Py_ExitStatusException(status);
}

/* at this point, Python speaks UTF-8 */

Py_Initialize();
/* ... use Python API here ... */
Py_Finalize();

PyConfig

type PyConfig

Struktur, die die meisten Parameter zur Konfiguration von Python enthält.

Nach Abschluss muss die Funktion PyConfig_Clear() verwendet werden, um den Speicher der Konfiguration freizugeben.

Strukturmethoden

void PyConfig_InitPythonConfig(PyConfig *config)

Initialisiert die Konfiguration mit der Python-Konfiguration.

void PyConfig_InitIsolatedConfig(PyConfig *config)

Initialisiert die Konfiguration mit der isolierten Konfiguration.

PyStatus PyConfig_SetString(PyConfig *config, wchar_t *const *config_str, const wchar_t *str)

Kopiert den Wide-Character-String str nach *config_str.

Python vorinitialisieren, falls erforderlich.

PyStatus PyConfig_SetBytesString(PyConfig *config, wchar_t *const *config_str, const char *str)

Dekodiert str mit Py_DecodeLocale() und setzt das Ergebnis in *config_str.

Python vorinitialisieren, falls erforderlich.

PyStatus PyConfig_SetArgv(PyConfig *config, int argc, wchar_t *const *argv)

Setzt die Kommandozeilenargumente (argv-Member von config) aus der Liste der Wide-Character-Strings argv.

Python vorinitialisieren, falls erforderlich.

PyStatus PyConfig_SetBytesArgv(PyConfig *config, int argc, char *const *argv)

Setzt die Kommandozeilenargumente (argv-Member von config) aus der Liste der Byte-Strings argv. Dekodiert Bytes mit Py_DecodeLocale().

Python vorinitialisieren, falls erforderlich.

PyStatus PyConfig_SetWideStringList(PyConfig *config, PyWideStringList *list, Py_ssize_t length, wchar_t **items)

Setzt die Liste von Wide-Strings list auf length und items.

Python vorinitialisieren, falls erforderlich.

PyStatus PyConfig_Read(PyConfig *config)

Liest die gesamte Python-Konfiguration.

Bereits initialisierte Felder bleiben unverändert.

Felder für die Pfadkonfiguration werden ab Python 3.11 bei Aufruf dieser Funktion nicht mehr berechnet oder modifiziert.

Die Funktion PyConfig_Read() parst die Argumente von PyConfig.argv nur einmal: PyConfig.parse_argv wird nach dem Parsen der Argumente auf 2 gesetzt. Da Python-Argumente aus PyConfig.argv entfernt werden, würde das Parsen der Argumente zweimal die Anwendungsoptionen als Python-Optionen parsen.

Python vorinitialisieren, falls erforderlich.

Geändert in Version 3.10: Die Argumente von PyConfig.argv werden nun nur noch einmal geparst, PyConfig.parse_argv wird nach dem Parsen der Argumente auf 2 gesetzt, und Argumente werden nur geparst, wenn PyConfig.parse_argv gleich 1 ist.

Geändert in Version 3.11: PyConfig_Read() berechnet nicht mehr alle Pfade, und daher werden Felder unter Python-Pfadkonfiguration möglicherweise erst aktualisiert, wenn Py_InitializeFromConfig() aufgerufen wird.

void PyConfig_Clear(PyConfig *config)

Gibt den Speicher der Konfiguration frei.

Die meisten PyConfig-Methoden initialisieren Python vor, falls erforderlich. In diesem Fall basiert die Vorinitialisierungskonfiguration von Python (PyPreConfig) auf PyConfig. Wenn Konfigurationsfelder, die mit PyPreConfig gemeinsam sind, abgestimmt werden, müssen sie vor dem Aufruf einer PyConfig-Methode gesetzt werden.

Darüber hinaus gilt: Wenn PyConfig_SetArgv() oder PyConfig_SetBytesArgv() verwendet wird, muss diese Methode zuerst aufgerufen werden, da die Vorinitialisierungskonfiguration von den Kommandozeilenargumenten abhängt (wenn parse_argv ungleich Null ist).

Der Aufrufer dieser Methoden ist verantwortlich für die Behandlung von Ausnahmen (Fehler oder Abbruch) mit PyStatus_Exception() und Py_ExitStatusException().

Strukturfelder

PyWideStringList argv

Setzt sys.argv Kommandozeilenargumente basierend auf argv. Diese Parameter ähneln denen, die an die main() Funktion des Programms übergeben werden, mit dem Unterschied, dass der erste Eintrag auf die auszuführende Skriptdatei verweisen sollte und nicht auf die ausführbare Datei, die den Python-Interpreter hostet. Wenn kein Skript ausgeführt wird, kann der erste Eintrag in argv ein leerer String sein.

Setzt parse_argv auf 1, um argv auf die gleiche Weise zu parsen, wie der reguläre Python Python-Kommandozeilenargumente parst, und dann Python-Argumente aus argv zu entfernen.

Wenn argv leer ist, wird ein leerer String hinzugefügt, um sicherzustellen, dass sys.argv immer existiert und nie leer ist.

Standard: NULL.

Siehe auch das Mitglied orig_argv.

int safe_path

Wenn gleich null ist, fügt Py_RunMain() beim Start einen potenziell unsicheren Pfad zu sys.path hinzu

  • Wenn argv[0] gleich L"-m" (python -m modul) ist, wird das aktuelle Arbeitsverzeichnis vorangestellt.

  • Wenn ein Skript ausgeführt wird (python skript.py), wird das Verzeichnis des Skripts vorangestellt. Wenn es sich um einen symbolischen Link handelt, werden symbolische Links aufgelöst.

  • Andernfalls (python -c code und python) wird ein leerer String vorangestellt, was dem aktuellen Arbeitsverzeichnis entspricht.

Gesetzt auf 1 durch die Kommandozeilenoption -P und die Umgebungsvariable PYTHONSAFEPATH.

Standard: 0 in Python-Konfiguration, 1 in isolierter Konfiguration.

Hinzugefügt in Version 3.11.

wchar_t *base_exec_prefix

sys.base_exec_prefix.

Standard: NULL.

Teil der Ausgabe der Python Pfadkonfiguration.

Siehe auch PyConfig.exec_prefix.

wchar_t *base_executable

Python Basis-Executable: sys._base_executable.

Gesetzt durch die Umgebungsvariable __PYVENV_LAUNCHER__.

Gesetzt aus PyConfig.executable, wenn NULL.

Standard: NULL.

Teil der Ausgabe der Python Pfadkonfiguration.

Siehe auch PyConfig.executable.

wchar_t *base_prefix

sys.base_prefix.

Standard: NULL.

Teil der Ausgabe der Python Pfadkonfiguration.

Siehe auch PyConfig.prefix.

int buffered_stdio

Wenn gleich 0 und configure_c_stdio ungleich null ist, deaktiviert die Pufferung auf den C-Streams stdout und stderr.

Gesetzt auf 0 durch die Kommandozeilenoption -u und die Umgebungsvariable PYTHONUNBUFFERED.

stdin wird immer im Pufferungsmodus geöffnet.

Standard: 1.

int bytes_warning

Wenn gleich 1, wird eine Warnung ausgegeben, wenn bytes oder bytearray mit str verglichen werden, oder wenn bytes mit int verglichen werden.

Wenn gleich oder größer als 2, wird in diesen Fällen eine BytesWarning Ausnahme ausgelöst.

Inkrementiert durch die Kommandozeilenoption -b.

Standard: 0.

int warn_default_encoding

Wenn ungleich null, wird eine EncodingWarning Warnung ausgegeben, wenn io.TextIOWrapper seine Standardkodierung verwendet. Siehe Opt-in EncodingWarning für Details.

Standard: 0.

Hinzugefügt in Version 3.10.

int code_debug_ranges

Wenn gleich 0, deaktiviert die Einbeziehung der Endzeilen- und Spaltenzuordnungen in Code-Objekte. Deaktiviert auch das Drucken von Tracebacks mit Carets auf spezifische Fehlerpositionen.

Gesetzt auf 0 durch die Umgebungsvariable PYTHONNODEBUGRANGES und durch die Kommandozeilenoption -X no_debug_ranges.

Standard: 1.

Hinzugefügt in Version 3.11.

wchar_t *check_hash_pycs_mode

Steuert das Validierungsverhalten von Hash-basierten .pyc Dateien: Wert der Kommandozeilenoption --check-hash-based-pycs.

Gültige Werte

  • L"always": Hash der Quellcodedatei für die Invalidierung, unabhängig vom Wert des 'check_source'-Flags.

  • L"never": Geht davon aus, dass Hash-basierte pycs immer gültig sind.

  • L"default": Das 'check_source'-Flag in Hash-basierten pycs bestimmt die Invalidierung.

Standard: L"default".

Siehe auch PEP 552 „Deterministic pycs“.

int configure_c_stdio

Wenn ungleich null, konfiguriert C Standard-Streams

  • Unter Windows wird der Binärmodus (O_BINARY) für stdin, stdout und stderr gesetzt.

  • Wenn buffered_stdio gleich null ist, wird die Pufferung von stdin, stdout und stderr Streams deaktiviert.

  • Wenn interactive ungleich null ist, wird die Stream-Pufferung für stdin und stdout aktiviert (nur stdout unter Windows).

Standard: 1 in Python-Konfiguration, 0 in isolierter Konfiguration.

int dev_mode

Wenn ungleich null, aktiviert den Python Entwicklungsmodus.

Gesetzt auf 1 durch die Option -X dev und die Umgebungsvariable PYTHONDEVMODE.

Standard: -1 im Python-Modus, 0 im isolierten Modus.

int dump_refs

Python Referenzen ausgeben?

Wenn ungleich null, werden alle Objekte ausgegeben, die beim Beenden noch am Leben sind.

Gesetzt auf 1 durch die Umgebungsvariable PYTHONDUMPREFS.

Benötigt eine spezielle Python-Build mit der definierten Makro Py_TRACE_REFS: siehe die Option configure --with-trace-refs option.

Standard: 0.

wchar_t *dump_refs_file

Dateiname, in den Python Referenzen ausgegeben werden sollen.

Gesetzt durch die Umgebungsvariable PYTHONDUMPREFSFILE.

Standard: NULL.

Hinzugefügt in Version 3.11.

wchar_t *exec_prefix

Das standortspezifische Verzeichnispräfix, in das die plattformabhängigen Python-Dateien installiert werden: sys.exec_prefix.

Standard: NULL.

Teil der Ausgabe der Python Pfadkonfiguration.

Siehe auch PyConfig.base_exec_prefix.

wchar_t *executable

Der absolute Pfad der ausführbaren Binärdatei für den Python-Interpreter: sys.executable.

Standard: NULL.

Teil der Ausgabe der Python Pfadkonfiguration.

Siehe auch PyConfig.base_executable.

int faulthandler

Faulthandler aktivieren?

Wenn ungleich null, wird faulthandler.enable() beim Start aufgerufen.

Gesetzt auf 1 durch -X faulthandler und die Umgebungsvariable PYTHONFAULTHANDLER.

Standard: -1 im Python-Modus, 0 im isolierten Modus.

wchar_t *filesystem_encoding

Dateisystemkodierung: sys.getfilesystemencoding().

Unter macOS, Android und VxWorks: Standardmäßig wird "utf-8" verwendet.

Unter Windows: Standardmäßig wird "utf-8" verwendet, oder "mbcs", wenn legacy_windows_fs_encoding von PyPreConfig ungleich null ist.

Standardkodierung auf anderen Plattformen

  • "utf-8", wenn PyPreConfig.utf8_mode ungleich null ist.

  • "ascii", wenn Python erkennt, dass nl_langinfo(CODESET) die ASCII-Kodierung ankündigt, während die Funktion mbstowcs() aus einer anderen Kodierung dekodiert (normalerweise Latin1).

  • "utf-8", wenn nl_langinfo(CODESET) einen leeren String zurückgibt.

  • Andernfalls wird die Locale-Kodierung verwendet: Ergebnis von nl_langinfo(CODESET).

Beim Python-Start wird der Name der Kodierung in den Python-Codec-Namen normalisiert. Zum Beispiel wird "ANSI_X3.4-1968" durch "ascii" ersetzt.

Siehe auch das Mitglied filesystem_errors.

wchar_t *filesystem_errors

Dateisystem-Fehlerbehandlung: sys.getfilesystemencodeerrors().

Unter Windows: Standardmäßig wird "surrogatepass" verwendet, oder "replace", wenn legacy_windows_fs_encoding von PyPreConfig ungleich null ist.

Auf anderen Plattformen: Standardmäßig wird "surrogateescape" verwendet.

Unterstützte Fehlerbehandler

  • "strict"

  • "surrogateescape"

  • "surrogatepass" (nur unterstützt mit der UTF-8-Kodierung)

Siehe auch das Mitglied filesystem_encoding.

int use_frozen_modules

Wenn ungleich null, werden eingefrorene Module verwendet.

Gesetzt durch die Umgebungsvariable PYTHON_FROZEN_MODULES.

Standard: 1 in einem Release-Build, oder 0 in einem Debug-Build.

unsigned long hash_seed
int use_hash_seed

Zufälliger Seed für die Hash-Funktion.

Wenn use_hash_seed null ist, wird beim Python-Start zufällig ein Seed gewählt, und hash_seed wird ignoriert.

Gesetzt durch die Umgebungsvariable PYTHONHASHSEED.

Standardwert für use_hash_seed: -1 im Python-Modus, 0 im isolierten Modus.

wchar_t *home

Setzt das Standard-Python-„Home“-Verzeichnis, d. h. den Speicherort der Standard-Python-Bibliotheken (siehe PYTHONHOME).

Gesetzt durch die Umgebungsvariable PYTHONHOME.

Standard: NULL.

Teil der Eingabe der Python Pfadkonfiguration.

int import_time

Wenn 1, wird die Importzeit profiliert. Wenn 2, werden zusätzliche Ausgaben eingeschlossen, die anzeigen, wann ein importiertes Modul bereits geladen wurde.

Gesetzt durch die Option -X importtime und die Umgebungsvariable PYTHONPROFILEIMPORTTIME.

Standard: 0.

Geändert in Version 3.14: Unterstützung für import_time = 2 hinzugefügt

int inspect

Interaktiven Modus nach Ausführung eines Skripts oder Befehls aufrufen.

Wenn größer als 0, wird Inspect aktiviert: Wenn ein Skript als erstes Argument übergeben wird oder die Option -c verwendet wird, wird nach Ausführung des Skripts oder Befehls in den interaktiven Modus gewechselt, auch wenn sys.stdin kein Terminal zu sein scheint.

Inkrementiert durch die Kommandozeilenoption -i. Gesetzt auf 1, wenn die Umgebungsvariable PYTHONINSPECT nicht leer ist.

Standard: 0.

int install_signal_handlers

Python Signal-Handler installieren?

Standard: 1 im Python-Modus, 0 im isolierten Modus.

int interactive

Wenn größer als 0, wird der interaktive Modus (REPL) aktiviert.

Inkrementiert durch die Kommandozeilenoption -i.

Standard: 0.

int int_max_str_digits

Konfiguriert die Längenbeschränkung für die Integer-String-Konvertierung. Ein initialer Wert von -1 bedeutet, dass der Wert von der Kommandozeile oder Umgebung übernommen wird oder andernfalls auf 4300 standardmäßig gesetzt wird (sys.int_info.default_max_str_digits). Ein Wert von 0 deaktiviert die Beschränkung. Werte größer als null, aber kleiner als 640 (sys.int_info.str_digits_check_threshold) sind nicht unterstützt und führen zu einem Fehler.

Konfiguriert durch das Kommandozeilenflag -X int_max_str_digits oder die Umgebungsvariable PYTHONINTMAXSTRDIGITS.

Standard: -1 im Python-Modus. 4300 (sys.int_info.default_max_str_digits) im isolierten Modus.

Hinzugefügt in Version 3.12.

int cpu_count

Wenn der Wert von cpu_count nicht -1 ist, überschreibt er die Rückgabewerte von os.cpu_count(), os.process_cpu_count() und multiprocessing.cpu_count().

Konfiguriert durch das Kommandozeilenflag -X cpu_count=n|default oder die Umgebungsvariable PYTHON_CPU_COUNT.

Standard: -1.

Hinzugefügt in Version 3.13.

int isolated

Wenn größer als 0, wird der isolierte Modus aktiviert

  • Setzt safe_path auf 1: fügt keinen potenziell unsicheren Pfad zu sys.path beim Python-Start hinzu, wie das aktuelle Verzeichnis, das Verzeichnis des Skripts oder ein leerer String.

  • Setzt use_environment auf 0: ignoriert PYTHON Umgebungsvariablen.

  • Setzt user_site_directory auf 0: fügt das Benutzer-Site-Verzeichnis nicht zu sys.path hinzu.

  • Der Python REPL importiert readline nicht und aktiviert keine Standard-Readline-Konfiguration auf interaktiven Eingabeaufforderungen.

Gesetzt auf 1 durch die Kommandozeilenoption -I.

Standard: 0 im Python-Modus, 1 im isolierten Modus.

Siehe auch die Isolierte Konfiguration und PyPreConfig.isolated.

int legacy_windows_stdio

Wenn ungleich null, wird io.FileIO anstelle von io._WindowsConsoleIO für sys.stdin, sys.stdout und sys.stderr verwendet.

Gesetzt auf 1, wenn die Umgebungsvariable PYTHONLEGACYWINDOWSSTDIO auf einen nicht leeren String gesetzt ist.

Nur unter Windows verfügbar. #ifdef MS_WINDOWS kann für Windows-spezifischen Code verwendet werden.

Standard: 0.

Siehe auch PEP 528 (Änderung der Windows-Konsolenkodierung zu UTF-8).

int malloc_stats

Wenn ungleich null, werden beim Beenden Statistiken über den Python Pymalloc-Speicherallokator ausgegeben.

Gesetzt auf 1 durch die Umgebungsvariable PYTHONMALLOCSTATS.

Die Option wird ignoriert, wenn Python mit der Option configure using the --without-pymalloc option konfiguriert wurde.

Standard: 0.

wchar_t *platlibdir

Plattform-Bibliotheksverzeichnisname: sys.platlibdir.

Gesetzt durch die Umgebungsvariable PYTHONPLATLIBDIR.

Standard: Wert des Makros PLATLIBDIR, das durch die configure --with-platlibdir Option gesetzt wird (Standard: "lib", oder "DLLs" unter Windows).

Teil der Eingabe der Python Pfadkonfiguration.

Hinzugefügt in Version 3.9.

Geändert in Version 3.11: Dieses Makro wird nun unter Windows verwendet, um die Standard-Bibliotheks-Erweiterungsmodule zu lokalisieren, typischerweise unter DLLs. Aus Kompatibilitätsgründen beachten Sie jedoch, dass dieser Wert für beliebige Nicht-Standard-Layouts, einschließlich In-Tree-Builds und virtueller Umgebungen, ignoriert wird.

wchar_t *pythonpath_env

Modul-Suchpfade (sys.path) als durch DELIM getrennter String (os.pathsep).

Gesetzt durch die Umgebungsvariable PYTHONPATH.

Standard: NULL.

Teil der Eingabe der Python Pfadkonfiguration.

PyWideStringList module_search_paths
int module_search_paths_set

Modul-Suchpfade: sys.path.

Wenn module_search_paths_set gleich 0 ist, ersetzt Py_InitializeFromConfig() module_search_paths und setzt module_search_paths_set auf 1.

Standard: leere Liste (module_search_paths) und 0 (module_search_paths_set).

Teil der Ausgabe der Python Pfadkonfiguration.

int optimization_level

Kompilierungs-Optimierungsstufe

  • 0: Peephole-Optimierer, setzt __debug__ auf True.

  • 1: Stufe 0, entfernt Assertions, setzt __debug__ auf False.

  • 2: Stufe 1, entfernt Docstrings.

Inkrementiert durch die Kommandozeilenoption -O. Wird auf den Wert der Umgebungsvariable PYTHONOPTIMIZE gesetzt.

Standard: 0.

PyWideStringList orig_argv

Die Liste der ursprünglichen Kommandozeilenargumente, die an die Python-Executable übergeben wurden: sys.orig_argv.

Wenn die Liste orig_argv leer ist und argv keine Liste ist, die nur einen leeren String enthält, kopiert PyConfig_Read() argv nach orig_argv, bevor argv modifiziert wird (falls parse_argv ungleich Null ist).

Siehe auch das Mitglied argv und die Funktion Py_GetArgcArgv().

Standard: leere Liste.

Hinzugefügt in Version 3.10.

int parse_argv

Kommandozeilenargumente parsen?

Wenn gleich 1, parst argv auf dieselbe Weise wie das reguläre Python Kommandozeilenargumente parst, und entfernt Python-Argumente aus argv.

Die Funktion PyConfig_Read() parst die Argumente von PyConfig.argv nur einmal: PyConfig.parse_argv wird nach dem Parsen der Argumente auf 2 gesetzt. Da Python-Argumente aus PyConfig.argv entfernt werden, würde das Parsen der Argumente zweimal die Anwendungsoptionen als Python-Optionen parsen.

Standard: 1 im Python-Modus, 0 im isolierten Modus.

Geändert in Version 3.10: Die Argumente von PyConfig.argv werden nun nur geparst, wenn PyConfig.parse_argv gleich 1 ist.

int parser_debug

Parser-Debug-Modus. Wenn größer als 0, schaltet die Parser-Debugging-Ausgabe ein (nur für Experten, abhängig von den Kompilierungsoptionen).

Inkrementiert durch die Kommandozeilenoption -d. Wird auf den Wert der Umgebungsvariable PYTHONDEBUG gesetzt.

Benötigt einen Debug-Build von Python (das Makro Py_DEBUG muss definiert sein).

Standard: 0.

int pathconfig_warnings

Wenn ungleich Null, darf die Berechnung der Pfadkonfiguration Warnungen nach stderr protokollieren. Wenn gleich 0, werden diese Warnungen unterdrückt.

Standard: 1 im Python-Modus, 0 im isolierten Modus.

Teil der Eingabe der Python Pfadkonfiguration.

Geändert in Version 3.11: Gilt nun auch unter Windows.

wchar_t *prefix

Das standortspezifische Verzeichnispräfix, unter dem die plattformunabhängigen Python-Dateien installiert sind: sys.prefix.

Standard: NULL.

Teil der Ausgabe der Python Pfadkonfiguration.

Siehe auch PyConfig.base_prefix.

wchar_t *program_name

Programmname, der zur Initialisierung von executable und in frühen Fehlermeldungen während der Python-Initialisierung verwendet wird.

  • Unter macOS wird die Umgebungsvariable PYTHONEXECUTABLE verwendet, falls gesetzt.

  • Wenn das Makro WITH_NEXT_FRAMEWORK definiert ist, wird die Umgebungsvariable __PYVENV_LAUNCHER__ verwendet, falls gesetzt.

  • Verwendet argv[0] von argv, falls verfügbar und nicht leer.

  • Andernfalls wird L"python" unter Windows oder L"python3" auf anderen Plattformen verwendet.

Standard: NULL.

Teil der Eingabe der Python Pfadkonfiguration.

wchar_t *pycache_prefix

Verzeichnis, in das die zwischengespeicherten .pyc-Dateien geschrieben werden: sys.pycache_prefix.

Gesetzt durch die Kommandozeilenoption -X pycache_prefix=PATH und die Umgebungsvariable PYTHONPYCACHEPREFIX. Die Kommandozeilenoption hat Vorrang.

Wenn NULL, wird sys.pycache_prefix auf None gesetzt.

Standard: NULL.

int quiet

Leiser Modus. Wenn größer als 0, wird die Copyright- und Versionsmeldung beim Python-Start im interaktiven Modus nicht angezeigt.

Inkrementiert durch die Kommandozeilenoption -q.

Standard: 0.

wchar_t *run_command

Wert der Kommandozeilenoption -c.

Wird von Py_RunMain() verwendet.

Standard: NULL.

wchar_t *run_filename

Dateiname, der in der Kommandozeile übergeben wird: der letzte Kommandozeilenargument ohne -c oder -m. Er wird von der Funktion Py_RunMain() verwendet.

Zum Beispiel wird er zu script.py durch die Kommandozeile python3 script.py arg gesetzt.

Siehe auch die Option PyConfig.skip_source_first_line.

Standard: NULL.

wchar_t *run_module

Wert der Kommandozeilenoption -m.

Wird von Py_RunMain() verwendet.

Standard: NULL.

wchar_t *run_presite

package.module Pfad zu einem Modul, das importiert werden soll, bevor site.py ausgeführt wird.

Gesetzt durch die Kommandozeilenoption -X presite=package.module und die Umgebungsvariable PYTHON_PRESITE. Die Kommandozeilenoption hat Vorrang.

Benötigt einen Debug-Build von Python (das Makro Py_DEBUG muss definiert sein).

Standard: NULL.

int show_ref_count

Gesamte Referenzanzahl beim Beenden anzeigen (ohne unsterbliche Objekte)?

Wird durch die Kommandozeilenoption -X showrefcount auf 1 gesetzt.

Benötigt einen Debug-Build von Python (das Makro Py_REF_DEBUG muss definiert sein).

Standard: 0.

int site_import

Das Modul site beim Start importieren?

Wenn gleich Null, wird der Import des Moduls site und die damit verbundenen standortabhängigen Manipulationen von sys.path deaktiviert.

Diese Manipulationen werden auch deaktiviert, wenn das Modul site später explizit importiert wird (rufen Sie site.main() auf, wenn Sie sie auslösen möchten).

Wird durch die Kommandozeilenoption -S auf 0 gesetzt.

sys.flags.no_site wird auf den invertierten Wert von site_import gesetzt.

Standard: 1.

int skip_source_first_line

Wenn ungleich Null, überspringt die erste Zeile der Quelldatei von PyConfig.run_filename.

Dies ermöglicht die Verwendung von Nicht-Unix-Formen von #!cmd. Dies ist nur für einen DOS-spezifischen Hack gedacht.

Wird durch die Kommandozeilenoption -x auf 1 gesetzt.

Standard: 0.

wchar_t *stdio_encoding
wchar_t *stdio_errors

Encoding und Fehlerbehandlung von sys.stdin, sys.stdout und sys.stderr (aber sys.stderr verwendet immer den Fehlerhandler "backslashreplace").

Verwendet die Umgebungsvariable PYTHONIOENCODING, wenn sie nicht leer ist.

Standard-Encoding

Standard-Fehlerbehandler

  • Unter Windows: verwendet "surrogateescape".

  • "surrogateescape", wenn PyPreConfig.utf8_mode ungleich Null ist, oder wenn das LC_CTYPE-Locale „C“ oder „POSIX“ ist.

  • "strict" andernfalls.

Siehe auch PyConfig.legacy_windows_stdio.

int tracemalloc

tracemalloc aktivieren?

Wenn ungleich Null, wird tracemalloc.start() beim Start aufgerufen.

Gesetzt durch die Kommandozeilenoption -X tracemalloc=N und die Umgebungsvariable PYTHONTRACEMALLOC.

Standard: -1 im Python-Modus, 0 im isolierten Modus.

int perf_profiling

Linux perf Profiler-Unterstützung aktivieren?

Wenn gleich 1, wird die Unterstützung für den Linux perf Profiler aktiviert.

Wenn gleich 2, wird die Unterstützung für den Linux perf Profiler mit DWARF JIT-Unterstützung aktiviert.

Wird durch die Kommandozeilenoption -X perf und die Umgebungsvariable PYTHONPERFSUPPORT auf 1 gesetzt.

Wird durch die Kommandozeilenoption -X perf_jit und die Umgebungsvariable PYTHON_PERF_JIT_SUPPORT auf 2 gesetzt.

Standard: -1.

Siehe auch

Weitere Informationen finden Sie unter Python-Unterstützung für den Linux perf Profiler.

Hinzugefügt in Version 3.12.

wchar_t *stdlib_dir

Verzeichnis der Python-Standardbibliothek.

Standard: NULL.

Hinzugefügt in Version 3.11.

int use_environment

Umgebungsvariablen verwenden?

Wenn gleich Null, werden die Umgebungsvariablen ignoriert.

Wird durch die Umgebungsvariable -E auf 0 gesetzt.

Standard: 1 in Python-Konfiguration und 0 in isolierter Konfiguration.

int use_system_logger

Wenn ungleich Null, werden stdout und stderr in das Systemprotokoll umgeleitet.

Nur verfügbar unter macOS 10.12 und neuer sowie unter iOS.

Standard: 0 (kein Systemprotokoll verwenden) unter macOS; 1 unter iOS (Systemprotokoll verwenden).

Hinzugefügt in Version 3.14.

int user_site_directory

Wenn ungleich Null, wird das Benutzer-Site-Verzeichnis zu sys.path hinzugefügt.

Wird durch die Kommandozeilenoptionen -s und -I auf 0 gesetzt.

Wird durch die Umgebungsvariable PYTHONNOUSERSITE auf 0 gesetzt.

Standard: 1 im Python-Modus, 0 im isolierten Modus.

int verbose

Ausführlicher Modus. Wenn größer als 0, wird bei jedem Modulimport eine Meldung ausgegeben, die den Ort (Dateiname oder integriertes Modul) anzeigt, von dem es geladen wird.

Wenn größer oder gleich 2, wird für jede Datei, die bei der Suche nach einem Modul geprüft wird, eine Meldung ausgegeben. Bietet auch Informationen zur Modulbereinigung beim Beenden.

Inkrementiert durch die Kommandozeilenoption -v.

Wird durch den Wert der Umgebungsvariable PYTHONVERBOSE gesetzt.

Standard: 0.

PyWideStringList warnoptions

Optionen des Moduls warnings zum Aufbau von Warnfiltern, von niedrigster zu höchster Priorität: sys.warnoptions.

Das Modul warnings fügt sys.warnoptions in umgekehrter Reihenfolge hinzu: das letzte Element von PyConfig.warnoptions wird zum ersten Element von warnings.filters, das zuerst geprüft wird (höchste Priorität).

Die Kommandozeilenoption -W fügt ihren Wert zu warnoptions hinzu, sie kann mehrfach verwendet werden.

Die Umgebungsvariable PYTHONWARNINGS kann ebenfalls verwendet werden, um Warnoptionen hinzuzufügen. Mehrere Optionen können durch Kommas (,) getrennt angegeben werden.

Standard: leere Liste.

int write_bytecode

Wenn gleich 0, wird Python beim Import von Quellcode-Modulen nicht versuchen, .pyc-Dateien zu schreiben.

Wird durch die Kommandozeilenoption -B und die Umgebungsvariable PYTHONDONTWRITEBYTECODE auf 0 gesetzt.

sys.dont_write_bytecode wird mit dem invertierten Wert von write_bytecode initialisiert.

Standard: 1.

PyWideStringList xoptions

Werte der Kommandozeilenoptionen -X: sys._xoptions.

Standard: leere Liste.

int _pystats

Wenn ungleich Null, schreibe Performance-Statistiken beim Beenden von Python.

Benötigt einen speziellen Build mit dem Makro Py_STATS: siehe --enable-pystats.

Standard: 0.

Wenn parse_argv ungleich Null ist, werden die argv-Argumente auf die gleiche Weise wie die regulären Python-Argumente auf der Kommandozeile geparst, und Python-Argumente werden aus argv entfernt.

Die xoptions-Optionen werden zum Setzen anderer Optionen geparst: siehe die Kommandozeilenoption -X.

Geändert in Version 3.9: Das Feld show_alloc_count wurde entfernt.

Initialisierung mit PyConfig

Die Initialisierung des Interpreters aus einer gefüllten Konfigurationsstruktur erfolgt durch Aufrufen von Py_InitializeFromConfig().

Der Aufrufer ist verantwortlich für die Behandlung von Ausnahmen (Fehler oder Abbruch) mit PyStatus_Exception() und Py_ExitStatusException().

Wenn PyImport_FrozenModules(), PyImport_AppendInittab() oder PyImport_ExtendInittab() verwendet werden, müssen sie nach der Python-Vorinitialisierung und vor der Python-Initialisierung gesetzt oder aufgerufen werden. Wenn Python mehrmals initialisiert wird, müssen PyImport_AppendInittab() oder PyImport_ExtendInittab() vor jeder Python-Initialisierung aufgerufen werden.

Die aktuelle Konfiguration (Typ PyConfig) wird in PyInterpreterState.config gespeichert.

Beispiel: Setzen des Programmnamens

void init_python(void)
{
    PyStatus status;

    PyConfig config;
    PyConfig_InitPythonConfig(&config);

    /* Set the program name. Implicitly preinitialize Python. */
    status = PyConfig_SetString(&config, &config.program_name,
                                L"/path/to/my_program");
    if (PyStatus_Exception(status)) {
        goto exception;
    }

    status = Py_InitializeFromConfig(&config);
    if (PyStatus_Exception(status)) {
        goto exception;
    }
    PyConfig_Clear(&config);
    return;

exception:
    PyConfig_Clear(&config);
    Py_ExitStatusException(status);
}

Vollständigeres Beispiel zum Modifizieren der Standardkonfiguration, Lesen der Konfiguration und Überschreiben einiger Parameter. Beachten Sie, dass seit 3.11 viele Parameter erst bei der Initialisierung berechnet werden, daher können Werte nicht aus der Konfigurationsstruktur gelesen werden. Alle Werte, die vor dem Aufruf von initialize gesetzt werden, bleiben bei der Initialisierung unverändert.

PyStatus init_python(const char *program_name)
{
    PyStatus status;

    PyConfig config;
    PyConfig_InitPythonConfig(&config);

    /* Set the program name before reading the configuration
       (decode byte string from the locale encoding).

       Implicitly preinitialize Python. */
    status = PyConfig_SetBytesString(&config, &config.program_name,
                                     program_name);
    if (PyStatus_Exception(status)) {
        goto done;
    }

    /* Read all configuration at once */
    status = PyConfig_Read(&config);
    if (PyStatus_Exception(status)) {
        goto done;
    }

    /* Specify sys.path explicitly */
    /* If you want to modify the default set of paths, finish
       initialization first and then use PySys_GetObject("path") */
    config.module_search_paths_set = 1;
    status = PyWideStringList_Append(&config.module_search_paths,
                                     L"/path/to/stdlib");
    if (PyStatus_Exception(status)) {
        goto done;
    }
    status = PyWideStringList_Append(&config.module_search_paths,
                                     L"/path/to/more/modules");
    if (PyStatus_Exception(status)) {
        goto done;
    }

    /* Override executable computed by PyConfig_Read() */
    status = PyConfig_SetString(&config, &config.executable,
                                L"/path/to/my_executable");
    if (PyStatus_Exception(status)) {
        goto done;
    }

    status = Py_InitializeFromConfig(&config);

done:
    PyConfig_Clear(&config);
    return status;
}

Isolierte Konfiguration

PyPreConfig_InitIsolatedConfig() und PyConfig_InitIsolatedConfig() erstellen eine Konfiguration, um Python vom System zu isolieren. Zum Beispiel, um Python in eine Anwendung einzubetten.

Diese Konfiguration ignoriert globale Konfigurationsvariablen, Umgebungsvariablen, Kommandozeilenargumente (PyConfig.argv wird nicht geparst) und das Benutzer-Site-Verzeichnis. Die C-Standard-Streams (z. B. stdout) und das LC_CTYPE-Locale bleiben unverändert. Signal-Handler werden nicht installiert.

Konfigurationsdateien werden weiterhin mit dieser Konfiguration verwendet, um nicht spezifizierte Pfade zu ermitteln. Stellen Sie sicher, dass PyConfig.home angegeben ist, um die Berechnung des Standardpfadkonfigurators zu vermeiden.

Python-Konfiguration

PyPreConfig_InitPythonConfig() und PyConfig_InitPythonConfig() erstellen eine Konfiguration, um ein angepasstes Python zu erstellen, das sich wie das reguläre Python verhält.

Umgebungsvariablen und Kommandozeilenargumente werden zur Konfiguration von Python verwendet, während globale Konfigurationsvariablen ignoriert werden.

Diese Funktion aktiviert die C-Locale-Koerzion (PEP 538) und den Python UTF-8-Modus (PEP 540) abhängig vom LC_CTYPE-Locale, den Umgebungsvariablen PYTHONUTF8 und PYTHONCOERCECLOCALE.

Python-Pfadkonfiguration

PyConfig enthält mehrere Felder für die Pfadkonfiguration.

Wenn mindestens ein „Ausgabefeld“ nicht gesetzt ist, berechnet Python die Pfadkonfiguration, um die ungesetzten Felder zu füllen. Wenn module_search_paths_set gleich 0 ist, wird module_search_paths überschrieben und module_search_paths_set auf 1 gesetzt.

Es ist möglich, die Berechnung der Standardpfadkonfiguration vollständig zu ignorieren, indem alle oben aufgeführten Ausgabefelder für die Pfadkonfiguration explizit gesetzt werden. Ein String wird als gesetzt betrachtet, auch wenn er nicht leer ist. module_search_paths wird als gesetzt betrachtet, wenn module_search_paths_set auf 1 gesetzt ist. In diesem Fall wird module_search_paths ohne Änderung verwendet.

Setzen Sie pathconfig_warnings auf 0, um Warnungen bei der Berechnung der Pfadkonfiguration zu unterdrücken (nur Unix, Windows gibt keine Warnungen aus).

Wenn die Felder base_prefix oder base_exec_prefix nicht gesetzt sind, erben sie ihren Wert von prefix bzw. exec_prefix.

Py_RunMain() und Py_Main() modifizieren sys.path.

  • Wenn run_filename gesetzt ist und ein Verzeichnis ist, das ein __main__.py Skript enthält, wird run_filename vor sys.path gestellt.

  • Wenn isolated Null ist.

    • Wenn run_module gesetzt ist, wird das aktuelle Verzeichnis vor sys.path gestellt. Es passiert nichts, wenn das aktuelle Verzeichnis nicht gelesen werden kann.

    • Wenn run_filename gesetzt ist, wird das Verzeichnis des Dateinamens vor sys.path gestellt.

    • Andernfalls wird ein leerer String vor sys.path gestellt.

Wenn site_import ungleich Null ist, kann sys.path vom site-Modul modifiziert werden. Wenn user_site_directory ungleich Null ist und das Verzeichnis der Benutzer-Site-Pakete existiert, fügt das site-Modul das Verzeichnis der Benutzer-Site-Pakete zu sys.path hinzu.

Die folgenden Konfigurationsdateien werden von der Pfadkonfiguration verwendet:

  • pyvenv.cfg

  • ._pth-Datei (z. B. python._pth)

  • pybuilddir.txt (nur Unix)

Wenn eine ._pth-Datei vorhanden ist.

Wenn home nicht gesetzt ist und eine pyvenv.cfg-Datei im selben Verzeichnis wie executable oder dessen Elternverzeichnis vorhanden ist, werden prefix und exec_prefix an diesem Ort gesetzt. Wenn dies geschieht, behalten base_prefix und base_exec_prefix ihren Wert und verweisen auf die Basisinstallation. Siehe Virtuelle Umgebungen für weitere Informationen.

Die Umgebungsvariable __PYVENV_LAUNCHER__ wird verwendet, um PyConfig.base_executable zu setzen.

Geändert in Version 3.14: prefix und exec_prefix werden jetzt auf das Verzeichnis von pyvenv.cfg gesetzt. Dies wurde zuvor von site erledigt und war daher von -S betroffen.

Py_GetArgcArgv()

void Py_GetArgcArgv(int *argc, wchar_t ***argv)

Ruft die ursprünglichen Kommandozeilenargumente ab, bevor Python sie modifiziert hat.

Siehe auch das Feld PyConfig.orig_argv.

Verzögerung der Ausführung des Hauptmoduls

In einigen Einbettungsanwendungsfällen kann es wünschenswert sein, die Interpreterinitialisierung von der Ausführung des Hauptmoduls zu trennen.

Diese Trennung kann erreicht werden, indem PyConfig.run_command während der Initialisierung auf einen leeren String gesetzt wird (um zu verhindern, dass der Interpreter in die interaktive Eingabeaufforderung wechselt) und anschließend der gewünschte Hauptmodulcode über __main__.__dict__ als globalen Namensraum ausgeführt wird.