Python

파이썬 초기화 구성

PyInitConfig C API

Added in version 3.14.

파이썬은 Py_InitializeFromInitConfig() 를 통해 초기화할 수 있습니다.

Py_RunMain() 함수를 사용하여 맞춤형 파이썬 프로그램을 작성할 수 있습니다.

초기화, 파이널리제이션 및 스레드도 참조하십시오.

더 보기

PEP 741 “Python Configuration C API”.

예시

Python Development Mode <devmode>`를 활성화한 상태에서 항상 실행되는 맞춤형 파이썬 예시입니다. 오류 시 `-1``을 반환합니다:

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

    // 파이썬 개발 모드를 활성화합니다
    if (PyInitConfig_SetInt(config, "dev_mode", 1) < 0) {
        goto error;
    }

    // 설정을 사용하여 파이썬을 초기화합니다
    if (Py_InitializeFromInitConfig(config) < 0) {
        goto error;
    }
    PyInitConfig_Free(config);
    return 0;

error:
    {
        // 에러 메시지를 출력합니다.
        //
        // 변수 선언이 goto 대상이 될 수 없기 때문에
        // 이와 같이 특수한 중괄호 스타일을 사용합니다.
        const char *err_msg;
        (void)PyInitConfig_GetError(config, &err_msg);
        printf("PYTHON INIT ERROR: %s\n", err_msg);
        PyInitConfig_Free(config);
        return -1;
    }
}

구성 생성

struct PyInitConfig

파이썬 초기화 구성을 위한 불투명 구조체(Opaque structure)입니다.

PyInitConfig *PyInitConfig_Create(void)

Isolated Configuration 기본값을 사용하여 새로운 초기화 구성을 생성합니다.

PyInitConfig_Free() 를 통해 해제해야 합니다.

메모리 할당 실패 시 NULL 을 반환합니다.

void PyInitConfig_Free(PyInitConfig *config)

초기화 구성인 config 의 메모리를 해제합니다.

configNULL 이면 아무 작업도 수행하지 않습니다.

에러 처리

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

config 의 에러 메시지를 가져옵니다.

  • *err_msg 를 설정하고, 에러가 설정된 경우 1 을 반환합니다.

  • 그렇지 않은 경우 *err_msgNULL 로 설정하고 0 을 반환합니다.

에러 메시지는 UTF-8로 인코딩된 문자열입니다.

config 에 종료 코드가 있는 경우 해당 코드를 에러 메시지 형식으로 변환합니다.

에러 메시지는 config 를 사용하여 다른 PyInitConfig 함수가 호출될 때까지 유효합니다. 호출자는 에러 메시지를 해제할 필요가 없습니다.

int PyInitConfig_GetExitCode(PyInitConfig *config, int *exitcode)

config 의 종료 코드를 가져옵니다.

  • *exitcode 를 설정하고, config 에 종료 코드가 설정된 경우 1 을 반환합니다.

  • config 에 종료 코드가 설정되지 않은 경우 0 을 반환합니다.

parse_argv 옵션이 0이 아닌 경우, 오직 Py_InitializeFromInitConfig() 함수만이 종료 코드를 설정할 수 있습니다.

명령줄 파싱에 실패했을 때(종료 코드 2) 또는 명령줄 옵션에서 도움말을 표시하도록 요청했을 때(종료 코드 0) 종료 코드가 설정될 수 있습니다.

옵션 가져오기

구성 옵션 name 파라미터는 NULL이 아니며 널 종료된(null-terminated) UTF-8 인코딩 문자열이어야 합니다. 자세한 내용은 Configuration Options 를 참조하십시오.

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

설정에 name 이라는 이름의 옵션이 있는지 확인합니다.

옵션이 존재하면 1 을, 그렇지 않으면 0 을 반환합니다.

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

정수형 구성 옵션을 가져옵니다.

  • *value 를 설정하고, 성공 시 0 을 반환합니다.

  • config 에 에러를 설정하고, 오류 발생 시 -1 을 반환합니다.

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

문자열 구성 옵션을 널 종료된 UTF-8 인코딩 문자열로 가져옵니다.

  • *value 를 설정하고, 성공 시 0 을 반환합니다.

  • config 에 에러를 설정하고, 오류 발생 시 -1 을 반환합니다.

해당 옵션이 선택적 문자열이고 설정되지 않은 경우, *valueNULL 로 설정될 수 있습니다.

성공 시, 해당 문자열이 NULL 이 아니라면 free(value) 를 사용하여 해제해야 합니다.

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

문자열 리스트 구성 옵션을 널 종료된 UTF-8 인코딩 문자열의 배열로 가져옵니다.

  • *length*value 를 설정하고, 성공 시 0 을 반환합니다.

  • config 에 에러를 설정하고, 오류 발생 시 -1 을 반환합니다.

성공 시, 문자열 리스트는 PyInitConfig_FreeStrList(length, items) 를 사용하여 해제해야 합니다.

void PyInitConfig_FreeStrList(size_t length, char **items)

PyInitConfig_GetStrList() 에 의해 생성된 문자열 리스트의 메모리를 해제합니다.

옵션 설정

구성 옵션 name 파라미터는 NULL이 아니며 널 종료된(null-terminated) UTF-8 인코딩 문자열이어야 합니다. 자세한 내용은 Configuration Options 를 참조하십시오.

일부 구성 옵션은 다른 옵션에 부수 효과(side effect)를 미칩니다. 이 로직은 아래의 “Set” 함수들이 아니라 Py_InitializeFromInitConfig() 가 호출될 때만 구현됩니다. 예를 들어, dev_mode1 로 설정한다고 해서 faulthandler1 로 설정되지는 않습니다.

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

정수형 구성 옵션을 설정합니다.

  • 성공 시 0 을 반환합니다.

  • config 에 에러를 설정하고, 오류 발생 시 -1 을 반환합니다.

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

널 종료된 UTF-8 인코딩 문자열로부터 문자열 구성 옵션을 설정합니다. 문자열은 복사됩니다.

  • 성공 시 0 을 반환합니다.

  • config 에 에러를 설정하고, 오류 발생 시 -1 을 반환합니다.

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

널 종료된 UTF-8 인코딩 문자열의 배열로부터 문자열 리스트 구성 옵션을 설정합니다. 문자열 리스트는 복사됩니다.

  • 성공 시 0 을 반환합니다.

  • config 에 에러를 설정하고, 오류 발생 시 -1 을 반환합니다.

모듈

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

내장 모듈 테이블에 내장 확장 모듈을 추가합니다.

새로운 모듈은 name 이라는 이름으로 임포트할 수 있으며, 첫 번째 임포트 시도 시 초기화 함수로 initfunc 를 사용합니다.

  • 성공 시 0 을 반환합니다.

  • config 에 에러를 설정하고, 오류 발생 시 -1 을 반환합니다.

Python이 여러 번 초기화되는 경우, 각 Python 초기화 시마다 PyInitConfig_AddModule() 을 호출해야 합니다.

PyImport_AppendInittab() 함수와 유사합니다.

Python 초기화

int Py_InitializeFromInitConfig(PyInitConfig *config)

초기화 설정에서 Python을 초기화합니다.

  • 성공 시 0 을 반환합니다.

  • config 에 에러를 설정하고, 오류 발생 시 -1 을 반환합니다.

  • config 에 종료 코드를 설정하고, Python이 종료되기를 원할 경우 -1 을 반환합니다.

종료 코드 사례는 PyInitConfig_GetExitcode() 를 참조하십시오.

구성 옵션

옵션

PyConfig/PyPreConfig 멤버

타입

가시성

"allocator"

allocator

int

읽기 전용

"argv"

argv

list[str]

공개(Public)

"base_exec_prefix"

base_exec_prefix

str

공개(Public)

"base_executable"

base_executable

str

공개(Public)

"base_prefix"

base_prefix

str

공개(Public)

"buffered_stdio"

buffered_stdio

bool

읽기 전용

"bytes_warning"

bytes_warning

int

공개(Public)

"check_hash_pycs_mode"

check_hash_pycs_mode

str

읽기 전용

"code_debug_ranges"

code_debug_ranges

bool

읽기 전용

"coerce_c_locale"

coerce_c_locale

bool

읽기 전용

"coerce_c_locale_warn"

coerce_c_locale_warn

bool

읽기 전용

"configure_c_stdio"

configure_c_stdio

bool

읽기 전용

"configure_locale"

configure_locale

bool

읽기 전용

"cpu_count"

cpu_count

int

공개(Public)

"dev_mode"

dev_mode

bool

읽기 전용

"dump_refs"

dump_refs

bool

읽기 전용

"dump_refs_file"

dump_refs_file

str

읽기 전용

"exec_prefix"

exec_prefix

str

공개(Public)

"executable"

executable

str

공개(Public)

"faulthandler"

faulthandler

bool

읽기 전용

"filesystem_encoding"

filesystem_encoding

str

읽기 전용

"filesystem_errors"

filesystem_errors

str

읽기 전용

"hash_seed"

hash_seed

int

읽기 전용

"home"

home

str

읽기 전용

"import_time"

import_time

int

읽기 전용

"inspect"

inspect

bool

공개(Public)

"install_signal_handlers"

install_signal_handlers

bool

읽기 전용

"int_max_str_digits"

int_max_str_digits

int

공개(Public)

"interactive"

interactive

bool

공개(Public)

"isolated"

isolated

bool

읽기 전용

"legacy_windows_fs_encoding"

legacy_windows_fs_encoding

bool

읽기 전용

"legacy_windows_stdio"

legacy_windows_stdio

bool

읽기 전용

"malloc_stats"

malloc_stats

bool

읽기 전용

"module_search_paths"

module_search_paths

list[str]

공개(Public)

"optimization_level"

optimization_level

int

공개(Public)

"orig_argv"

orig_argv

list[str]

읽기 전용

"parse_argv"

parse_argv

bool

읽기 전용

"parser_debug"

parser_debug

bool

공개(Public)

"pathconfig_warnings"

pathconfig_warnings

bool

읽기 전용

"perf_profiling"

perf_profiling

bool

읽기 전용

"platlibdir"

platlibdir

str

공개(Public)

"prefix"

prefix

str

공개(Public)

"program_name"

program_name

str

읽기 전용

"pycache_prefix"

pycache_prefix

str

공개(Public)

"quiet"

quiet

bool

공개(Public)

"run_command"

run_command

str

읽기 전용

"run_filename"

run_filename

str

읽기 전용

"run_module"

run_module

str

읽기 전용

"run_presite"

run_presite

str

읽기 전용

"safe_path"

safe_path

bool

읽기 전용

"show_ref_count"

show_ref_count

bool

읽기 전용

"site_import"

site_import

bool

읽기 전용

"skip_source_first_line"

skip_source_first_line

bool

읽기 전용

"stdio_encoding"

stdio_encoding

str

읽기 전용

"stdio_errors"

stdio_errors

str

읽기 전용

"stdlib_dir"

stdlib_dir

str

공개(Public)

"tracemalloc"

tracemalloc

int

읽기 전용

"use_environment"

use_environment

bool

공개(Public)

"use_frozen_modules"

use_frozen_modules

bool

읽기 전용

"use_hash_seed"

use_hash_seed

bool

읽기 전용

"use_system_logger"

use_system_logger

bool

읽기 전용

"user_site_directory"

user_site_directory

bool

읽기 전용

"utf8_mode"

utf8_mode

bool

읽기 전용

"verbose"

verbose

int

공개(Public)

"warn_default_encoding"

warn_default_encoding

bool

읽기 전용

"warnoptions"

warnoptions

list[str]

공개(Public)

"write_bytecode"

write_bytecode

bool

공개(Public)

"xoptions"

xoptions

dict[str, str]

공개(Public)

"_pystats"

_pystats

bool

읽기 전용

가시성:

실행 시간 파이썬 구성 API

실행 중에 PyConfig_Get()PyConfig_Set() 함수를 사용하여 구성 옵션을 가져오거나 설정할 수 있습니다.

구성 옵션 name 파라미터는 NULL이 아니며 널 종료된(null-terminated) UTF-8 인코딩 문자열이어야 합니다. 자세한 내용은 Configuration Options 를 참조하십시오.

일부 옵션은 sys 속성에서 읽어옵니다. 예를 들어, "argv" 옵션은 sys.argv 에서 읽어옵니다.

PyObject *PyConfig_Get(const char *name)

구성 옵션의 현재 실행 값(runtime value)을 파이썬 객체로 가져옵니다.

  • 성공 시 새로운 참조를 반환합니다.

  • 오류 발생 시 예외를 설정하고 NULL 을 반환합니다.

객체 유형은 구성 옵션에 따라 달라지며, 다음과 같을 수 있습니다:

  • bool

  • int

  • str

  • list[str]

  • dict[str, str]

The caller must have an attached thread state. The function cannot be called before Python initialization nor after Python finalization.

Added in version 3.14.

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

PyConfig_Get() 과 유사하지만, 값을 C 정수형으로 가져옵니다.

  • 성공 시 0 을 반환합니다.

  • 에러 시 예외를 설정하고 -1 을 반환합니다.

Added in version 3.14.

PyObject *PyConfig_Names(void)

모든 구성 옵션 이름을 frozenset 으로 가져옵니다.

  • 성공 시 새로운 참조를 반환합니다.

  • 오류 발생 시 예외를 설정하고 NULL 을 반환합니다.

The caller must have an attached thread state. The function cannot be called before Python initialization nor after Python finalization.

Added in version 3.14.

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

구성 옵션의 현재 실행 값을 설정합니다.

  • name 이라는 이름의 옵션이 없으면 ValueError 를 발생시킵니다.

  • value 가 유효하지 않은 값이면 ValueError 를 발생시킵니다.

  • 해당 옵션이 읽기 전용(설정 불가)이면 ValueError 를 발생시킵니다.

  • value 가 적절한 유형이 아니면 TypeError 를 발생시킵니다.

The caller must have an attached thread state. The function cannot be called before Python initialization nor after Python finalization.

name, value 인자를 사용하여 감사 이벤트(auditing event) cpython.PyConfig_Set 을 발생시킵니다.

Added in version 3.14.

버전 3.16.0a0 (unreleased)에서 변경: 이 함수는 이제 sys.flags 를 직접 수정하는 대신, 새로운 객체를 생성하여 sys.flags 를 교체합니다.

PyConfig C API

Added in version 3.8.

파이썬은 Py_InitializeFromConfig()PyConfig 구조체를 사용하여 초기화할 수 있습니다. 또한 Py_PreInitialize()PyPreConfig 구조체를 사용하여 사전 초기화(preinitialize)할 수도 있습니다.

구성 방식에는 두 가지 종류가 있습니다:

  • 파이썬 구성(Python Configuration) 은 일반적인 파이썬과 동일하게 동작하는 맞춤형 파이썬을 구축할 때 사용됩니다. 예를 들어, 환경 변수와 명령 줄 인자가 파이썬 구성을 위해 사용됩니다.

  • 격리된 구성(Isolated Configuration) 은 파이썬을 응용 프로그램에 내장할 때 사용됩니다. 이는 시스템으로부터 파이썬을 격리합니다. 예를 들어, 환경 변수가 무시되고, LC_CTYPE 로케일이 변경되지 않으며, 신호 처리기(signal handler)가 등록되지 않습니다.

Py_RunMain() 함수를 사용하여 맞춤형 파이썬 프로그램을 작성할 수 있습니다.

초기화, 파이널리제이션 및 스레드도 참조하십시오.

더 보기

PEP 587 “파이썬 초기화 구성”.

예시

항상 격리 모드에서 실행되는 사용자 정의 파이썬의 예:

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

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

    /* 명령 줄 인수를 디코딩합니다.
       암시적으로 파이썬을 사전 초기화합니다 (격리 모드에서). */
    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;
    }
    /* 오류 메시지를 표시하고 0이 아닌
       종료 코드로 프로세스를 종료합니다 */
    Py_ExitStatusException(status);
}

PyWideStringList

type PyWideStringList

wchar_t* 문자열의 리스트.

length가 0이 아니면, itemsNULL이 아니어야 하고 모든 문자열은 NULL이 아니어야 합니다.

메서드:

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

itemlist에 추가합니다.

이 함수를 호출하려면 파이썬을 사전 초기화해야 합니다.

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

itemlistindex에 삽입합니다.

indexlist 길이보다 크거나 같으면, itemlist에 추가(append)합니다.

index0 이상이어야 합니다.

이 함수를 호출하려면 파이썬을 사전 초기화해야 합니다.

구조체 필드:

Py_ssize_t length

리스트 길이.

wchar_t **items

리스트 항목들.

PyStatus

type PyStatus

초기화 함수 상태를 저장하는 구조체: 성공, 에러 또는 종료.

에러의 경우, 에러를 만든 C 함수 이름을 저장할 수 있습니다.

구조체 필드:

int exitcode

종료 코드. exit()에 전달된 인자.

const char *err_msg

에러 메시지.

const char *func

에러를 만든 함수의 이름, NULL일 수 있습니다.

상태를 만드는 함수:

PyStatus PyStatus_Ok(void)

성공.

PyStatus PyStatus_Error(const char *err_msg)

메시지가 포함된 초기화 에러.

err_msgNULL 이 아니어야 합니다.

PyStatus PyStatus_NoMemory(void)

메모리 할당 실패 (메모리 부족).

PyStatus PyStatus_Exit(int exitcode)

지정된 종료 코드로 파이썬을 종료합니다.

상태를 처리하는 함수:

int PyStatus_Exception(PyStatus status)

상태가 에러입니까? 아니면 종료입니까? 참이면, 예외를 처리해야 합니다; 예를 들어 Py_ExitStatusException() 을 호출하여.

int PyStatus_IsError(PyStatus status)

결과가 에러입니까?

int PyStatus_IsExit(PyStatus status)

결과가 종료입니까?

void Py_ExitStatusException(PyStatus status)

status가 종료이면 exit(exitcode)를 호출합니다. status가 에러이면 에러 메시지를 인쇄하고 0이 아닌 종료 코드로 종료합니다. PyStatus_Exception(status)가 0이 아닐 때만 호출해야 합니다.

참고

내부적으로, 파이썬은 PyStatus.func를 설정하는 데는 매크로를 사용하는 반면, funcNULL로 설정된 상태를 만드는 데는 함수를 사용합니다.

예:

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

파이썬을 사전 초기화하는 데 사용되는 구조체입니다.

사전 구성을 초기화하는 함수:

void PyPreConfig_InitPythonConfig(PyPreConfig *preconfig)

파이썬 구성으로 사전 구성을 초기화합니다.

void PyPreConfig_InitIsolatedConfig(PyPreConfig *preconfig)

격리된 구성으로 사전 구성을 초기화합니다.

구조체 필드:

int allocator

파이썬 메모리 할당자의 이름:

PYMEM_ALLOCATOR_PYMALLOC and PYMEM_ALLOCATOR_PYMALLOC_DEBUG are not supported if Python is configured using --without-pymalloc.

PYMEM_ALLOCATOR_MIMALLOC and PYMEM_ALLOCATOR_MIMALLOC_DEBUG are not supported if Python is configured using --without-mimalloc or if the underlying atomic support isn’t available.

메모리 관리를 참조하십시오.

기본값: PYMEM_ALLOCATOR_NOT_SET.

int configure_locale

LC_CTYPE 로케일을 사용자가 선호하는 로케일로 설정합니다.

0 과 같으면, coerce_c_localecoerce_c_locale_warn 멤버를 0 으로 설정합니다.

See the locale encoding.

기본값: 파이썬 구성에서 1, 격리된 구성에서 0.

int coerce_c_locale

2 와 같으면 C 로케일을 강제합니다.

1 과 같으면 LC_CTYPE 로케일을 읽어 로케일 강제 여부를 결정합니다.

See the locale encoding.

기본값: 파이썬 구성에서 -1, 격리된 구성에서 0.

int coerce_c_locale_warn

0이 아니면, C 로케일이 강제될 때 경고가 발생합니다.

기본값: 파이썬 구성에서 -1, 격리된 구성에서 0.

int dev_mode

파이썬 개발 모드: PyConfig.dev_mode 를 참조하십시오.

기본값: 파이썬 모드에서 -1, 격리 모드에서 0.

int isolated

격리 모드: PyConfig.isolated 를 참조하십시오.

기본값: 파이썬 모드에서 0, 격리 모드에서 1.

int legacy_windows_fs_encoding

0이 아니면:

PYTHONLEGACYWINDOWSFSENCODING 환경 변수 값으로 초기화됩니다.

윈도우에서만 사용 가능합니다. #ifdef MS_WINDOWS 매크로는 윈도우 특정 코드에 사용할 수 있습니다.

기본값: 0.

int parse_argv

0이 아니면, Py_PreInitializeFromArgs()Py_PreInitializeFromBytesArgs()는 일반 파이썬이 명령 줄 인자를 구문 분석하는 것과 같은 방식으로 argv 인자를 구문 분석합니다. 명령 줄 인자를 참조하십시오.

기본값: 파이썬 구성에서 1, 격리된 구성에서 0.

int use_environment

환경 변수 사용 여부? PyConfig.use_environment 를 참조하십시오.

기본값: 파이썬 구성에서 1, 격리된 구성에서 0.

int utf8_mode

0이 아니면, 파이썬 UTF-8 모드 를 활성화합니다.

-X utf8 명령 줄 옵션 및 PYTHONUTF8 환경 변수에 의해 0 또는 1 로 설정됩니다.

기본값: 1.

PyPreConfig를 사용하여 파이썬을 사전 초기화합니다.

파이썬의 사전 초기화:

현재 사전 구성(PyPreConfig 타입)은 _PyRuntime.preconfig 에 저장됩니다.

파이썬을 사전 초기화하는 함수:

PyStatus Py_PreInitialize(const PyPreConfig *preconfig)

preconfig 사전 구성에서 파이썬을 사전 초기화합니다.

preconfigNULL 이 아니어야 합니다.

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

preconfig 사전 구성에서 파이썬을 사전 초기화합니다.

preconfigparse_argv 가 0이 아니면, argv 명령 줄 인자(바이트 문자열)를 구문 분석합니다.

preconfigNULL 이 아니어야 합니다.

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

preconfig 사전 구성에서 파이썬을 사전 초기화합니다.

preconfigparse_argv 가 0이 아니면, argv 명령 줄 인자(와이드 문자열)를 구문 분석합니다.

preconfigNULL 이 아니어야 합니다.

호출자는 PyStatus_Exception()Py_ExitStatusException() 을 사용하여 예외(에러나 종료)를 처리해야 합니다.

파이썬 구성 (PyPreConfig_InitPythonConfig())의 경우, 파이썬이 명령 줄 인수와 함께 초기화되는 경우 해당 인수를 파이썬 사전 초기화 시에도 전달해야 합니다. 이러한 인자들은 인코딩과 같이 사전 구성에 영향을 미치기 때문입니다. 예를 들어, -X utf8 명령 줄 옵션은 파이썬 UTF-8 모드 를 활성화합니다.

PyMem_SetAllocator()Py_PreInitialize() 이후에 Py_InitializeFromConfig() 이전에 호출하여 사용자 정의 메모리 할당자를 설치할 수 있습니다. PyPreConfig.allocatorPYMEM_ALLOCATOR_NOT_SET으로 설정되면 Py_PreInitialize() 전에 호출할 수 있습니다.

PyMem_RawMalloc() 과 같은 파이썬 메모리 할당 함수는 파이썬 사전 초기화 전에 사용해서는 안 되지만, malloc()free() 를 직접 호출하는 것은 항상 안전합니다. Py_DecodeLocale() 은 파이썬 사전 초기화 전에 호출해서는 안 됩니다.

파이썬 UTF-8 모드 를 활성화하기 위해 사전 초기화 기능을 사용하는 예제:

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

preconfig.utf8_mode = 1;

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

/* 이 시점에서 파이썬은 UTF-8을 사용합니다. */

Py_Initialize();
/* ... 여기서 파이썬 API를 사용하십시오 ... */
Py_Finalize();

PyConfig

type PyConfig

파이썬을 구성하기 위한 대부분의 파라미터를 포함하는 구조체.

작업이 완료되면 구성 메모리를 해제하기 위해 PyConfig_Clear() 함수를 사용해야 합니다.

구조체 메서드:

void PyConfig_InitPythonConfig(PyConfig *config)

파이썬 구성 으로 구성을 초기화합니다.

void PyConfig_InitIsolatedConfig(PyConfig *config)

격리된 구성 으로 구성을 초기화합니다.

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

와이드 문자열 str*config_str로 복사합니다.

필요한 경우 파이썬 사전 초기화 를 수행하십시오.

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

Py_DecodeLocale() 을 사용하여 str 을 디코딩하고 그 결과를 *config_str 에 설정합니다.

필요한 경우 파이썬 사전 초기화 를 수행하십시오.

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

와이드 문자열의 argv 목록으로부터 명령 줄 인자(configargv 멤버)를 설정합니다.

필요한 경우 파이썬 사전 초기화 를 수행하십시오.

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

바이트 문자열의 argv 목록으로부터 명령 줄 인자(configargv 멤버)를 설정합니다. 바이트는 Py_DecodeLocale() 을 사용하여 디코딩하십시오.

필요한 경우 파이썬 사전 초기화 를 수행하십시오.

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

와이드 문자열 리스트 listlengthitems로 설정합니다.

필요한 경우 파이썬 사전 초기화 를 수행하십시오.

PyStatus PyConfig_Read(PyConfig *config)

모든 파이썬 구성을 읽습니다.

이미 초기화된 필드는 변경되지 않습니다.

Python 3.11부터 이 함수를 호출할 때 경로 구성 의 필드는 더 이상 계산되거나 수정되지 않습니다.

PyConfig_Read() 함수는 PyConfig.argv 인자를 한 번만 파싱합니다. 인자 파싱 후 PyConfig.parse_argv2 로 설정됩니다. PyConfig.argv 에서 파이썬 인자가 제거되므로, 인자를 두 번 파싱하면 애플리케이션 옵션이 파이썬 옵션으로 해석될 수 있습니다.

필요한 경우 파이썬 사전 초기화 를 수행하십시오.

버전 3.10에서 변경: PyConfig.argv 인자는 이제 한 번만 파싱되며, 파싱 후 PyConfig.parse_argv2 로 설정됩니다. 또한 PyConfig.parse_argv1 인 경우에만 인자를 파싱합니다.

버전 3.11에서 변경: PyConfig_Read() 는 더 이상 모든 경로를 계산하지 않으므로, 파이썬 경로 구성 아래 나열된 필드는 Py_InitializeFromConfig() 가 호출될 때까지 업데이트되지 않을 수 있습니다.

void PyConfig_Clear(PyConfig *config)

구성 메모리를 해제합니다.

Most PyConfig methods preinitialize Python if needed. In that case, the Python preinitialization configuration (PyPreConfig) is based on the PyConfig. If configuration fields which are in common with PyPreConfig are tuned, they must be set before calling a PyConfig method:

또한, PyConfig_SetArgv() 또는 PyConfig_SetBytesArgv() 를 사용하는 경우, 사전 초기화 구성이 명령 줄 인수에 의존하므로(parse_argv 가 0이 아닌 경우) 이 메서드를 다른 메서드보다 먼저 호출해야 합니다.

이 메서드의 호출자는 PyStatus_Exception()Py_ExitStatusException() 을 사용하여 예외(에러나 종료)를 처리해야 합니다.

구조체 필드:

PyWideStringList argv

argv 를 기반으로 sys.argv 명령 줄 인자를 설정합니다. 이 매개변수들은 프로그램의 main() 함수에 전달되는 것과 유사하지만, 첫 번째 항목이 파이썬 인터프리터를 포함하는 실행 파일 대신 실행될 스크립트 파일을 가리켜야 한다는 차이가 있습니다. 실행할 스크립트가 없는 경우, argv 의 첫 번째 항목은 빈 문자열일 수 있습니다.

일반 파이썬이 파이썬 명령 줄 인자를 구문 분석하는 것과 동일한 방식으로 argv 를 구문 분석하려면 parse_argv1 로 설정하고, 그 후 argv 에서 파이썬 인자를 제거하십시오.

argv 가 비어 있으면, sys.argv 가 항상 존재하고 결코 비어 있지 않도록 빈 문자열이 추가됩니다.

기본값: NULL.

orig_argv 멤버를 참조하십시오.

int safe_path

0과 같으면, Py_RunMain() 이 시작 시 sys.path 에 잠재적으로 안전하지 않은 경로를 추가합니다.

  • argv[0]L"-m" (python -m module)과 같으면 현재 작업 디렉터리를 추가합니다.

  • 스크립트(python script.py)를 실행하는 경우 스크립트의 디렉터리를 앞에 붙입니다. 심볼릭 링크인 경우 심볼릭 링크를 해소합니다.

  • 그렇지 않은 경우(python -c codepython), 현재 작업 디렉터리를 의미하는 빈 문자열을 앞에 붙입니다.

명령 줄 옵션 -P 및 환경 변수 PYTHONSAFEPATH 에 의해 1 로 설정됩니다.

기본값: 파이썬 구성에서는 0, 격리된 구성에서는 1.

Added in version 3.11.

wchar_t *base_exec_prefix

sys.base_exec_prefix.

기본값: NULL.

Python Path Configuration 출력의 일부입니다.

PyConfig.exec_prefix 를 참조하십시오.

wchar_t *base_executable

파이썬 기본 실행 파일: sys._base_executable.

환경 변수 __PYVENV_LAUNCHER__ 에 의해 설정됩니다.

NULL 인 경우 PyConfig.executable 에서 설정됩니다.

기본값: NULL.

Python Path Configuration 출력의 일부입니다.

PyConfig.executable 를 참조하십시오.

wchar_t *base_prefix

sys.base_prefix.

기본값: NULL.

Python Path Configuration 출력의 일부입니다.

PyConfig.prefix 를 참조하십시오.

int buffered_stdio

이 값이 0 이고 configure_c_stdio 가 0이 아니면, C 스트림 stdout 및 stderr의 버퍼링을 비활성화합니다.

명령 줄 옵션 -u 및 환경 변수 PYTHONUNBUFFERED 에 의해 0 으로 설정됩니다.

stdin은 항상 버퍼링 모드로 열립니다.

기본값: 1.

int bytes_warning

이 값이 1 인 경우, bytes 또는 bytearraystr 과 비교하거나, bytesint 와 비교할 때 경고를 발생시킵니다.

이 값이 2 이상인 경우, 이러한 상황에서 BytesWarning 예외를 발생시킵니다.

명령 줄 옵션 -b 에 의해 증가합니다.

기본값: 0.

버전 3.15부터 사용 지원 중단(deprecated), 버전 3.17에서 제거 예정: -b-bb 옵션은 3.17 버전에서 아무 작업도 수행하지 않게 됩니다. bytes_warning 멤버는 3.17에서 제거됩니다.

int warn_default_encoding

0이 아닌 경우, io.TextIOWrapper 가 기본 인코딩을 사용할 때 EncodingWarning 경고를 발생시킵니다. 자세한 내용은 선택적 인코딩 경고(EncodingWarning) 을 참조하십시오.

기본값: 0.

Added in version 3.10.

int code_debug_ranges

이 값이 0 이면 코드 객체에서 끝 라인 및 열 매핑의 포함을 비활성화합니다. 또한 트레이스백 출력 시 특정 에러 위치에 캐럿(caret)을 표시하는 기능을 비활성화합니다.

환경 변수 PYTHONNODEBUGRANGES 및 명령 줄 옵션 -X no_debug_ranges 에 의해 0 으로 설정됩니다.

기본값: 1.

Added in version 3.11.

wchar_t *check_hash_pycs_mode

해시 기반 .pyc 파일의 유효성 검사 동작을 제어합니다: 명령 줄 옵션 --check-hash-based-pycs 값.

유효한 값:

  • L"Always": ‘check_source’ 플래그 값에 관계없이 무효화를 위해 소스 파일을 해싱합니다.

  • L"Never": 해시 기반 pyc가 항상 유효하다고 가정합니다.

  • L"default": 해시 기반 pyc의 ‘check_source’ 플래그가 무효화 여부를 결정합니다.

기본값: L"default".

PEP 552 “Deterministic pycs”를 참조하십시오.

int configure_c_stdio

0이 아니면, C 표준 스트림을 구성합니다:

  • Windows에서 stdin, stdout 및 stderr에 바이너리 모드(O_BINARY)를 설정합니다.

  • buffered_stdio 가 0이면, stdin, stdout 및 stderr 스트림의 버퍼링을 비활성화합니다.

  • interactive 가 0이 아니면, stdin과 stdout에서 스트림 버퍼링을 활성화합니다(Windows에서는 stdout만).

기본값: 파이썬 구성에서 1, 격리된 구성에서 0.

int dev_mode

0이 아니면, 파이썬 개발 모드를 활성화합니다.

옵션 -X dev 및 환경 변수 PYTHONDEVMODE 에 의해 1 로 설정됩니다.

기본값: 파이썬 모드에서 -1, 격리 모드에서 0.

int dump_refs

Python 참조를 출력합니까?

0이 아니면, 종료 시 여전히 활성 상태인 모든 객체를 덤프합니다.

환경 변수 PYTHONDUMPREFS 에 의해 1 로 설정됩니다.

Py_TRACE_REFS 매크로가 정의된 특수한 빌드의 Python이 필요합니다. configure --with-trace-refs option 를 참조하십시오.

기본값: 0.

wchar_t *dump_refs_file

Python 참조를 덤프할 파일 이름.

환경 변수 PYTHONDUMPREFSFILE 에 의해 설정됩니다.

기본값: NULL.

Added in version 3.11.

wchar_t *exec_prefix

플랫폼 종속적인 Python 파일이 설치되는 사이트별 디렉터리 접두사: sys.exec_prefix.

기본값: NULL.

Python Path Configuration 출력의 일부입니다.

PyConfig.base_exec_prefix 를 참조하십시오.

wchar_t *executable

Python 인터프리터용 실행 바이너리의 절대 경로: sys.executable.

기본값: NULL.

Python Path Configuration 출력의 일부입니다.

PyConfig.base_executable 를 참조하십시오.

int faulthandler

faulthandler을 활성화하시겠습니까?

0이 아니면, 시작 시 faulthandler.enable()을 호출합니다.

-X faulthandler 및 환경 변수 PYTHONFAULTHANDLER 에 의해 1 으로 설정됩니다.

기본값: 파이썬 모드에서 -1, 격리 모드에서 0.

wchar_t *filesystem_encoding

파일시스템 인코딩: sys.getfilesystemencoding().

macOS, Android 및 VxWorks에서: 기본으로 "utf-8" 을 사용합니다.

Windows에서: 기본으로 "utf-8" 을 사용하며, PyPreConfiglegacy_windows_fs_encoding 이 0이 아닌 경우 "mbcs" 를 사용합니다.

다른 플랫폼에서의 기본 인코딩:

  • PyPreConfig.utf8_mode 가 0이 아니면 "utf-8".

  • Python이 nl_langinfo(CODESET)``에서 ASCII 인코딩을 감지하지만, ``mbstowcs() 함수가 다른 인코딩(보통 Latin1)으로 디코딩하는 경우 "ascii".

  • nl_langinfo(CODESET)`이 문자열을 반환하면 ``"utf-8".

  • Otherwise, use the locale encoding: nl_langinfo(CODESET) result.

Python 시작 시 인코딩 이름이 Python 코덱 이름으로 표준화됩니다. 예를 들어, "ANSI_X3.4-1968""ascii" 로 교체됩니다.

filesystem_errors 멤버를 참조하십시오.

wchar_t *filesystem_errors

파일시스템 에러 처리기: sys.getfilesystemencodeerrors().

Windows에서: 기본으로 "surrogatepass" 를 사용하며, PyPreConfiglegacy_windows_fs_encoding 이 0이 아닌 경우 "replace" 를 사용합니다.

다른 플랫폼에서: 기본으로 "surrogateescape" 를 사용합니다.

지원되는 에러 처리기:

  • "strict"

  • "surrogateescape"

  • "surrogatepass" (UTF-8 인코딩에서만 지원됨)

filesystem_encoding 멤버를 참조하십시오.

int use_frozen_modules

0이 아니면, 프로즌 모듈(frozen modules)을 사용합니다.

환경 변수 PYTHON_FROZEN_MODULES 에 의해 설정됩니다.

기본값: 출시 빌드에서는 1, 디버그 빌드 에서는 0.

unsigned long hash_seed
int use_hash_seed

무작위 해시 함수 시드.

use_hash_seed 이 0이면 파이썬 시작 시 시드가 무작위로 선택되며, hash_seed 는 무시됩니다.

환경 변수 PYTHONHASHSEED 에 의해 설정됩니다.

기본 use_hash_seed 값: 파이썬 모드에서는 -1, 격리(isolated) 모드에서는 0.

wchar_t *home

기본 파이썬 “홈” 디렉터리(즉, 표준 파이썬 라이브러리의 위치)를 설정합니다(참조: PYTHONHOME).

환경 변수 PYTHONHOME 에 의해 설정됩니다.

기본값: NULL.

파이썬 경로 구성 입력의 일부입니다.

int import_time

1 이면 임포트 시간을 프로파일링합니다. 2 이면 이미 로드된 모듈이 있을 경우 이를 나타내는 추가 출력을 포함합니다.

-X importtime 옵션 및 PYTHONPROFILEIMPORTTIME 환경 변수로 설정됩니다.

기본값: 0.

버전 3.14에서 변경: import_time = 2 에 대한 지원이 추가되었습니다.

int inspect

스크립트나 명령을 실행한 후 대화식 모드로 들어갑니다.

0 보다 크면 inspect를 활성화합니다. 스크립트가 첫 번째 인자로 전달되거나 -c 옵션이 사용될 때, sys.stdin 이 터미널로 보이지 않더라도 스크립트나 명령 실행 후 대화형 모드로 진입합니다.

-i 명령줄 옵션에 의해 증가합니다. PYTHONINSPECT 환경 변수가 비어 있지 않으면 1 로 설정됩니다.

기본값: 0.

int install_signal_handlers

파이썬 시그널 처리기를 설치하시겠습니까?

기본값: 파이썬 모드에서는 1, 격리(isolated) 모드에서는 0.

int interactive

0 보다 크면 대화형 모드(REPL)를 활성화합니다.

-i 명령줄 옵션에 의해 증가합니다.

기본값: 0.

int int_max_str_digits

정수 문자열 변환 길이 제한 을 설정합니다. 초기값 -1 은 명령줄이나 환경 변수에서 값을 가져오며, 없으면 4300(sys.int_info.default_max_str_digits)을 기본값으로 사용함을 의미합니다. 0 은 제한을 비활성화합니다. 0보다 크고 640(sys.int_info.str_digits_check_threshold)보다 작은 값은 지원되지 않으며 오류가 발생합니다.

-X int_max_str_digits 명령줄 플래그 또는 PYTHONINTMAXSTRDIGITS 환경 변수로 설정됩니다.

기본값: 파이썬 모드에서는 -1, 격리(isolated) 모드에서는 4300(sys.int_info.default_max_str_digits)입니다.

Added in version 3.12.

int cpu_count

cpu_count 값이 -1 이 아니면 os.cpu_count(), os.process_cpu_count(), 그리고 multiprocessing.cpu_count() 의 반환 값을 재정의합니다.

-X cpu_count=n|default 명령줄 플래그 또는 PYTHON_CPU_COUNT 환경 변수로 설정됩니다.

기본값: -1.

Added in version 3.13.

int isolated

0 보다 크면 격리(isolated) 모드를 활성화합니다:

  • safe_path1 로 설정: 파이썬 시작 시 현재 디렉터리, 스크립트 디렉터리 또는 빈 문자열과 같이 잠재적으로 안전하지 않은 경로를 sys.path 에 추가하지 않습니다.

  • use_environment0 으로 설정: PYTHON 환경 변수를 무시합니다.

  • user_site_directory0 으로 설정: 유저 사이트 디렉터리를 sys.path 에 추가하지 않습니다.

  • 파이썬 REPL은 대화식 프롬프트에서 readline을 임포트 하지도 기본 readline 구성을 활성화하지도 않습니다.

-I 명령줄 옵션에 의해 1 로 설정됩니다.

기본값: 파이썬 모드에서 0, 격리 모드에서 1.

격리 구성PyPreConfig.isolated 를 참조하십시오.

int legacy_windows_stdio

0이 아니면, sys.stdin, sys.stdout, sys.stderr 에 대해 io._WindowsConsoleIO 대신 io.FileIO 를 사용합니다.

Set to 1 if the PYTHONLEGACYWINDOWSSTDIO environment variable is set to a non-empty string.

윈도우에서만 사용 가능합니다. #ifdef MS_WINDOWS 매크로는 윈도우 특정 코드에 사용할 수 있습니다.

기본값: 0.

PEP 528 (Windows 콘솔 인코딩을 UTF-8로 변경)를 참조하십시오.

int malloc_stats

0이 아니면, 종료 시 파이썬 pymalloc 메모리 할당자에 대한 통계를 덤프합니다.

PYTHONMALLOCSTATS 환경 변수에 의해 1 로 설정됩니다.

The option is ignored if Python is configured using the --without-pymalloc option.

기본값: 0.

wchar_t *platlibdir

플랫폼 라이브러리 디렉터리 이름: sys.platlibdir.

PYTHONPLATLIBDIR 환경 변수로 설정됩니다.

Default: value of the PLATLIBDIR macro which is set by the configure --with-platlibdir option (default: "lib", or "DLLs" on Windows).

파이썬 경로 구성 입력의 일부입니다.

Added in version 3.9.

버전 3.11에서 변경: 이 매크로는 이제 Windows에서 표준 라이브러리 확장 모듈을 찾는 데 사용되며(일반적으로 DLLs 아래), 호환성을 위해 인트리 빌드 및 가상 환경을 포함한 비표준 레이아웃에서는 이 값이 무시됩니다.

wchar_t *pythonpath_env

DELIM (os.pathsep)으로 구분된 문자열 형태의 모듈 검색 경로(sys.path).

PYTHONPATH 환경 변수로 설정됩니다.

기본값: NULL.

파이썬 경로 구성 입력의 일부입니다.

PyWideStringList module_search_paths
int module_search_paths_set

모듈 검색 경로: sys.path.

module_search_paths_set0 과 같으면, Py_InitializeFromConfig()module_search_paths 를 대체하고 module_search_paths_set1 로 설정합니다.

기본값: 빈 리스트(module_search_paths) 및 0``(``module_search_paths_set).

Python Path Configuration 출력의 일부입니다.

int optimization_level

컴파일 최적화 수준:

  • 0: 피프홀 옵티마이저(Peephole optimizer), __debug__True 로 설정.

  • 1: 레벨 0, 어설션(assertion) 제거, __debug__False 로 설정.

  • 2: 레벨 1, 독스트링 제거.

-O 명령줄 옵션에 의해 증가하며, PYTHONOPTIMIZE 환경 변수 값으로 설정됩니다.

기본값: 0.

PyWideStringList orig_argv

Python 실행 파일에 전달된 원래 명령줄 인자 목록: sys.orig_argv.

If orig_argv list is empty and argv is not a list only containing an empty string, PyConfig_Read() copies argv into orig_argv before modifying argv (if parse_argv is non-zero).

argv 멤버와 Py_GetArgcArgv() 함수를 참조하십시오.

기본값: 빈 리스트.

Added in version 3.10.

int parse_argv

명령줄 인자를 구문 분석하시겠습니까?

1 과 같으면 일반적인 파이썬이 명령줄 인자 를 구문 분석하는 것과 동일한 방식으로 argv 를 구문 분석하고, argv 에서 파이썬 관련 인자를 제거합니다.

PyConfig_Read() 함수는 PyConfig.argv 인자를 한 번만 파싱합니다. 인자 파싱 후 PyConfig.parse_argv2 로 설정됩니다. PyConfig.argv 에서 파이썬 인자가 제거되므로, 인자를 두 번 파싱하면 애플리케이션 옵션이 파이썬 옵션으로 해석될 수 있습니다.

기본값: 파이썬 모드에서는 1, 격리(isolated) 모드에서는 0.

버전 3.10에서 변경: PyConfig.argv 인자는 이제 PyConfig.parse_argv1 인 경우에만 구문 분석됩니다.

int parser_debug

구문 분석기 디버그 모드. 0 보다 크면 구문 분석기 디버깅 출력을 켭니다(전문가 전용, 컴파일 옵션에 따라 다름).

-d 명령줄 옵션에 의해 증가하며, PythonDEBUG 환경 변수 값으로 설정됩니다.

파이썬 디버그 빌드 가 필요합니다(Py_DEBUG 매크로가 정의되어야 함).

기본값: 0.

int pathconfig_warnings

0이 아니면 경로 구성 계산 시 stderr 에 경고를 기록하며, 0 이면 이러한 경고를 억제합니다.

기본값: 파이썬 모드에서는 1, 격리(isolated) 모드에서는 0.

파이썬 경로 구성 입력의 일부입니다.

버전 3.11에서 변경: 이제 Windows에서도 적용됩니다.

wchar_t *prefix

플랫폼 독립적인 파이썬 파일이 설치되는 사이트 전용 디렉터리 접두사: sys.prefix.

기본값: NULL.

Python Path Configuration 출력의 일부입니다.

PyConfig.base_prefix 를 참조하십시오.

wchar_t *program_name

executable 을 초기화하고 파이썬 초기화 과정 중 발생하는 초기 오류 메시지에 사용되는 프로그램 이름입니다.

  • macOS에서 설정된 경우 PYTHONEXECUTABLE 환경 변수를 사용합니다.

  • WITH_NEXT_FRAMEWORK 매크로가 정의된 경우, 설정된 경우 __PYVENV_LAUNCHER__ 환경 변수를 사용합니다.

  • 사용 가능하고 비어 있지 않다면 argvargv[0] 을 사용합니다.

  • 그렇지 않으면 Windows에서는 L"python" 을, 다른 플랫폼에서는 L"python3" 를 사용합니다.

기본값: NULL.

파이썬 경로 구성 입력의 일부입니다.

wchar_t *pycache_prefix

캐시된 .pyc 파일이 기록되는 디렉터리: sys.pycache_prefix.

-X pycache_prefix=PATH 명령줄 옵션 및 PYTHONPYCACHEPREFIX 환경 변수로 설정됩니다. 명령줄 옵션이 우선합니다.

NULL이면, sys.pycache_prefixNone으로 설정됩니다.

기본값: NULL.

int quiet

조용한 모드. 0 보다 크면 대화형 모드에서 파이썬 시작 시 저작권 및 버전을 표시하지 않습니다.

-q 명령줄 옵션에 의해 증가합니다.

기본값: 0.

wchar_t *run_command

-c 명령줄 옵션의 값입니다.

Py_RunMain() 에서 사용됩니다.

기본값: NULL.

wchar_t *run_filename

명령줄에 전달된 파일 이름: -c-m 이 없는 끝부분의 명령줄 인자입니다. 이 값은 Py_RunMain() 함수에서 사용됩니다.

예를 들어, python3 script.py arg 명령줄에 의해 script.py 로 설정됩니다.

PyConfig.skip_source_first_line 옵션을 참조하십시오.

기본값: NULL.

wchar_t *run_module

-m 명령줄 옵션의 값입니다.

Py_RunMain() 에서 사용됩니다.

기본값: NULL.

wchar_t *run_presite

site 모듈이 임포트되기 전에 실행되어야 하는 모듈 또는 모듈:함수 진입점입니다.

-X presite=module:func 명령줄 옵션과 PYTHON_PRESITE 환경 변수로 설정됩니다. 명령줄 옵션이 우선합니다.

파이썬 디버그 빌드 가 필요합니다(Py_DEBUG 매크로가 정의되어야 함).

기본값: NULL.

int show_ref_count

종료 시 전체 참조 횟수를 표시합니까? (immortal 객체는 제외)

-X showrefcount 명령줄 옵션에 의해 1 로 설정됩니다.

Python 디버그 빌드 가 필요합니다. (Py_REF_DEBUG 매크로가 정의되어 있어야 합니다.)

기본값: 0.

int site_import

시작할 때 site 모듈을 임포트 합니까?

0과 같으면, site 모듈의 임포트와 그에 따른 sys.path 의 사이트 의존적 조작을 비활성화합니다.

site 모듈이 나중에 명시적으로 임포트되더라도 이 조작을 비활성화합니다 (조작이 실행되기를 원하면 site.main() 을 호출하십시오).

-S 명령줄 옵션에 의해 0 으로 설정됩니다.

sys.flags.no_site is set to the inverted value of site_import.

기본값: 1.

int skip_source_first_line

0이 아니면, PyConfig.run_filename 소스의 첫 번째 줄을 건너뜁니다.

유닉스 형식이 아닌 #!cmd 형태의 사용을 허용합니다. 이는 DOS 전용 핵(hack)만을 위해 의도된 것입니다.

-x 명령줄 옵션에 의해 1 로 설정됩니다.

기본값: 0.

wchar_t *stdio_encoding
wchar_t *stdio_errors

sys.stdin, sys.stdout, 그리고 sys.stderr 의 인코딩 및 인코딩 오류를 처리합니다 (단, sys.stderr 는 항상 "backslashreplace" 에러 처리기를 사용함).

PYTHONIOENCODING 환경 변수가 비어 있지 않으면 해당 변수를 사용합니다.

기본 인코딩:

기본 에러 처리기:

  • Windows에서: "surrogateescape" 를 사용합니다.

  • PyPreConfig.utf8_mode 가 0이 아니거나, LC_CTYPE 로케일이 “C” 또는 “POSIX”인 경우 "surrogateescape" 를 사용합니다.

  • 그렇지 않으면 "strict" 를 사용합니다.

PyConfig.legacy_windows_stdio 도 참조하십시오.

int tracemalloc

tracemalloc을 활성화합니까?

0이 아니면, 시작 시 tracemalloc.start()를 호출합니다.

-X tracemalloc=N 명령줄 옵션과 PYTHONTRACEMALLOC 환경 변수로 설정됩니다.

기본값: 파이썬 모드에서 -1, 격리 모드에서 0.

int perf_profiling

Linux perf 프로파일러 지원을 활성화합니까?

1``과 같으면 Linux ``perf 프로파일러 지원을 활성화합니다.

2``와 같으면 DWARF JIT 지원이 포함된 Linux ``perf 프로파일러 지원을 활성화합니다.

-X perf 명령줄 옵션과 PYTHONPERFSUPPORT 환경 변수로 설정됩니다.

-X perf_jit 명령줄 옵션과 PYTHON_PERF_JIT_SUPPORT 환경 변수로 설정됩니다.

기본값: -1.

더 보기

더 자세한 정보는 perf map 호환 프로파일러에 대한 파이썬 지원 을 참조하십시오.

Added in version 3.12.

wchar_t *stdlib_dir

Python 표준 라이브러리 디렉터리.

기본값: NULL.

Added in version 3.11.

int use_environment

환경 변수 를 사용합니까?

0과 같으면 환경 변수 를 무시합니다.

-E 환경 변수로 설정됩니다.

기본값: 파이썬 구성에서 1, 격리된 구성에서 0.

int use_system_logger

0이 아니면 stdoutstderr 가 시스템 로그로 리디렉션됩니다.

macOS 10.12 이상 및 iOS에서만 가능합니다.

기본값: macOS에서 0 (시스템 로그 미사용), iOS에서 1 (시스템 로그 사용).

Added in version 3.14.

int user_site_directory

0이 아니면 사용자 사이트 디렉터리를 sys.path 에 추가합니다.

-s-I 명령줄 옵션에 의해 0 으로 설정됩니다.

PYTHONNOUSERSITE 환경 변수에 의해 0 으로 설정됩니다.

기본값: 파이썬 모드에서는 1, 격리(isolated) 모드에서는 0.

int verbose

상세 모드입니다. 0 보다 크면 모듈이 임포트될 때마다 로드된 위치(파일명 또는 내장 모듈)를 표시하는 메시지를 출력합니다. 또한 종료 시 모듈 정리에 대한 정보를 제공합니다.

2 이상이면 모듈을 검색할 때 확인되는 각 파일에 대한 메시지를 출력합니다. 또한 종료 시 모듈 정리에 대한 정보를 제공합니다.

-v 명령줄 옵션에 의해 증가합니다.

PYTHONVERBOSE 환경 변수 값으로 설정됩니다.

기본값: 0.

PyWideStringList warnoptions

낮은 우선순위부터 높은 순서로 경고 필터를 구성하기 위한 warnings 모듈 옵션입니다: sys.warnoptions.

warnings 모듈은 sys.warnoptions를 역순으로 추가합니다: 마지막 PyConfig.warnoptions 항목은 가장 먼저 검사되는 warnings.filters의 첫 번째 항목이 됩니다 (가장 높은 우선순위).

-W 명령줄 옵션은 그 값을 warnoptions 에 추가하며, 여러 번 사용할 수 있습니다.

PYTHONWARNINGS 환경 변수도 경고 옵션을 추가하는 데 사용될 수 있습니다. 여러 옵션은 쉼표(,)로 구분하여 지정할 수 있습니다.

기본값: 빈 리스트.

int write_bytecode

0``과 같으면, 파이썬은 소스 모듈을 임포트할 ``.pyc 파일을 작성하지 않습니다.

-B 명령줄 옵션 및 PYTHONDONTWRITEBYTECODE 환경 변수에 의해 0 으로 설정됩니다.

sys.dont_write_bytecodewrite_bytecode의 반전된 값으로 초기화됩니다.

기본값: 1.

PyWideStringList xoptions

-X 명령줄 옵션의 값들: sys._xoptions.

기본값: 빈 리스트.

int _pystats

0이 아니면 파이썬 종료 시 성능 통계를 기록합니다.

Py_STATS 매크로가 포함된 특별한 빌드가 필요합니다: --enable-pystats 참조.

기본값: 0.

parse_argv 가 0이 아니면, argv 인자들은 일반 파이썬이 명령 줄 인자 를 구문 분석하는 것과 동일하게 처리되며, Python 관련 인자들이 argv 에서 제거됩니다.

xoptions 옵션은 다른 옵션을 설정하기 위해 구문 분석됩니다: -X 명령줄 옵션 참조.

버전 3.9에서 변경: show_alloc_count 필드가 제거되었습니다.

PyConfig를 사용한 초기화

구성된 설정 구조체로부터 인터프리터를 초기화하는 것은 Py_InitializeFromConfig() 을 호출하여 처리됩니다.

호출자는 PyStatus_Exception()Py_ExitStatusException() 을 사용하여 예외(에러나 종료)를 처리해야 합니다.

PyImport_FrozenModules(), PyImport_AppendInittab() 또는 PyImport_ExtendInittab() 을 사용하는 경우, 파이썬 사전 초기화(preinitialization) 이후 및 파이썬 초기화 전에 설정하거나 호출해야 합니다. 파이썬이 여러 번 초기화되는 경우, PyImport_AppendInittab() 또는 PyImport_ExtendInittab() 은 각 파이썬 초기화 직전에 호출되어야 합니다.

현재 구성(PyConfig 타입)은 PyInterpreterState.config 에 저장됩니다.

프로그램 이름을 설정하는 예:

void init_python(void)
{
    PyStatus status;

    PyConfig config;
    PyConfig_InitPythonConfig(&config);

    /* 프로그램 이름 설정. 파이썬을 암시적으로 사전 초기화함. */
    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);
}

기본 구성을 수정하고, 설정을 읽어온 후 일부 파라미터를 재정의(override)하는 더 완전한 예제입니다. 3.11 버전부터 많은 파라미터가 초기화 전까지 계산되지 않으므로 구성 구조체에서 값을 읽을 수 없음을 유의하십시오. init_python 이 호출되기 전에 설정된 값은 초기화 시에도 변경되지 않습니다:

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

    PyConfig config;
    PyConfig_InitPythonConfig(&config);

    /* 설정을 읽기 전에 프로그램 이름 설정
       (로케일 인코딩에서 바이트 문자열을 디코딩함).

       파이썬을 암시적으로 사전 초기화함. */
    status = PyConfig_SetBytesString(&config, &config.program_name,
                                     program_name);
    if (PyStatus_Exception(status)) {
        goto done;
    }

    /* 모든 설정을 한 번에 읽음 */
    status = PyConfig_Read(&config);
    if (PyStatus_Exception(status)) {
        goto done;
    }

    /* sys.path을 명시적으로 지정함 */
    /* 기본 경로 세트를 수정하려면 초기화 완료 후
       PySys_GetAttrString("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;
    }

    /* 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;
}

격리된 구성

PyPreConfig_InitIsolatedConfig()PyConfig_InitIsolatedConfig() 함수는 시스템에서 파이썬을 격리하는 구성을 만듭니다. 예를 들어, 파이썬을 응용 프로그램에 내장하기 위해.

이 설정은 전역 구성 변수, 환경 변수, 명령 줄 인자(PyConfig.argv 는 구문 분석되지 않음), 그리고 사용자 사이트 디렉터리를 무시합니다. C 표준 스트림(예: stdout)과 LC_CTYPE 로케일은 변경되지 않은 채로 유지됩니다. 시그널 핸들러도 설치되지 않습니다.

이 구성에서도 지정되지 않은 경로를 결정하기 위해 설정 파일이 여전히 사용됩니다. 기본 경로 구성을 계산하는 것을 방지하려면 PyConfig.home 이 명시적으로 지정되었는지 확인하십시오.

파이썬 구성

PyPreConfig_InitPythonConfig()PyConfig_InitPythonConfig() 함수는 일반 파이썬처럼 동작하는 사용자 정의된 파이썬을 빌드하기 위한 구성을 만듭니다.

환경 변수와 명령 줄 인자는 파이썬을 구성하는 데 사용되는 반면, 전역 구성 변수는 무시됩니다.

이 함수는 LC_CTYPE 로케일, PYTHONUTF8PYTHONCOERCECLOCALE 환경 변수에 따라 C 로케일 강제(coerce)(PEP 538) 및 Python UTF-8 모드 <utf8-mode>`(:pep:`540)를 활성화합니다.

Python 경로 설정

PyConfig에는 경로 구성을 위한 여러 필드가 포함되어 있습니다:

최소 하나 이상의 “출력 필드”가 설정되지 않은 경우, 파이썬은 설정되지 않은 필드를 채우기 위해 경로 구성을 계산합니다. 만약 module_search_paths_set0 과 같으면, module_search_paths 가 재정의되고 module_search_paths_set1 로 설정됩니다.

위에 나열된 모든 경로 구성 출력 필드를 명시적으로 설정하면 기본 경로 구성을 계산하는 함수를 완전히 무시할 수 있습니다. 문자열은 비어 있지 않은 경우에 설정된 것으로 간주됩니다. module_search_paths_set1 로 설정된 경우, module_search_paths 는 설정된 것으로 간주됩니다. 이 경우 module_search_paths 는 수정 없이 사용됩니다.

경로 구성 계산 시 경고를 억제하려면 pathconfig_warnings0 으로 설정하십시오(유닉스 전용이며, 윈도우에서는 어떠한 경고도 기록되지 않습니다).

base_prefixbase_exec_prefix 필드가 설정되지 않으면, 각각 prefixexec_prefix의 값을 상속합니다.

Py_RunMain()Py_Main()sys.path를 수정합니다:

  • run_filename이 설정되고 __main__.py 스크립트를 포함하는 디렉터리이면, run_filenamesys.path 앞에 추가합니다.

  • isolated가 0이면:

    • run_module이 설정되면, 현재 디렉터리를 sys.path 앞에 추가합니다. 현재 디렉터리를 읽을 수 없으면 아무것도 하지 않습니다.

    • run_filename이 설정되면, 파일명의 디렉터리를 sys.path 앞에 추가합니다.

    • 그렇지 않으면, 빈 문자열을 sys.path 앞에 추가합니다.

site_import가 0이 아니면, site 모듈이 sys.path를 수정할 수 있습니다. user_site_directory가 0이 아니고 사용자의 site-package 디렉터리가 존재하면, site 모듈은 사용자의 site-package 디렉터리를 sys.path에 추가합니다.

다음과 같은 구성 파일이 경로 구성에 사용됩니다:

  • pyvenv.cfg

  • ._pth 파일(예: python._pth)

  • pybuilddir.txt (유닉스 전용)

._pth 파일이 존재하는 경우:

home 이 설정되지 않았고, executable 과 동일한 디렉토리 또는 그 상위 디렉토리에 pyvenv.cfg 파일이 있는 경우, prefixexec_prefix 는 해당 위치로 설정됩니다. 이때 base_prefixbase_exec_prefix 는 여전히 원래 값을 유지하며 기본 설치 경로를 가리킵니다. 자세한 내용은 가상 환경 를 참조하십시오.

__PYVENV_LAUNCHER__ 환경 변수는 PyConfig.base_executable 을 설정하는 데 사용됩니다.

버전 3.14에서 변경: prefixexec_prefix 가 이제 pyvenv.cfg 디렉토리로 설정됩니다. 이전에는 이 작업이 site 에 의해 수행되었으며, 이에 따라 -S 의 영향을 받았습니다.

버전 3.15에서 변경: ._pth 파일이 존재할 때 user_site_directory 가 이제 0 으로 설정됩니다.

Py_GetArgcArgv()

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

파이썬이 수정하기 전의, 원래 명령 줄 인자를 가져옵니다.

PyConfig.orig_argv 멤버도 참조하십시오.

다단계 초기화 비공개 잠정적 API

이 섹션은 PEP 432의 핵심 기능인 다단계 초기화를 소개하는 비공개 잠정적 API입니다:

  • “핵심(Core)” 초기화 단계, “최소한의 파이썬”:

    • 내장형;

    • 내장 예외;

    • 내장과 프로즌 모듈(frozen modules);

    • sys 모듈은 부분적으로만 초기화됩니다 (예를 들어: sys.path는 아직 존재하지 않습니다).

  • “주(Main)” 초기화 단계, 파이썬이 완전히 초기화됩니다:

비공개 잠정적 API:

int PyConfig._init_main

이 값이 0 으로 설정되면, Py_InitializeFromConfig() 은 “핵심(Core)” 초기화 단계에서 중단됩니다.

PyStatus _Py_InitializeMain(void)

“주” 초기화 단계로 이동하여, 파이썬 초기화를 완료합니다.

“핵심” 단계에서는 아무런 모듈도 임포트 하지 않고 importlib 모듈이 구성되지 않습니다: 경로 구성은 “주” 단계에서만 적용됩니다. 경로 구성을 재정의하거나 조정하기 위해 파이썬에서 파이썬을 사용자 정의할 수 있으며, 사용자 정의 sys.meta_path 임포터(importer)나 임포트 훅 등을 설치할 수 있습니다.

핵심 단계 이후에 주 단계 이전에 파이썬에서 경로 구성을 계산할 수 있게 될 수 있고, 이것이 PEP 432의 동기 중 하나입니다.

“핵심” 단계가 제대로 정의되지 않았습니다: 이 단계에서 무엇을 사용할 수 있고, 무엇이 그렇지 않아야 하는지는 아직 지정되지 않았습니다. API는 비공개이자 잠정적인 것으로 표시됩니다: 적절한 공개 API가 설계될 때까지 언제든지 API를 수정하거나 제거할 수 있습니다.

“핵심”과 “주” 초기화 단계 사이에서 파이썬 코드를 실행하는 예제:

void init_python(void)
{
    PyStatus status;

    PyConfig config;
    PyConfig_InitPythonConfig(&config);
    config._init_main = 0;

    /* ... configure 'config' ... */

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

    /* sys.stdout이
       _Py_InitializeMain()에 의해 생성되므로 sys.stderr를 사용합니다 */
    int res = PyRun_SimpleString(
        "import sys; "
        "print('Run Python code before _Py_InitializeMain', "
               "file=sys.stderr)");
    if (res < 0) {
        exit(1);
    }

    /* ... 여기에 추가적인 설정 코드를 넣으십시오 ... */

    status = _Py_InitializeMain();
    if (PyStatus_Exception(status)) {
        Py_ExitStatusException(status);
    }
}

분실물 보관소