Python 初始化配置¶
PyInitConfig C API¶
Added in version 3.14.
Python 可以用 Py_InitializeFromInitConfig() 来初始化。
Py_RunMain() 函数可被用来编写定制的 Python 程序。
另请参阅 初始化、最终化与线程。
参见
PEP 741 "Python 配置 C API"。
示例¶
运行时始终启用 Python 开发模式 的定制版 Python 的例子;出错时将返回 -1:
int init_python(void)
{
PyInitConfig *config = PyInitConfig_Create();
if (config == NULL) {
printf("PYTHON INIT ERROR: memory allocation failed\n");
return -1;
}
// 启用 Python 开发模式
if (PyInitConfig_SetInt(config, "dev_mode", 1) < 0) {
goto error;
}
// 使用配置初始化 Python
if (Py_InitializeFromInitConfig(config) < 0) {
goto error;
}
PyInitConfig_Free(config);
return 0;
error:
{
// 显示错误消息
//
// 使用这种不常见的花括号风格,因为你不能
// 将跳转目标指向变量声明。
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¶
用于配置 Python 初始化的不透明结构体。
-
PyInitConfig *PyInitConfig_Create(void)¶
使用 隔离配置 的默认值新建一个初始化配置。
它必须由
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 退出码。
如果 config 设置了一个退出码则设置 *exitcode 并返回
1。如果 config 没有设置退出码则返回
0。
如果
parse_argv选项为非零值则只有Py_InitializeFromInitConfig()函数能设置退出码。退出码的设置可以在解析命令行失败时 (退出码
2) 或是在命令行选项请求显示命令行帮助时 (退出码0) 进行。
获取选项¶
配置选项的 name 形参必须是一个非 NULL 的以空值结束的 UTF-8 编码字符串。参见 配置选项 一节。
-
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 的以空值结束的 UTF-8 编码字符串。参见 配置选项 一节。
某些配置选项具有对其他选项的附带影响。这种逻辑仅限于调用了 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 要被多次初始化,则
PyInitConfig_AddModule()必须在每次 Python 初始化时被调用。类似于
PyImport_AppendInittab()函数。
初始化 Python¶
-
int Py_InitializeFromInitConfig(PyInitConfig *config)¶
根据初始化配置来初始化 Python。
成功时返回
0。在出错时在 config 中设置一个错误并返回
-1。如果 Python 想要退出则在 config 中设置一个退出码并返回
-1。
请参阅
PyInitConfig_GetExitcode()了解退出码用例。
配置选项¶
选项 |
PyConfig/PyPreConfig 成员 |
类型 |
可见性 |
|---|---|---|---|
|
|
只读 |
|
|
|
公有 |
|
|
|
公有 |
|
|
|
公有 |
|
|
|
公有 |
|
|
|
只读 |
|
|
|
公有 |
|
|
|
只读 |
|
|
|
只读 |
|
|
|
只读 |
|
|
|
只读 |
|
|
|
只读 |
|
|
|
只读 |
|
|
|
公有 |
|
|
|
只读 |
|
|
|
只读 |
|
|
|
只读 |
|
|
|
公有 |
|
|
|
公有 |
|
|
|
只读 |
|
|
|
只读 |
|
|
|
只读 |
|
|
|
只读 |
|
|
|
只读 |
|
|
|
只读 |
|
|
|
公有 |
|
|
|
只读 |
|
|
|
公有 |
|
|
|
公有 |
|
|
|
只读 |
|
|
|
只读 |
|
|
|
只读 |
|
|
|
只读 |
|
|
|
公有 |
|
|
|
公有 |
|
|
|
只读 |
|
|
|
只读 |
|
|
|
公有 |
|
|
|
只读 |
|
|
|
只读 |
|
|
|
公有 |
|
|
|
公有 |
|
|
|
只读 |
|
|
|
公有 |
|
|
|
公有 |
|
|
|
只读 |
|
|
|
只读 |
|
|
|
只读 |
|
|
|
只读 |
|
|
|
只读 |
|
|
|
只读 |
|
|
|
只读 |
|
|
|
只读 |
|
|
|
只读 |
|
|
|
只读 |
|
|
|
公有 |
|
|
|
只读 |
|
|
|
公有 |
|
|
|
只读 |
|
|
|
只读 |
|
|
|
只读 |
|
|
|
只读 |
|
|
|
只读 |
|
|
|
公有 |
|
|
|
只读 |
|
|
|
公有 |
|
|
|
公有 |
|
|
|
公有 |
|
|
|
只读 |
可见性:
Public: Can be retrieved by
PyConfig_Get()and set byPyConfig_Set().Read-only: Can be retrieved by
PyConfig_Get(), but cannot be set byPyConfig_Set().
运行时 Python 配置 API¶
在运行时,有可能使用 PyConfig_Get() 和 PyConfig_Set() 函数来获取和设置配置选项。
配置选项的 name 形参必须是一个非 NULL 的以空值结束的 UTF-8 编码字符串。参见 配置选项 一节。
有些选项是从 sys 的属性读取的。例如,选项 "argv" 是从 sys.argv 读取的。
-
PyObject *PyConfig_Get(const char *name)¶
获取一个配置选项的以 Python 对象表示的当前运行时值。
成功时返回一个新的引用。
出错时设置一个异常并返回
NULL。
对象类型取决于具体的配置选项。它可以是:
boolintstrlist[str]dict[str, str]
调用方必须拥有一个 attached thread state。这个函数不能在 Python 初始化之前或 Python 最终化之后被调用。
Added in version 3.14.
-
int PyConfig_GetInt(const char *name, int *value)¶
类似于
PyConfig_Get(),但会获取 C int 形式的值。成功时返回
0。出错时设置一个异常并返回
-1。
Added in version 3.14.
-
PyObject *PyConfig_Names(void)¶
获取以一个
frozenset表示的全部配置选项名称。成功时返回一个新的引用。
出错时设置一个异常并返回
NULL。
调用方必须拥有一个 attached thread state。这个函数不能在 Python 初始化之前或 Python 最终化之后被调用。
Added in version 3.14.
-
int PyConfig_Set(const char *name, PyObject *value)¶
设置一个配置选项的当前运行时值。
如果没有选项 name 则会引发
ValueError。如果 value 是一个无效的值则会引发
ValueError。如果选项是只读的(无法被设置)则会引发
ValueError。如果 value 的类型不正确则会引发
TypeError。
调用方必须拥有一个 attached thread state。这个函数不能在 Python 初始化之前或 Python 最终化之后被调用。
引发一个 审计事件
cpython.PyConfig_Set并附带name和value两个参数。Added in version 3.14.
PyConfig C API¶
Added in version 3.8.
Python 可以使用 Py_InitializeFromConfig() 和 PyConfig 结构体来初始化。它可以使用 Py_PreInitialize() 和 PyPreConfig 结构体来预初始化。
有两种配置方式:
Python 配置 可被用于构建一个定制的 Python,其行为与常规 Python 类似。例如,环境变量和命令行参数可被用于配置 Python。
隔离配置 可被用于将 Python 嵌入到应用程序。它将 Python 与系统隔离开来。例如,环境变量将被忽略,LC_CTYPE 语言区域设置保持不变并且不会注册任何信号处理器。
Py_RunMain() 函数可被用来编写定制的 Python 程序。
另请参阅 初始化、最终化与线程。
参见
PEP 587 "Python 初始化配置".
示例¶
总是以隔离模式运行的定制 Python 的示例:
int main(int argc, char **argv)
{
PyStatus status;
PyConfig config;
PyConfig_InitPythonConfig(&config);
config.isolated = 1;
/* 解码命令行参数。
隐式地预初始化 Python (隔离模式)。*/
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;
}
/* 显示错误消息然后退出进程
并设置非零值退出码 */
Py_ExitStatusException(status);
}
PyWideStringList¶
-
type PyWideStringList¶
由
wchar_t*字符串组成的列表。如果 length 为非零值,则 items 必须不为
NULL并且所有字符串均必须不为NULL。方法
-
PyStatus PyWideStringList_Append(PyWideStringList *list, const wchar_t *item)¶
将 item 添加到 list。
Python 必须被预初始化以便调用此函数。
-
PyStatus PyWideStringList_Insert(PyWideStringList *list, Py_ssize_t index, const wchar_t *item)¶
将 item 插入到 list 的 index 位置上。
如果 index 大于等于 list 的长度,则将 item 添加到 list。
index 必须大于等于
0。Python 必须被预初始化以便调用此函数。
结构体字段:
-
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¶
备注
在内部,Python 将使用设置 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¶
用于预初始化 Python 的结构体。
用于初始化预先配置的函数:
-
void PyPreConfig_InitPythonConfig(PyPreConfig *preconfig)¶
通过 Python 配置 来初始化预先配置。
-
void PyPreConfig_InitIsolatedConfig(PyPreConfig *preconfig)¶
通过 隔离配置 来初始化预先配置。
结构体字段:
-
int allocator¶
Python 内存分配器名称:
PYMEM_ALLOCATOR_NOT_SET(0): 不改变内存分配器 (使用默认)。PYMEM_ALLOCATOR_DEFAULT(1): 默认内存分配器 设置。PYMEM_ALLOCATOR_MALLOC(3): 使用 C 库的malloc()。PYMEM_ALLOCATOR_MALLOC_DEBUG(4): 强制使用malloc()附带 调试钩子 功能。PYMEM_ALLOCATOR_PYMALLOC(5): Python pymalloc 内存分配器 实现。PYMEM_ALLOCATOR_PYMALLOC_DEBUG(6): Python pymalloc 内存分配器 附带 调试钩子。PYMEM_ALLOCATOR_MIMALLOC(6): 使用mimalloc,一个快速的 malloc 替代。PYMEM_ALLOCATOR_MIMALLOC_DEBUG(7): 使用mimalloc,一个快速的 malloc 替代,它带有 调试钩子。
如果 Python 是
使用 --without-pymalloc 进行配置则PYMEM_ALLOCATOR_PYMALLOC和PYMEM_ALLOCATOR_PYMALLOC_DEBUG将不被支持。如果 Python 是
使用 --without-mimalloc 进行配置或者如果下层的原子化支持不可用则PYMEM_ALLOCATOR_MIMALLOC和PYMEM_ALLOCATOR_MIMALLOC_DEBUG将不被支持。默认值:
PYMEM_ALLOCATOR_NOT_SET。
-
int configure_locale¶
将 LC_CTYPE 语言区域设为用户选择的语言区域。
如果等于
0,则将coerce_c_locale和coerce_c_locale_warn的成员设为0。参见 locale encoding。
默认值:在 Python 配置中为
1,在隔离配置中为0。
-
int coerce_c_locale¶
如果等于
2,强制转换 C 语言区域。如果等于
1,则读取 LC_CTYPE 语言区域来确定其是否应当被强制转换。参见 locale encoding。
默认值:在 Python 配置中为
-1,在隔离配置中为0。
-
int coerce_c_locale_warn¶
如为非零值,则会在 C 语言区域被强制转换时发出警告。
默认值:在 Python 配置中为
-1,在隔离配置中为0。
-
int dev_mode¶
Python 开发模式: 参见
PyConfig.dev_mode。默认值:在 Python 模式中为
-1,在隔离模式中为0。
-
int isolated¶
隔离模式:参见
PyConfig.isolated。默认值:在 Python 模式中为
0,在隔离模式中为1。
-
int legacy_windows_fs_encoding¶
如为非零值:
设置
PyPreConfig.utf8_mode为0,设置
PyConfig.filesystem_encoding为"mbcs",设置
PyConfig.filesystem_errors为"replace".
基于
PYTHONLEGACYWINDOWSFSENCODING环境变量值完成初始化。仅在 Windows 上可用。
#ifdef MS_WINDOWS宏可被用于 Windows 专属的代码。默认值:
0。
-
int parse_argv¶
如为非零值,
Py_PreInitializeFromArgs()和Py_PreInitializeFromBytesArgs()将以与常规 Python 解析命令行参数的相同方式解析其argv参数:参见 命令行参数。默认值:在 Python 配置中为
1,在隔离配置中为0。
-
int use_environment¶
使用 环境变量? 参见
PyConfig.use_environment。默认值:在 Python 配置中为
1而在隔离配置中为0。
-
int utf8_mode¶
如为非零值,则启用 Python UTF-8 模式。
通过
-X utf8命令行选项和PYTHONUTF8环境变量设为0或1。如果
LC_CTYPE语言区域为C或POSIX也会被设为1。默认值:在 Python 配置中为
-1而在隔离配置中为0。
-
void PyPreConfig_InitPythonConfig(PyPreConfig *preconfig)¶
使用 PyPreConfig 预初始化 Python¶
Python 的预初始化:
设置 Python 内存分配器 (
PyPreConfig.allocator)配置 LC_CTYPE 语言区域 (locale encoding)
当前的预配置 (PyPreConfig 类型) 保存在 _PyRuntime.preconfig 中。
用于预初始化 Python 的函数:
-
PyStatus Py_PreInitialize(const PyPreConfig *preconfig)¶
根据 preconfig 预配置来预初始化 Python。
preconfig 不可为
NULL。
-
PyStatus Py_PreInitializeFromBytesArgs(const PyPreConfig *preconfig, int argc, char *const *argv)¶
根据 preconfig 预配置来预初始化 Python。
如果 preconfig 的
parse_argv为非零值则解析 argv 命令行参数(字节串)。preconfig 不可为
NULL。
-
PyStatus Py_PreInitializeFromArgs(const PyPreConfig *preconfig, int argc, wchar_t *const *argv)¶
根据 preconfig 预配置来预初始化 Python。
如果 preconfig 的
parse_argv为非零值则解析 argv 命令行参数(宽字符串)。preconfig 不可为
NULL。
调用方要负责使用 PyStatus_Exception() 和 Py_ExitStatusException() 来处理异常(错误或退出)。
对于 Python 配置 (PyPreConfig_InitPythonConfig()),如果 Python 是用命令行参数初始化的,那么在预初始化 Python 时也必须传递命令行参数,因为它们会对编码格式等预配置产生影响。例如,-X utf8 命令行选项将启用 Python UTF-8 模式。
PyMem_SetAllocator() 可在 Py_PreInitialize() 之后、Py_InitializeFromConfig() 之前被调用以安装自定义的内存分配器。如果 PyPreConfig.allocator 被设为 PYMEM_ALLOCATOR_NOT_SET 则可在 Py_PreInitialize() 之前被调用。
像 PyMem_RawMalloc() 这样的 Python 内存分配函数不能在 Python 预初始化之前使用,而直接调用 malloc() 和 free() 则始终会是安全的。Py_DecodeLocale() 不能在 Python 预初始化之前被调用。
使用预初始化来启用 Python UTF-8 模式 的例子:
PyStatus status;
PyPreConfig preconfig;
PyPreConfig_InitPythonConfig(&preconfig);
preconfig.utf8_mode = 1;
status = Py_PreInitialize(&preconfig);
if (PyStatus_Exception(status)) {
Py_ExitStatusException(status);
}
/* 此时,Python 将使用 UTF-8 */
Py_Initialize();
/* ... 在此使用 Python API ... */
Py_Finalize();
PyConfig¶
-
type PyConfig¶
包含了大部分用于配置 Python 的形参的结构体。
在完成后,必须使用
PyConfig_Clear()函数来释放配置内存。结构体方法:
-
PyStatus PyConfig_SetString(PyConfig *config, wchar_t *const *config_str, const wchar_t *str)¶
将宽字符串 str 拷贝至
*config_str。在必要时 预初始化 Python。
-
PyStatus PyConfig_SetBytesString(PyConfig *config, wchar_t *const *config_str, const char *str)¶
使用
Py_DecodeLocale()对 str 进行解码并将结果设置到*config_str。在必要时 预初始化 Python。
-
PyStatus PyConfig_SetArgv(PyConfig *config, int argc, wchar_t *const *argv)¶
根据宽字符串列表 argv 设置命令行参数 (config 的
argv成员)。在必要时 预初始化 Python。
-
PyStatus PyConfig_SetBytesArgv(PyConfig *config, int argc, char *const *argv)¶
根据字节串列表 argv 设置命令行参数 (config 的
argv成员)。使用Py_DecodeLocale()对字节串进行解码。在必要时 预初始化 Python。
-
PyStatus PyConfig_SetWideStringList(PyConfig *config, PyWideStringList *list, Py_ssize_t length, wchar_t **items)¶
将宽字符串列表 list 设置为 length 和 items。
在必要时 预初始化 Python。
-
PyStatus PyConfig_Read(PyConfig *config)¶
读取所有 Python 配置。
已经初始化的字段会保持不变。
自 Python 3.11 起,调用此函数时不再计算或修改用于 路径配置 的字段。
PyConfig_Read()函数对PyConfig.argv参数只会解析一次:在参数解析完成后PyConfig.parse_argv将被设为2。由于 Python 参数是从PyConfig.argv提取的,因此解析参数两次会将应用程序选项解析为 Python 选项。在必要时 预初始化 Python。
在 3.10 版本发生变更:
PyConfig.argv参数现在只会被解析一次,在参数解析完成后,PyConfig.parse_argv将被设为2,只有当PyConfig.parse_argv等于1时才会解析参数。在 3.11 版本发生变更:
PyConfig_Read()不会再计算所有路径,因此在 Python 路径配置 下列出的字段可能不会再更新直到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为非零值)。这些方法的调用者要负责使用
PyStatus_Exception()和Py_ExitStatusException()来处理异常(错误或退出)。结构体字段:
-
PyWideStringList argv¶
根据
argv设置sys.argv命令行参数。这些形参与传给程序的main()函数的类似,区别在于其中第一项应当指向要执行的脚本文件而不是 Python 解释器对应的可执行文件。如果没有要运行的脚本,则argv中的第一项可以为空字符串。将
parse_argv设为1将以与普通 Python 解析 Python 命令行参数相同的方式解析argv再从argv中剥离 Python 参数。如果
argv为空,则会添加一个空字符串以确保sys.argv始终存在并且永远不为空。默认值:
NULL。另请参阅
orig_argv成员。
-
int safe_path¶
如果等于零,
Py_RunMain()会在启动时向sys.path开头添加一个可能不安全的路径:如果
argv[0]等于L"-m"(python -m module),则添加当前工作目录。如果是运行脚本 (
python script.py),则添加脚本的目录。如果是符号链接,则会解析符号链接。在其他情况下 (
python -c code和python),将添加一个空字符串,这表示当前工作目录。
通过
-P命令行选项和PYTHONSAFEPATH环境变量设置为1。默认值:Python 配置中为
0,隔离配置中为1。Added in version 3.11.
-
wchar_t *base_exec_prefix¶
-
默认值:
NULL。Python 路径配置 的一部分。
另请参阅
PyConfig.exec_prefix。
-
wchar_t *base_executable¶
Python 基础可执行文件:
sys._base_executable。由
__PYVENV_LAUNCHER__环境变量设置。如为
NULL则从PyConfig.executable设置。默认值:
NULL。Python 路径配置 的一部分。
另请参阅
PyConfig.executable。
-
wchar_t *base_prefix¶
-
默认值:
NULL。Python 路径配置 的一部分。
另请参阅
PyConfig.prefix。
-
int buffered_stdio¶
如果等于
0且configure_c_stdio为非零值,则禁用 C 数据流 stdout 和 stderr 的缓冲。通过
-u命令行选项和PYTHONUNBUFFERED环境变量设置为0。stdin 始终以缓冲模式打开。
默认值:
1。
-
int bytes_warning¶
如果等于
1,则在将bytes或bytearray与str进行比较,或将bytes与int进行比较时发出警告。如果大于等于
2,则在这些情况下引发BytesWarning异常。由
-b命令行选项执行递增。默认值:
0。
-
int warn_default_encoding¶
如为非零值,则在
io.TextIOWrapper使用默认编码格式时发出EncodingWarning警告。详情请参阅 选择性的 EncodingWarning。默认值:
0。Added in version 3.10.
-
int code_debug_ranges¶
如果等于
0,则禁用在代码对象中包括末尾行和列映射。并且禁用在特定错误位置打印回溯标记。通过
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¶
如为非零值,则配置 C 标准流:
在 Windows 中,在 stdin, stdout 和 stderr 上设置二进制模式 (
O_BINARY)。如果
buffered_stdio等于零,则禁用 stdin, stdout 和 stderr 流的缓冲。如果
interactive为非零值,则启用 stdin 和 stdout 上的流缓冲(Windows 中仅限 stdout)。
默认值:在 Python 配置中为
1,在隔离配置中为0。
-
int dev_mode¶
如果为非零值,则启用 Python 开发模式。
通过
-X dev选项和PYTHONDEVMODE环境变量设置为1。默认值:在 Python 模式中为
-1,在隔离模式中为0。
-
int dump_refs¶
转储 Python 引用?
如果为非零值,则转储所有在退出时仍存活的对象。
由
PYTHONDUMPREFS环境变量设置为1。需要定义了
Py_TRACE_REFS宏的特殊 Python 编译版:参见configure --with-trace-refs 选项。默认值:
0。
-
wchar_t *dump_refs_file¶
转储 Python 引用的目标文件名。
由
PYTHONDUMPREFSFILE环境变量设置。默认值:
NULL。Added in version 3.11.
-
wchar_t *exec_prefix¶
安装依赖于平台的 Python 文件的站点专属目录前缀:
sys.exec_prefix。默认值:
NULL。Python 路径配置 的一部分。
-
wchar_t *executable¶
Python 解释器可执行二进制文件的绝对路径:
sys.executable。默认值:
NULL。Python 路径配置 的一部分。
另请参阅
PyConfig.base_executable。
-
int faulthandler¶
启用 faulthandler?
如果为非零值,则在启动时调用
faulthandler.enable()。通过
-X faulthandler和PYTHONFAULTHANDLER环境变量设为1。默认值:在 Python 模式中为
-1,在隔离模式中为0。
-
wchar_t *filesystem_encoding¶
文件系统编码格式: 可通过
sys.getfilesystemencoding()获取。在 macOS, Android 和 VxWorks 上:默认使用
"utf-8"。在 Windows 上:默认使用
"utf-8",或者如果PyPreConfig的legacy_windows_fs_encoding为非零值则使用"mbcs"。在其他平台上的默认编码格式:
如果
PyPreConfig.utf8_mode为非零值则使用"utf-8"。如果 Python 检测到
nl_langinfo(CODESET)声明为 ASCII 编码格式,而mbstowcs()是从其他的编码格式解码(通常为 Latin1)则使用"ascii"。如果
nl_langinfo(CODESET)返回空字符串则使用"utf-8"。在其他情况下,使用 locale encoding:
nl_langinfo(CODESET)的结果。
在 Python 启动时,编码格式名称会规范化为 Python 编解码器名称。例如,
"ANSI_X3.4-1968"将被替换为"ascii"。参见
filesystem_errors成员。
-
wchar_t *filesystem_errors¶
文件系统错误处理器: 可通过
sys.getfilesystemencodeerrors()获取。在 Windows 上:默认使用
"surrogatepass",或者如果PyPreConfig的legacy_windows_fs_encoding为非零值则使用"replace"。在其他平台上:默认使用
"surrogateescape"。支持的错误处理器:
"strict""surrogateescape""surrogatepass"(仅支持 UTF-8 编码格式)
参见
filesystem_encoding成员。
-
int use_frozen_modules¶
如为非零值,则使用冻结模块。
由
PYTHON_FROZEN_MODULES环境变量设置。默认值:在发布构建版中为
1,而在 调试构建版 中为0。
-
unsigned long hash_seed¶
-
int use_hash_seed¶
随机化的哈希函数种子。
如果
use_hash_seed为零,则在 Python 启动时随机选择一个种子,并忽略hash_seed字段。由
PYTHONHASHSEED环境变量设置。默认的 use_hash_seed 值:在 Python 模式下为
-1,在隔离模式下为0。
-
wchar_t *home¶
设置默认的 Python "home" 目录,即标准 Python 库所在的位置 (参见
PYTHONHOME)。由
PYTHONHOME环境变量设置。默认值:
NULL。Python 路径配置 输入的一部分。
-
int import_time¶
如为
1,则会针对导入时间进行性能分析。如为2,则会包括提示当被导入模块已被加载的额外输出。通过
-X importtime选项和PYTHONPROFILEIMPORTTIME环境变量设置。默认值:
0。在 3.14 版本发生变更: 添加了对
import_time = 2的支持
-
int inspect¶
在执行脚本或命令之后进入交互模式。
如果大于
0,则启用检查:当脚本作为第一个参数传入或使用了 -c 选项时,在执行脚本或命令后进入交互模式,即使在sys.stdin看来并非一个终端时也是如此。通过
-i命令行选项执行递增。如果PYTHONINSPECT环境变量为非空值则设为1。默认值:
0。
-
int install_signal_handlers¶
安装 Python 信号处理器?
默认值:在 Python 模式下为
1,在隔离模式下为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环境变量配置。默认值:在 Python 模式下为
-1。在隔离模式下为 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,则启用隔离模式:将
safe_path设为1: 在 Python 启动时将不在sys.path前添加有潜在不安全性的路径,如当前目录、脚本所在目录或空字符串。将
use_environment设为0: 忽略PYTHON环境变量。将
user_site_directory设为0: 不要将用户级站点目录添加到sys.path列表。Python REPL 将不导入
readline也不在交互提示符中启用默认的 readline 配置。
通过
-I命令行选项设置为1。默认值:在 Python 模式中为
0,在隔离模式中为1。另请参阅 隔离配置 和
PyPreConfig.isolated。
-
int legacy_windows_stdio¶
如为非零值,则使用
io.FileIO代替io._WindowsConsoleIO作为sys.stdin、sys.stdout和sys.stderr。如果
PYTHONLEGACYWINDOWSSTDIO环境变量被设为非空字符串则设为1。仅在 Windows 上可用。
#ifdef MS_WINDOWS宏可被用于 Windows 专属的代码。默认值:
0。另请参阅 PEP 528 (将 Windows 控制台编码格式更改为 UTF-8)。
-
int malloc_stats¶
如为非零值,则在退出时转储 Python pymalloc 内存分配器 的统计数据。
由
PYTHONMALLOCSTATS环境变量设置为1。如果 Python 是
使用 --without-pymalloc 选项进行配置则该选项将被忽略。默认值:
0。
-
wchar_t *platlibdir¶
平台库目录名称:
sys.platlibdir。由
PYTHONPLATLIBDIR环境变量设置。默认值:由
configure --with-platlibdir 选项设置的PLATLIBDIR宏的值 (默认值:"lib",在 Windows 上则为"DLLs")。Python 路径配置 输入的一部分。
Added in version 3.9.
在 3.11 版本发生变更: 目前在 Windows 系统中该宏被用于定位标准库扩展模块,通常位于
DLLs下。不过,出于兼容性考虑,请注意在任何非标准布局包括树内构建和虚拟环境中,该值都将被忽略。
-
wchar_t *pythonpath_env¶
模块搜索路径 (
sys.path) 为一个用DELIM(os.pathsep) 分隔的字符串。由
PYTHONPATH环境变量设置。默认值:
NULL。Python 路径配置 输入的一部分。
-
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 路径配置 的一部分。
-
int optimization_level¶
编译优化级别:
0: Peephole 优化器,将__debug__设为True。1: 0 级,移除断言,将__debug__设为False。2: 1 级,去除文档字符串。
通过
-O命令行选项递增。设置为PYTHONOPTIMIZE环境变量值。默认值:
0。
-
PyWideStringList orig_argv¶
传给 Python 可执行程序的原始命令行参数列表:
sys.orig_argv。如果
orig_argv列表为空并且argv不是一个只包含空字符串的列表,PyConfig_Read()将在修改argv之前把argv拷贝至orig_argv(如果parse_argv为非零值)。另请参阅
argv成员和Py_GetArgcArgv()函数。默认值:空列表。
Added in version 3.10.
-
int parse_argv¶
解析命令行参数?
如果等于
1,则以与常规 Python 解析 命令行参数 相同的方式解析argv,并从argv中剥离 Python 参数。PyConfig_Read()函数对PyConfig.argv参数只会解析一次:在参数解析完成后PyConfig.parse_argv将被设为2。由于 Python 参数是从PyConfig.argv提取的,因此解析参数两次会将应用程序选项解析为 Python 选项。默认值:在 Python 模式下为
1,在隔离模式下为0。在 3.10 版本发生变更: 现在只有当
PyConfig.parse_argv等于1时才会解析PyConfig.argv参数。
-
int parser_debug¶
解析器调试模式。如果大于
0,则打开解析器调试输出(仅针对专家,取决于编译选项)。通过
-d命令行选项递增。设置为PYTHONDEBUG环境变量值。需要 Python 调试编译版 (必须已定义
Py_DEBUG宏)。默认值:
0。
-
int pathconfig_warnings¶
如为非零值,则允许计算路径配置以将警告记录到
stderr中。如果等于0,则抑制这些警告。默认值:在 Python 模式下为
1,在隔离模式下为0。Python 路径配置 输入的一部分。
在 3.11 版本发生变更: 现在也适用于 Windows。
-
wchar_t *prefix¶
安装不依赖于平台的 Python 文件的站点专属目录前缀:
sys.prefix。默认值:
NULL。Python 路径配置 的一部分。
另请参阅
PyConfig.base_prefix。
-
wchar_t *program_name¶
用于初始化
executable和在 Python 初始化期间早期错误消息中使用的程序名称。在 macOS 上,如果设置了
PYTHONEXECUTABLE环境变量则会使用它。如果定义了
WITH_NEXT_FRAMEWORK宏,当设置了__PYVENV_LAUNCHER__环境变量时将会使用它。如果
argv的argv[0]可用并且不为空值则会使用它。否则,在 Windows 上将使用
L"python",在其他平台上将使用L"python3"。
默认值:
NULL。Python 路径配置 输入的一部分。
-
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¶
package.module模块路径,它应当在运行site.py之前被导入。通过
-X presite=package.module命令行选项和PYTHON_PRESITE环境变量设置。命令行选项优先级更高。需要 Python 调试编译版 (必须已定义
Py_DEBUG宏)。默认值:
NULL。
-
int show_ref_count¶
是否要在退出时显示总引用计数 (不包括 immortal 对象)?
通过
-X showrefcount命令行选项设置为1。需要 Python 调试编译版 (必须已定义
Py_REF_DEBUG宏)。默认值:
0。
-
int site_import¶
在启动时导入
site模块?如果等于零,则禁用模块站点的导入以及由此产生的与站点相关的
sys.path操作。如果以后显式地导入
site模块也要禁用这些操作(如果你希望触发这些操作,请调用site.main()函数)。通过
-S命令行选项设置为0。sys.flags.no_site会被设为site_import取反后的值。默认值:
1。
-
int skip_source_first_line¶
如为非零值,则跳过
PyConfig.run_filename源的第一行。它将允许使用非 Unix 形式的
#!cmd。这是一个针对 DOS 专属的技巧。通过
-x命令行选项设置为1。默认值:
0。
-
wchar_t *stdio_encoding¶
-
wchar_t *stdio_errors¶
sys.stdin、sys.stdout和sys.stderr的编码格式和编码格式错误(但sys.stderr将始终使用"backslashreplace"错误处理器)。如果
PYTHONIOENCODING环境变量非空则会使用它。默认编码格式:
如果
PyPreConfig.utf8_mode为非零值则使用"UTF-8"。在其他情况下,使用 locale encoding。
默认错误处理器:
在 Windows 上:使用
"surrogateescape"。如果
PyPreConfig.utf8_mode为非零值,或者如果 LC_CTYPE 语言区域为 "C" 或 "POSIX" 则使用"surrogateescape"。在其他情况下则使用
"strict"。
-
int tracemalloc¶
启用 tracemalloc?
如果为非零值,则在启动时调用
tracemalloc.start()。通过
-X tracemalloc=N命令行选项和PYTHONTRACEMALLOC环境变量设置。默认值:在 Python 模式中为
-1,在隔离模式中为0。
-
int perf_profiling¶
是否启用 Linux
perf性能分析器支持?如果等于
1,则启用对 Linuxperf性能分析器的支持。如果等于
2,则启用对带有 DWARF JIT 支持的 Linuxperf性能分析器的支持。通过
-X perf命令行选项和PYTHONPERFSUPPORT环境变量设置为1。通过
-X perf_jit命令行选项和PYTHON_PERF_JIT_SUPPORT环境变量设置为2。默认值:
-1。参见
请参阅 Python 对 Linux perf 性能分析器的支持 了解详情。
Added in version 3.12.
-
wchar_t *stdlib_dir¶
Python 标准库的目录。
默认值:
NULL。Added in version 3.11.
-
int use_system_logger¶
如为非零值,则
stdout和stderr将被重定向到系统日志。仅在 macOS 10.12 和更新版本,以及 iOS 上可用。
默认值:在 macOS 上为
0(不使用系统日志); 在 iOS 上为1(使用系统日志)。Added in version 3.14.
-
int user_site_directory¶
如果为非零值,则将用户站点目录添加到
sys.path。由
PYTHONNOUSERSITE环境变量设置为0。默认值:在 Python 模式下为
1,在隔离模式下为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,Python 将不会尝试在导入源模块时写入.pyc文件。通过
-B命令行选项和PYTHONDONTWRITEBYTECODE环境变量设置为0。sys.dont_write_bytecode会被初始化为write_bytecode取反后的值。默认值:
1。
-
PyWideStringList xoptions¶
-X命令行选项的值:sys._xoptions。默认值:空列表。
-
int _pystats¶
如为非零值,则在 Python 退出时写入性能统计数据。
需要带有
Py_STATS宏的特殊构建版:参见--enable-pystats。默认值:
0。
-
PyStatus PyConfig_SetString(PyConfig *config, wchar_t *const *config_str, const wchar_t *str)¶
如果 parse_argv 为非零值,则 argv 参数将以与常规 Python 解析 命令行参数 相同的方式被解析,并从 argv 中剥离 Python 参数。
xoptions 选项将会被解析以设置其他选项:参见 -X 命令行选项。
在 3.9 版本发生变更: show_alloc_count 字段已被移除。
使用 PyConfig 初始化¶
基于一个已填充内容的配置结构体初始化解释器是通过调用 Py_InitializeFromConfig() 来处理的。
调用方要负责使用 PyStatus_Exception() 和 Py_ExitStatusException() 来处理异常(错误或退出)。
如果使用了 PyImport_FrozenModules()、PyImport_AppendInittab() 或 PyImport_ExtendInittab(),则必须在 Python 预初始化之后、Python 初始化之前设置或调用它们。如果 Python 被多次初始化,则必须在每次初始化 Python 之前调用 PyImport_AppendInittab() 或 PyImport_ExtendInittab() 函数。
当前的配置 (PyConfig 类型) 保存在 PyInterpreterState.config 中。
设置程序名称的示例:
void init_python(void)
{
PyStatus status;
PyConfig config;
PyConfig_InitPythonConfig(&config);
/* 设置程序名称。隐式地预初始化 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);
}
更完整的示例会修改默认配置,读取配置,然后覆盖某些参数。请注意自 3.11 版开始,许多参数在初始化之前不会被计算,因此无法从配置结构体中读取值。在调用初始化之前设置的任何值都将不会被初始化操作改变:
PyStatus init_python(const char *program_name)
{
PyStatus status;
PyConfig config;
PyConfig_InitPythonConfig(&config);
/* 在读取配置之前设置程序名称
(基于语言区域的编码格式来解码字节串)。
隐式地预初始化 Python。*/
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_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;
}
/* 覆盖由 PyConfig_Read() 计算出的 executable */
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() 函数会创建一个配置来将 Python 与系统隔离开来。例如,将 Python 嵌入到某个应用程序。
该配置将忽略全局配置变量、环境变量、命令行参数 (PyConfig.argv 将不会被解析) 和用户站点目录。C 标准流 (例如 stdout) 和 LC_CTYPE 语言区域将保持不变。信号处理器将不会被安装。
该配置仍然会使用配置文件来确定未被指明的路径。请确保指定了 PyConfig.home 以避免计算默认的路径配置。
Python 配置¶
PyPreConfig_InitPythonConfig() 和 PyConfig_InitPythonConfig() 函数会创建一个配置来构建一个行为与常规 Python 相同的自定义 Python。
环境变量和命令行参数将被用于配置 Python,而全局配置变量将被忽略。
此函数将根据 LC_CTYPE 语言区域、PYTHONUTF8 和 PYTHONCOERCECLOCALE 环境变量启用 C 语言区域强制转换 (PEP 538) 和 Python UTF-8 模式 (PEP 540) 功能。
Python 路径配置¶
PyConfig 包含多个用于路径配置的字段:
路径配置输入:
当前工作目录:用于获取绝对路径
PATH环境变量用于获取程序的完整路径 (来自PyConfig.program_name)__PYVENV_LAUNCHER__环境变量(仅限 Windows)注册表 HKEY_CURRENT_USER 和 HKEY_LOCAL_MACHINE 的 "SoftwarePythonPythonCoreX.YPythonPath" 项下的应用程序目录(其中 X.Y 为 Python 版本)。
路径配置输出字段:
如果至少有一个“输出字段”未被设置,Python 就会计算路径配置来填充未设置的字段。如果 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 以便在计算路径配置时抑制警告(仅限 Unix,Windows 不会记录任何警告)。
如果 base_prefix 或 base_exec_prefix 字段未设置,它们将分别从 prefix 和 exec_prefix 继承其值。
Py_RunMain() 和 Py_Main() 将修改 sys.path:
如果
run_filename已设置并且是一个包含__main__.py脚本的目录,则会将run_filename添加到sys.path的开头。如果
isolated为零:如果设置了
run_module,则将当前目录添加到sys.path的开头。如果无法读取当前目录则不执行任何操作。如果设置了
run_filename,则将文件名的目录添加到sys.path的开头。在其他情况下,则将一个空字符串添加到
sys.path的开头。
如果 site_import 为非零值,则 sys.path 可通过 site 模块修改。如果 user_site_directory 为非零值且用户的 site-package 目录存在,则 site 模块会将用户的 site-package 目录附加到 sys.path。
路径配置会使用以下配置文件:
pyvenv.cfg._pth文件 (例如:python._pth)pybuilddir.txt(仅 Unix)
如果存在 ._pth 文件:
将
isolated设为1。将
use_environment设为0。将
site_import设为0。将
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 影响。
Py_GetArgcArgv()¶
-
void Py_GetArgcArgv(int *argc, wchar_t ***argv)¶
在 Python 修改原始命令行参数之前,获取这些参数。
另请参阅
PyConfig.orig_argv成员。
延迟主模块的执行¶
在某些嵌入式用例中,可能会需要将解释器初始化和主模块的执行分隔开来。
这种分隔可通过在初始化期间将 PyConfig.run_command 设为空字符串来达成(以避免解释器进入交互提示符),然后再使用 __main__.__dict__ 作为全局命名空间来执行所需的主模块代码。