파이썬 초기화 구성¶
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 의 메모리를 해제합니다.
config 이
NULL이면 아무 작업도 수행하지 않습니다.
에러 처리¶
-
int PyInitConfig_GetError(PyInitConfig *config, const char **err_msg)¶
config 의 에러 메시지를 가져옵니다.
*err_msg 를 설정하고, 에러가 설정된 경우
1을 반환합니다.그렇지 않은 경우 *err_msg 를
NULL로 설정하고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을 반환합니다.
해당 옵션이 선택적 문자열이고 설정되지 않은 경우, *value 는
NULL로 설정될 수 있습니다.성공 시, 해당 문자열이
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_mode 를 1 로 설정한다고 해서 faulthandler 가 1 로 설정되지는 않습니다.
-
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 멤버 |
타입 |
가시성 |
|---|---|---|---|
|
|
읽기 전용 |
|
|
|
공개(Public) |
|
|
|
공개(Public) |
|
|
|
공개(Public) |
|
|
|
공개(Public) |
|
|
|
읽기 전용 |
|
|
|
공개(Public) |
|
|
|
읽기 전용 |
|
|
|
읽기 전용 |
|
|
|
읽기 전용 |
|
|
|
읽기 전용 |
|
|
|
읽기 전용 |
|
|
|
읽기 전용 |
|
|
|
공개(Public) |
|
|
|
읽기 전용 |
|
|
|
읽기 전용 |
|
|
|
읽기 전용 |
|
|
|
공개(Public) |
|
|
|
공개(Public) |
|
|
|
읽기 전용 |
|
|
|
읽기 전용 |
|
|
|
읽기 전용 |
|
|
|
읽기 전용 |
|
|
|
읽기 전용 |
|
|
|
읽기 전용 |
|
|
|
공개(Public) |
|
|
|
읽기 전용 |
|
|
|
공개(Public) |
|
|
|
공개(Public) |
|
|
|
읽기 전용 |
|
|
|
읽기 전용 |
|
|
|
읽기 전용 |
|
|
|
읽기 전용 |
|
|
|
공개(Public) |
|
|
|
공개(Public) |
|
|
|
읽기 전용 |
|
|
|
읽기 전용 |
|
|
|
공개(Public) |
|
|
|
읽기 전용 |
|
|
|
읽기 전용 |
|
|
|
공개(Public) |
|
|
|
공개(Public) |
|
|
|
읽기 전용 |
|
|
|
공개(Public) |
|
|
|
공개(Public) |
|
|
|
읽기 전용 |
|
|
|
읽기 전용 |
|
|
|
읽기 전용 |
|
|
|
읽기 전용 |
|
|
|
읽기 전용 |
|
|
|
읽기 전용 |
|
|
|
읽기 전용 |
|
|
|
읽기 전용 |
|
|
|
읽기 전용 |
|
|
|
읽기 전용 |
|
|
|
공개(Public) |
|
|
|
읽기 전용 |
|
|
|
공개(Public) |
|
|
|
읽기 전용 |
|
|
|
읽기 전용 |
|
|
|
읽기 전용 |
|
|
|
읽기 전용 |
|
|
|
읽기 전용 |
|
|
|
공개(Public) |
|
|
|
읽기 전용 |
|
|
|
공개(Public) |
|
|
|
공개(Public) |
|
|
|
공개(Public) |
|
|
|
읽기 전용 |
가시성:
공개:
PyConfig_Get()으로 가져올 수 있으며,PyConfig_Set()으로 설정할 수 있습니다.읽기 전용:
PyConfig_Get()으로 가져올 수 있으나,PyConfig_Set()으로 설정할 수 없습니다.
실행 시간 파이썬 구성 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을 반환합니다.
객체 유형은 구성 옵션에 따라 달라지며, 다음과 같을 수 있습니다:
boolintstrlist[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.
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이 아니면, items는
NULL이 아니어야 하고 모든 문자열은NULL이 아니어야 합니다.메서드:
-
PyStatus PyWideStringList_Append(PyWideStringList *list, const wchar_t *item)¶
item을 list에 추가합니다.
이 함수를 호출하려면 파이썬을 사전 초기화해야 합니다.
-
PyStatus PyWideStringList_Insert(PyWideStringList *list, Py_ssize_t index, const wchar_t *item)¶
item을 list의 index에 삽입합니다.
index가 list 길이보다 크거나 같으면, item을 list에 추가(append)합니다.
index 는
0이상이어야 합니다.이 함수를 호출하려면 파이썬을 사전 초기화해야 합니다.
구조체 필드:
-
Py_ssize_t length¶
리스트 길이.
-
wchar_t **items¶
리스트 항목들.
-
PyStatus PyWideStringList_Append(PyWideStringList *list, const wchar_t *item)¶
PyStatus¶
-
type PyStatus¶
초기화 함수 상태를 저장하는 구조체: 성공, 에러 또는 종료.
에러의 경우, 에러를 만든 C 함수 이름을 저장할 수 있습니다.
구조체 필드:
-
int exitcode¶
종료 코드.
exit()에 전달된 인자.
-
const char *err_msg¶
에러 메시지.
-
const char *func¶
에러를 만든 함수의 이름,
NULL일 수 있습니다.
상태를 만드는 함수:
상태를 처리하는 함수:
-
int PyStatus_Exception(PyStatus status)¶
상태가 에러입니까? 아니면 종료입니까? 참이면, 예외를 처리해야 합니다; 예를 들어
Py_ExitStatusException()을 호출하여.
-
int exitcode¶
참고
내부적으로, 파이썬은 PyStatus.func를 설정하는 데는 매크로를 사용하는 반면, func가 NULL로 설정된 상태를 만드는 데는 함수를 사용합니다.
예:
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_NOT_SET(0): 메모리 할당자를 변경하지 않습니다(기본값 사용).PYMEM_ALLOCATOR_DEFAULT(1): 기본 메모리 할당자.PYMEM_ALLOCATOR_DEBUG(2): 디버그 훅 이 포함된 기본 메모리 할당자.PYMEM_ALLOCATOR_MALLOC(3): C 라이브러리의malloc()을 사용합니다.PYMEM_ALLOCATOR_MALLOC_DEBUG(4): 디버그 훅 <pymem-debug-hooks>`과 함께 ``malloc()` 사용을 강제합니다.PYMEM_ALLOCATOR_PYMALLOC(5): 파이썬 pymalloc 메모리 할당자.PYMEM_ALLOCATOR_PYMALLOC_DEBUG(6): 디버그 훅 이 포함된 파이썬 pymalloc 메모리 할당자.PYMEM_ALLOCATOR_MIMALLOC(6): 빠른 malloc 대체재인mimalloc을 사용합니다.PYMEM_ALLOCATOR_MIMALLOC_DEBUG(7): 디버그 훅 이 포함된 빠른 malloc 대체재mimalloc을 사용합니다.
PYMEM_ALLOCATOR_PYMALLOCandPYMEM_ALLOCATOR_PYMALLOC_DEBUGare not supported if Python isconfigured using --without-pymalloc.PYMEM_ALLOCATOR_MIMALLOCandPYMEM_ALLOCATOR_MIMALLOC_DEBUGare not supported if Python isconfigured using --without-mimallocor if the underlying atomic support isn’t available.메모리 관리를 참조하십시오.
기본값:
PYMEM_ALLOCATOR_NOT_SET.
-
int configure_locale¶
LC_CTYPE 로케일을 사용자가 선호하는 로케일로 설정합니다.
0과 같으면,coerce_c_locale및coerce_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이 아니면:
PyPreConfig.utf8_mode를0으로 설정하고,PyConfig.filesystem_encoding을"mbcs"로 설정하며,PyConfig.filesystem_errors를"replace"로 설정합니다.
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.
-
void PyPreConfig_InitPythonConfig(PyPreConfig *preconfig)¶
PyPreConfig를 사용하여 파이썬을 사전 초기화합니다.¶
파이썬의 사전 초기화:
파이썬 메모리 할당자 설정(
PyPreConfig.allocator)Configure the LC_CTYPE locale (locale encoding)
현재 사전 구성(PyPreConfig 타입)은 _PyRuntime.preconfig 에 저장됩니다.
파이썬을 사전 초기화하는 함수:
-
PyStatus Py_PreInitialize(const PyPreConfig *preconfig)¶
preconfig 사전 구성에서 파이썬을 사전 초기화합니다.
preconfig 은
NULL이 아니어야 합니다.
-
PyStatus Py_PreInitializeFromBytesArgs(const PyPreConfig *preconfig, int argc, char *const *argv)¶
preconfig 사전 구성에서 파이썬을 사전 초기화합니다.
preconfig 의
parse_argv가 0이 아니면, argv 명령 줄 인자(바이트 문자열)를 구문 분석합니다.preconfig 은
NULL이 아니어야 합니다.
-
PyStatus Py_PreInitializeFromArgs(const PyPreConfig *preconfig, int argc, wchar_t *const *argv)¶
preconfig 사전 구성에서 파이썬을 사전 초기화합니다.
preconfig 의
parse_argv가 0이 아니면, argv 명령 줄 인자(와이드 문자열)를 구문 분석합니다.preconfig 은
NULL이 아니어야 합니다.
호출자는 PyStatus_Exception()과 Py_ExitStatusException() 을 사용하여 예외(에러나 종료)를 처리해야 합니다.
파이썬 구성 (PyPreConfig_InitPythonConfig())의 경우, 파이썬이 명령 줄 인수와 함께 초기화되는 경우 해당 인수를 파이썬 사전 초기화 시에도 전달해야 합니다. 이러한 인자들은 인코딩과 같이 사전 구성에 영향을 미치기 때문입니다. 예를 들어, -X utf8 명령 줄 옵션은 파이썬 UTF-8 모드 를 활성화합니다.
PyMem_SetAllocator()는 Py_PreInitialize() 이후에 Py_InitializeFromConfig() 이전에 호출하여 사용자 정의 메모리 할당자를 설치할 수 있습니다. PyPreConfig.allocator가 PYMEM_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()함수를 사용해야 합니다.구조체 메서드:
-
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 목록으로부터 명령 줄 인자(config 의
argv멤버)를 설정합니다.필요한 경우 파이썬 사전 초기화 를 수행하십시오.
-
PyStatus PyConfig_SetBytesArgv(PyConfig *config, int argc, char *const *argv)¶
바이트 문자열의 argv 목록으로부터 명령 줄 인자(config 의
argv멤버)를 설정합니다. 바이트는Py_DecodeLocale()을 사용하여 디코딩하십시오.필요한 경우 파이썬 사전 초기화 를 수행하십시오.
-
PyStatus PyConfig_SetWideStringList(PyConfig *config, PyWideStringList *list, Py_ssize_t length, wchar_t **items)¶
와이드 문자열 리스트 list를 length와 items로 설정합니다.
필요한 경우 파이썬 사전 초기화 를 수행하십시오.
-
PyStatus PyConfig_Read(PyConfig *config)¶
모든 파이썬 구성을 읽습니다.
이미 초기화된 필드는 변경되지 않습니다.
Python 3.11부터 이 함수를 호출할 때 경로 구성 의 필드는 더 이상 계산되거나 수정되지 않습니다.
PyConfig_Read()함수는PyConfig.argv인자를 한 번만 파싱합니다. 인자 파싱 후PyConfig.parse_argv가2로 설정됩니다.PyConfig.argv에서 파이썬 인자가 제거되므로, 인자를 두 번 파싱하면 애플리케이션 옵션이 파이썬 옵션으로 해석될 수 있습니다.필요한 경우 파이썬 사전 초기화 를 수행하십시오.
버전 3.10에서 변경:
PyConfig.argv인자는 이제 한 번만 파싱되며, 파싱 후PyConfig.parse_argv가2로 설정됩니다. 또한PyConfig.parse_argv가1인 경우에만 인자를 파싱합니다.버전 3.11에서 변경:
PyConfig_Read()는 더 이상 모든 경로를 계산하지 않으므로, 파이썬 경로 구성 아래 나열된 필드는Py_InitializeFromConfig()가 호출될 때까지 업데이트되지 않을 수 있습니다.
Most
PyConfigmethods preinitialize Python if needed. In that case, the Python preinitialization configuration (PyPreConfig) is based on thePyConfig. If configuration fields which are in common withPyPreConfigare tuned, they must be set before calling aPyConfigmethod:또한,
PyConfig_SetArgv()또는PyConfig_SetBytesArgv()를 사용하는 경우, 사전 초기화 구성이 명령 줄 인수에 의존하므로(parse_argv가 0이 아닌 경우) 이 메서드를 다른 메서드보다 먼저 호출해야 합니다.이 메서드의 호출자는
PyStatus_Exception()과Py_ExitStatusException()을 사용하여 예외(에러나 종료)를 처리해야 합니다.구조체 필드:
-
PyWideStringList argv¶
argv를 기반으로sys.argv명령 줄 인자를 설정합니다. 이 매개변수들은 프로그램의main()함수에 전달되는 것과 유사하지만, 첫 번째 항목이 파이썬 인터프리터를 포함하는 실행 파일 대신 실행될 스크립트 파일을 가리켜야 한다는 차이가 있습니다. 실행할 스크립트가 없는 경우,argv의 첫 번째 항목은 빈 문자열일 수 있습니다.일반 파이썬이 파이썬 명령 줄 인자를 구문 분석하는 것과 동일한 방식으로
argv를 구문 분석하려면parse_argv를1로 설정하고, 그 후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 code및python), 현재 작업 디렉터리를 의미하는 빈 문자열을 앞에 붙입니다.
명령 줄 옵션
-P및 환경 변수PYTHONSAFEPATH에 의해1로 설정됩니다.기본값: 파이썬 구성에서는
0, 격리된 구성에서는1.Added in version 3.11.
-
wchar_t *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¶
-
기본값:
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또는bytearray를str과 비교하거나,bytes를int와 비교할 때 경고를 발생시킵니다.이 값이
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"을 사용하며,PyPreConfig의legacy_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"를 사용하며,PyPreConfig의legacy_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 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_path를1로 설정: 파이썬 시작 시 현재 디렉터리, 스크립트 디렉터리 또는 빈 문자열과 같이 잠재적으로 안전하지 않은 경로를sys.path에 추가하지 않습니다.use_environment을0으로 설정:PYTHON환경 변수를 무시합니다.user_site_directory를0으로 설정: 유저 사이트 디렉터리를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
1if thePYTHONLEGACYWINDOWSSTDIOenvironment 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
PLATLIBDIRmacro which is set by theconfigure --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_set이0과 같으면,Py_InitializeFromConfig()가module_search_paths를 대체하고module_search_paths_set을1로 설정합니다.기본값: 빈 리스트(
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_argvlist is empty andargvis not a list only containing an empty string,PyConfig_Read()copiesargvintoorig_argvbefore modifyingargv(ifparse_argvis non-zero).argv멤버와Py_GetArgcArgv()함수를 참조하십시오.기본값: 빈 리스트.
Added in version 3.10.
-
int parse_argv¶
명령줄 인자를 구문 분석하시겠습니까?
1과 같으면 일반적인 파이썬이 명령줄 인자 를 구문 분석하는 것과 동일한 방식으로argv를 구문 분석하고,argv에서 파이썬 관련 인자를 제거합니다.PyConfig_Read()함수는PyConfig.argv인자를 한 번만 파싱합니다. 인자 파싱 후PyConfig.parse_argv가2로 설정됩니다.PyConfig.argv에서 파이썬 인자가 제거되므로, 인자를 두 번 파싱하면 애플리케이션 옵션이 파이썬 옵션으로 해석될 수 있습니다.기본값: 파이썬 모드에서는
1, 격리(isolated) 모드에서는0.버전 3.10에서 변경:
PyConfig.argv인자는 이제PyConfig.parse_argv가1인 경우에만 구문 분석됩니다.
-
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__환경 변수를 사용합니다.사용 가능하고 비어 있지 않다면
argv의argv[0]을 사용합니다.그렇지 않으면 Windows에서는
L"python"을, 다른 플랫폼에서는L"python3"를 사용합니다.
기본값:
NULL.파이썬 경로 구성 입력의 일부입니다.
-
wchar_t *pycache_prefix¶
캐시된
.pyc파일이 기록되는 디렉터리:sys.pycache_prefix.-X pycache_prefix=PATH명령줄 옵션 및PYTHONPYCACHEPREFIX환경 변수로 설정됩니다. 명령줄 옵션이 우선합니다.NULL이면,sys.pycache_prefix는None으로 설정됩니다.기본값:
NULL.
-
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_siteis set to the inverted value ofsite_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환경 변수가 비어 있지 않으면 해당 변수를 사용합니다.기본 인코딩:
PyPreConfig.utf8_mode가 0이 아니면"UTF-8"을 사용합니다.Otherwise, use the locale encoding.
기본 에러 처리기:
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이 아니면
stdout과stderr가 시스템 로그로 리디렉션됩니다.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_bytecode는write_bytecode의 반전된 값으로 초기화됩니다.기본값:
1.
-
PyWideStringList xoptions¶
-X명령줄 옵션의 값들:sys._xoptions.기본값: 빈 리스트.
-
int _pystats¶
0이 아니면 파이썬 종료 시 성능 통계를 기록합니다.
Py_STATS매크로가 포함된 특별한 빌드가 필요합니다:--enable-pystats참조.기본값:
0.
-
PyStatus PyConfig_SetString(PyConfig *config, wchar_t *const *config_str, const wchar_t *str)¶
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 로케일, PYTHONUTF8 및 PYTHONCOERCECLOCALE 환경 변수에 따라 C 로케일 강제(coerce)(PEP 538) 및 Python UTF-8 모드 <utf8-mode>`(:pep:`540)를 활성화합니다.
Python 경로 설정¶
PyConfig에는 경로 구성을 위한 여러 필드가 포함되어 있습니다:
경로 구성 입력:
현재 작업 디렉터리: 절대 경로를 얻기 위해
(
PyConfig.program_name에서) 프로그램 전체 경로를 얻기 위한PATH환경 변수__PYVENV_LAUNCHER__환경 변수(윈도우 전용) HKEY_CURRENT_USER와 HKEY_LOCAL_MACHINE의 “SoftwarePythonPythonCoreX.YPythonPath” 아래에 있는 레지스트리의 응용 프로그램 경로 (여기서 X.Y는 파이썬 버전입니다).
경로 구성 출력 필드:
최소 하나 이상의 “출력 필드”가 설정되지 않은 경우, 파이썬은 설정되지 않은 필드를 채우기 위해 경로 구성을 계산합니다. 만약 module_search_paths_set 이 0 과 같으면, module_search_paths 가 재정의되고 module_search_paths_set 은 1 로 설정됩니다.
위에 나열된 모든 경로 구성 출력 필드를 명시적으로 설정하면 기본 경로 구성을 계산하는 함수를 완전히 무시할 수 있습니다. 문자열은 비어 있지 않은 경우에 설정된 것으로 간주됩니다. module_search_paths_set 이 1 로 설정된 경우, module_search_paths 는 설정된 것으로 간주됩니다. 이 경우 module_search_paths 는 수정 없이 사용됩니다.
경로 구성 계산 시 경고를 억제하려면 pathconfig_warnings 를 0 으로 설정하십시오(유닉스 전용이며, 윈도우에서는 어떠한 경고도 기록되지 않습니다).
base_prefix나 base_exec_prefix 필드가 설정되지 않으면, 각각 prefix와 exec_prefix의 값을 상속합니다.
Py_RunMain()과 Py_Main()은 sys.path를 수정합니다:
run_filename이 설정되고__main__.py스크립트를 포함하는 디렉터리이면,run_filename을sys.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 파일이 존재하는 경우:
isolated를1로 설정하십시오.use_environment을0으로 설정하십시오.site_import을0으로 설정하십시오.user_site_directory을0으로 설정하십시오(3.15부터).safe_path를1로 설정하십시오.
home 이 설정되지 않았고, executable 과 동일한 디렉토리 또는 그 상위 디렉토리에 pyvenv.cfg 파일이 있는 경우, prefix 와 exec_prefix 는 해당 위치로 설정됩니다. 이때 base_prefix 와 base_exec_prefix 는 여전히 원래 값을 유지하며 기본 설치 경로를 가리킵니다. 자세한 내용은 가상 환경 를 참조하십시오.
__PYVENV_LAUNCHER__ 환경 변수는 PyConfig.base_executable 을 설정하는 데 사용됩니다.
버전 3.14에서 변경: prefix 와 exec_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)” 초기화 단계, “최소한의 파이썬”:
“주(Main)” 초기화 단계, 파이썬이 완전히 초기화됩니다:
importlib를 설치하고 구성합니다;경로 구성을 적용합니다;
시그널 핸들러를 설치합니다.
sys모듈 초기화를 완료합니다 (예를 들어:sys.stdout과sys.path를 만듭니다);faulthandler와tracemalloc과 같은 선택적 기능을 활성화합니다;site모듈을 임포트 합니다;등등
비공개 잠정적 API:
-
int PyConfig._init_main¶
이 값이
0으로 설정되면,Py_InitializeFromConfig()은 “핵심(Core)” 초기화 단계에서 중단됩니다.
“핵심” 단계에서는 아무런 모듈도 임포트 하지 않고 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);
}
}