Python 初始化配置
¶
Added in version 3.8.
可以初始化 Python 采用
Py_InitializeFromConfig()
和
PyConfig
结构。可以预初始化它采用
Py_PreInitialize()
和
PyPreConfig
结构。
有 2 种配置:
-
The
Python 配置
can be used to build a customized Python which behaves as the regular Python. For example, environment variables and command line arguments are used to configure Python.
-
The
隔离配置
can be used to embed Python into an application. It isolates Python from the system. For example, environment variables are ignored, the LC_CTYPE locale is left unchanged and no signal handler is registered.
The
Py_RunMain()
函数可以用于编写定制 Python 程序。
另请参阅
初始化、定稿和线程
.
范例
¶
Example of customized Python always running in isolated mode:
int main(int argc, char **argv)
{
PyStatus status;
PyConfig config;
PyConfig_InitPythonConfig(&config);
config.isolated = 1;
/* Decode command line arguments.
Implicitly preinitialize Python (in isolated mode). */
status = PyConfig_SetBytesArgv(&config, argc, argv);
if (PyStatus_Exception(status)) {
goto exception;
}
status = Py_InitializeFromConfig(&config);
if (PyStatus_Exception(status)) {
goto exception;
}
PyConfig_Clear(&config);
return Py_RunMain();
exception:
PyConfig_Clear(&config);
if (PyStatus_IsExit(status)) {
return status.exitcode;
}
/* Display the error message and exit the process with
non-zero exit code */
Py_ExitStatusException(status);
}
PyWideStringList
¶
-
type
PyWideStringList
¶
-
List of
wchar_t*
strings.
若
length
非 0,
项
must be non-
NULL
and all strings must be non-
NULL
.
Methods:
-
PyStatus
PyWideStringList_Append
(
PyWideStringList
*
list
,
const
wchar_t
*
item
)
¶
-
追加
item
to
list
.
Python must be preinitialized to call this function.
-
PyStatus
PyWideStringList_Insert
(
PyWideStringList
*
list
,
Py_ssize_t
index
,
const
wchar_t
*
item
)
¶
-
插入
item
into
list
at
index
.
若
index
>=
list
length, append
item
to
list
.
index
must be greater than or equal to
0
.
Python must be preinitialized to call this function.
Structure fields:
-
Py_ssize_t
length
¶
-
List length.
-
wchar_t
*
*
items
¶
-
List items.
PyStatus
¶
-
type
PyStatus
¶
-
Structure to store an initialization function status: success, error or exit.
For an error, it can store the C function name which created the error.
Structure fields:
-
int
exitcode
¶
-
Exit code. Argument passed to
exit()
.
-
const
char
*
err_msg
¶
-
Error message.
-
const
char
*
func
¶
-
Name of the function which created an error, can be
NULL
.
Functions to create a status:
-
PyStatus
PyStatus_Ok
(
void
)
¶
-
Success.
-
PyStatus
PyStatus_Error
(
const
char
*
err_msg
)
¶
-
Initialization error with a message.
err_msg
不得为
NULL
.
-
PyStatus
PyStatus_NoMemory
(
void
)
¶
-
Memory allocation failure (out of memory).
-
PyStatus
PyStatus_Exit
(
int
exitcode
)
¶
-
Exit Python with the specified exit code.
Functions to handle a status:
-
int
PyStatus_Exception
(
PyStatus
status
)
¶
-
Is the status an error or an exit? If true, the exception must be handled; by calling
Py_ExitStatusException()
例如。
-
int
PyStatus_IsError
(
PyStatus
status
)
¶
-
Is the result an error?
-
int
PyStatus_IsExit
(
PyStatus
status
)
¶
-
Is the result an exit?
-
void
Py_ExitStatusException
(
PyStatus
status
)
¶
-
调用
exit(exitcode)
if
status
is an exit. Print the error message and exit with a non-zero exit code if
status
is an error. Must only be called if
PyStatus_Exception(status)
is non-zero.
注意
Internally, Python uses macros which set
PyStatus.func
, whereas functions to create a status set
func
to
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
¶
-
Structure used to preinitialize Python.
Function to initialize a preconfiguration:
-
void
PyPreConfig_InitPythonConfig
(
PyPreConfig
*
preconfig
)
¶
-
Initialize the preconfiguration with
Python 配置
.
-
void
PyPreConfig_InitIsolatedConfig
(
PyPreConfig
*
preconfig
)
¶
-
Initialize the preconfiguration with
隔离配置
.
Structure fields:
-
int
allocator
¶
-
Name of the Python memory allocators:
-
PYMEM_ALLOCATOR_NOT_SET
(
0
): don’t change memory allocators (use defaults).
-
PYMEM_ALLOCATOR_DEFAULT
(
1
):
默认内存分配器
.
-
PYMEM_ALLOCATOR_DEBUG
(
2
):
默认内存分配器
with
debug hooks
.
-
PYMEM_ALLOCATOR_MALLOC
(
3
): use
malloc()
of the C library.
-
PYMEM_ALLOCATOR_MALLOC_DEBUG
(
4
): force usage of
malloc()
with
debug hooks
.
-
PYMEM_ALLOCATOR_PYMALLOC
(
5
):
Python pymalloc memory allocator
.
-
PYMEM_ALLOCATOR_PYMALLOC_DEBUG
(
6
):
Python pymalloc memory allocator
with
debug hooks
.
-
PYMEM_ALLOCATOR_MIMALLOC
(
6
): use
mimalloc
, a fast malloc replacement.
-
PYMEM_ALLOCATOR_MIMALLOC_DEBUG
(
7
): use
mimalloc
, a fast malloc replacement with
debug hooks
.
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
¶
-
Set the LC_CTYPE locale to the user preferred locale.
If equals to
0
, set
coerce_c_locale
and
coerce_c_locale_warn
members to
0
.
见
区域设置编码
.
默认:
1
in Python config,
0
in isolated config.
-
int
coerce_c_locale
¶
-
If equals to
2
, coerce the C locale.
If equals to
1
, read the LC_CTYPE locale to decide if it should be coerced.
见
区域设置编码
.
默认:
-1
in Python config,
0
in isolated config.
-
int
coerce_c_locale_warn
¶
-
If non-zero, emit a warning if the C locale is coerced.
默认:
-1
in Python config,
0
in isolated config.
-
int
dev_mode
¶
-
Python 开发模式
: see
PyConfig.dev_mode
.
默认:
-1
按 Python 模式,
0
按隔离模式。
-
int
isolated
¶
-
Isolated mode: see
PyConfig.isolated
.
默认:
0
按 Python 模式,
1
按隔离模式。
-
int
legacy_windows_fs_encoding
¶
-
If non-zero:
Initialized from the
PYTHONLEGACYWINDOWSFSENCODING
environment variable value.
只可用于 Windows。
#ifdef MS_WINDOWS
macro can be used for Windows specific code.
默认:
0
.
-
int
parse_argv
¶
-
If non-zero,
Py_PreInitializeFromArgs()
and
Py_PreInitializeFromBytesArgs()
parse their
argv
argument the same way the regular Python parses command line arguments: see
命令行自变量
.
默认:
1
in Python config,
0
in isolated config.
-
int
use_environment
¶
-
使用
环境变量
? See
PyConfig.use_environment
.
默认:
1
in Python config and
0
in isolated config.
-
int
utf8_mode
¶
-
若非 0,启用
Python UTF-8 模式
.
设为
0
or
1
通过
-X utf8
命令行选项和
PYTHONUTF8
环境变量。
Also set to
1
若
LC_CTYPE
区域设置是
C
or
POSIX
.
默认:
-1
in Python config and
0
in isolated config.
采用 PyPreConfig 预初始化 Python
¶
Python 的预初始化:
The current preconfiguration (
PyPreConfig
type) is stored in
_PyRuntime.preconfig
.
Functions to preinitialize Python:
-
PyStatus
Py_PreInitialize
(
const
PyPreConfig
*
preconfig
)
¶
-
Preinitialize Python from
preconfig
preconfiguration.
preconfig
不得为
NULL
.
-
PyStatus
Py_PreInitializeFromBytesArgs
(
const
PyPreConfig
*
preconfig
,
int
argc
,
char
*
const
*
argv
)
¶
-
Preinitialize Python from
preconfig
preconfiguration.
剖析
argv
command line arguments (bytes strings) if
parse_argv
of
preconfig
is non-zero.
preconfig
不得为
NULL
.
-
PyStatus
Py_PreInitializeFromArgs
(
const
PyPreConfig
*
preconfig
,
int
argc
,
wchar_t
*
const
*
argv
)
¶
-
Preinitialize Python from
preconfig
preconfiguration.
剖析
argv
command line arguments (wide strings) if
parse_argv
of
preconfig
is non-zero.
preconfig
不得为
NULL
.
调用者负责处理异常 (错误或退出) 使用
PyStatus_Exception()
and
Py_ExitStatusException()
.
For
Python 配置
(
PyPreConfig_InitPythonConfig()
), if Python is initialized with command line arguments, the command line arguments must also be passed to preinitialize Python, since they have an effect on the pre-configuration like encodings. For example, the
-X utf8
command line option enables the
Python UTF-8 模式
.
PyMem_SetAllocator()
can be called after
Py_PreInitialize()
and before
Py_InitializeFromConfig()
to install a custom memory allocator. It can be called before
Py_PreInitialize()
if
PyPreConfig.allocator
被设为
PYMEM_ALLOCATOR_NOT_SET
.
Python memory allocation functions like
PyMem_RawMalloc()
must not be used before the Python preinitialization, whereas calling directly
malloc()
and
free()
is always safe.
Py_DecodeLocale()
must not be called before the Python preinitialization.
Example using the preinitialization to enable the
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);
}
/* at this point, Python speaks UTF-8 */
Py_Initialize();
/* ... use Python API here ... */
Py_Finalize();
PyConfig
¶
-
type
PyConfig
¶
-
Structure containing most parameters to configure Python.
When done, the
PyConfig_Clear()
function must be used to release the configuration memory.
Structure 方法:
-
void
PyConfig_InitPythonConfig
(
PyConfig
*
config
)
¶
-
Initialize configuration with the
Python 配置
.
-
void
PyConfig_InitIsolatedConfig
(
PyConfig
*
config
)
¶
-
Initialize configuration with the
隔离配置
.
-
PyStatus
PyConfig_SetString
(
PyConfig
*
config
,
wchar_t
*
const
*
config_str
,
const
wchar_t
*
str
)
¶
-
Copy the wide character string
str
into
*config_str
.
预初始化 Python
若需要。
-
PyStatus
PyConfig_SetBytesString
(
PyConfig
*
config
,
wchar_t
*
const
*
config_str
,
const
char
*
str
)
¶
-
解码
str
使用
Py_DecodeLocale()
and set the result into
*config_str
.
预初始化 Python
若需要。
-
PyStatus
PyConfig_SetArgv
(
PyConfig
*
config
,
int
argc
,
wchar_t
*
const
*
argv
)
¶
-
设置命令行自变量 (
argv
member of
config
) from the
argv
list of wide character strings.
预初始化 Python
若需要。
-
PyStatus
PyConfig_SetBytesArgv
(
PyConfig
*
config
,
int
argc
,
char
*
const
*
argv
)
¶
-
设置命令行自变量 (
argv
member of
config
) from the
argv
list of bytes strings. Decode bytes using
Py_DecodeLocale()
.
预初始化 Python
若需要。
-
PyStatus
PyConfig_SetWideStringList
(
PyConfig
*
config
,
PyWideStringList
*
list
,
Py_ssize_t
length
,
wchar_t
*
*
items
)
¶
-
设置宽字符串列表
list
to
length
and
项
.
预初始化 Python
若需要。
-
PyStatus
PyConfig_Read
(
PyConfig
*
config
)
¶
-
读取所有 Python 配置。
Fields which are already initialized are left unchanged.
Fields for
路径配置
are no longer calculated or modified when calling this function, as of Python 3.11.
The
PyConfig_Read()
function only parses
PyConfig.argv
arguments once:
PyConfig.parse_argv
被设为
2
after arguments are parsed. Since Python arguments are stripped from
PyConfig.argv
, parsing arguments twice would parse the application options as Python options.
预初始化 Python
若需要。
3.10 版改变:
The
PyConfig.argv
arguments are now only parsed once,
PyConfig.parse_argv
被设为
2
after arguments are parsed, and arguments are only parsed if
PyConfig.parse_argv
等于
1
.
3.11 版改变:
PyConfig_Read()
no longer calculates all paths, and so fields listed under
Python 路径配置
may no longer be updated until
Py_InitializeFromConfig()
被调用。
-
void
PyConfig_Clear
(
PyConfig
*
config
)
¶
-
Release configuration memory.
Most
PyConfig
方法
preinitialize Python
if needed. In that case, the Python preinitialization configuration (
PyPreConfig
) in based on the
PyConfig
. If configuration fields which are in common with
PyPreConfig
are tuned, they must be set before calling a
PyConfig
方法:
Moreover, if
PyConfig_SetArgv()
or
PyConfig_SetBytesArgv()
is used, this method must be called before other methods, since the preinitialization configuration depends on command line arguments (if
parse_argv
is non-zero).
The caller of these methods is responsible to handle exceptions (error or exit) using
PyStatus_Exception()
and
Py_ExitStatusException()
.
Structure fields:
-
PyWideStringList
argv
¶
-
Set
sys.argv
command line arguments based on
argv
. These parameters are similar to those passed to the program’s
main()
function with the difference that the first entry should refer to the script file to be executed rather than the executable hosting the Python interpreter. If there isn’t a script that will be run, the first entry in
argv
can be an empty string.
Set
parse_argv
to
1
to parse
argv
the same way the regular Python parses Python command line arguments and then to strip Python arguments from
argv
.
若
argv
is empty, an empty string is added to ensure that
sys.argv
always exists and is never empty.
默认:
NULL
.
另请参阅
orig_argv
成员。
-
int
safe_path
¶
-
If equals to zero,
Py_RunMain()
prepends a potentially unsafe path to
sys.path
at startup:
-
若
argv[0]
等于
L"-m"
(
python -m module
), prepend the current working directory.
-
If running a script (
python script.py
), prepend the script’s directory. If it’s a symbolic link, resolve symbolic links.
-
Otherwise (
python -c code
and
python
), prepend an empty string, which means the current working directory.
设为
1
通过
-P
命令行选项和
PYTHONSAFEPATH
环境变量。
默认:
0
in Python config,
1
in isolated config.
Added in version 3.11.
-
wchar_t
*
base_exec_prefix
¶
-
sys.base_exec_prefix
.
默认:
NULL
.
属于
Python 路径配置
输出。
另请参阅
PyConfig.exec_prefix
.
-
wchar_t
*
base_executable
¶
-
Python base executable:
sys._base_executable
.
设置通过
__PYVENV_LAUNCHER__
环境变量。
Set from
PyConfig.executable
if
NULL
.
默认:
NULL
.
属于
Python 路径配置
输出。
另请参阅
PyConfig.executable
.
-
wchar_t
*
base_prefix
¶
-
sys.base_prefix
.
默认:
NULL
.
属于
Python 路径配置
输出。
另请参阅
PyConfig.prefix
.
-
int
buffered_stdio
¶
-
If equals to
0
and
configure_c_stdio
is non-zero, disable buffering on the C streams stdout and stderr.
设为
0
通过
-u
命令行选项和
PYTHONUNBUFFERED
环境变量。
stdin is always opened in buffered mode.
默认:
1
.
-
int
bytes_warning
¶
-
If equals to
1
, issue a warning when comparing
bytes
or
bytearray
with
str
, or comparing
bytes
with
int
.
If equal or greater to
2
,引发
BytesWarning
exception in these cases.
Incremented by the
-b
命令行选项。
默认:
0
.
-
int
warn_default_encoding
¶
-
If non-zero, emit a
EncodingWarning
warning when
io.TextIOWrapper
uses its default encoding. See
选择加入 EncodingWarning
了解细节。
默认:
0
.
3.10 版添加。
-
int
code_debug_ranges
¶
-
If equals to
0
, disables the inclusion of the end line and column mappings in code objects. Also disables traceback printing carets to specific error locations.
设为
0
通过
PYTHONNODEBUGRANGES
environment variable and by the
-X no_debug_ranges
命令行选项。
默认:
1
.
Added in version 3.11.
-
wchar_t
*
check_hash_pycs_mode
¶
-
Control the validation behavior of hash-based
.pyc
files: value of the
--check-hash-based-pycs
命令行选项。
Valid values:
-
L"always"
: Hash the source file for invalidation regardless of value of the ‘check_source’ flag.
-
L"never"
: Assume that hash-based pycs always are valid.
-
L"default"
: The ‘check_source’ flag in hash-based pycs determines invalidation.
默认:
L"default"
.
另请参阅
PEP 552
“Deterministic pycs”.
-
int
configure_c_stdio
¶
-
If non-zero, configure C standard streams:
-
On Windows, set the binary mode (
O_BINARY
) on stdin, stdout and stderr.
-
若
buffered_stdio
equals zero, disable buffering of stdin, stdout and stderr streams.
-
若
interactive
is non-zero, enable stream buffering on stdin and stdout (only stdout on Windows).
默认:
1
in Python config,
0
in isolated config.
-
int
dev_mode
¶
-
若非 0,启用
Python 开发模式
.
设为
1
通过
-X dev
选项和
PYTHONDEVMODE
环境变量。
默认:
-1
按 Python 模式,
0
按隔离模式。
-
int
dump_refs
¶
-
转储 Python 引用?
If non-zero, dump all objects which are still alive at exit.
设为
1
通过
PYTHONDUMPREFS
环境变量。
Needs a special build of Python with the
Py_TRACE_REFS
macro defined: see the
configure --with-trace-refs option
.
默认:
0
.
-
wchar_t
*
exec_prefix
¶
-
The site-specific directory prefix where the platform-dependent Python files are installed:
sys.exec_prefix
.
默认:
NULL
.
属于
Python 路径配置
输出。
另请参阅
PyConfig.base_exec_prefix
.
-
wchar_t
*
executable
¶
-
The absolute path of the executable binary for the Python interpreter:
sys.executable
.
默认:
NULL
.
属于
Python 路径配置
输出。
另请参阅
PyConfig.base_executable
.
-
int
faulthandler
¶
-
Enable faulthandler?
If non-zero, call
faulthandler.enable()
at startup.
设为
1
by
-X faulthandler
和
PYTHONFAULTHANDLER
环境变量。
默认:
-1
按 Python 模式,
0
按隔离模式。
-
wchar_t
*
filesystem_encoding
¶
-
Filesystem encoding
:
sys.getfilesystemencoding()
.
On macOS, Android and VxWorks: use
"utf-8"
在默认情况下。
在 Windows:使用
"utf-8"
by default, or
"mbcs"
if
legacy_windows_fs_encoding
of
PyPreConfig
is non-zero.
Default encoding on other platforms:
-
"utf-8"
if
PyPreConfig.utf8_mode
is non-zero.
-
"ascii"
if Python detects that
nl_langinfo(CODESET)
announces the ASCII encoding, whereas the
mbstowcs()
function decodes from a different encoding (usually Latin1).
-
"utf-8"
if
nl_langinfo(CODESET)
returns an empty string.
-
Otherwise, use the
区域设置编码
:
nl_langinfo(CODESET)
结果。
At Python startup, the encoding name is normalized to the Python codec name. For example,
"ANSI_X3.4-1968"
被替换采用
"ascii"
.
另请参阅
filesystem_errors
成员。
-
wchar_t
*
filesystem_errors
¶
-
Filesystem error handler
:
sys.getfilesystemencodeerrors()
.
在 Windows:使用
"surrogatepass"
by default, or
"replace"
if
legacy_windows_fs_encoding
of
PyPreConfig
is non-zero.
在其它平台:使用
"surrogateescape"
在默认情况下。
支持的错误处理程序:
另请参阅
filesystem_encoding
成员。
-
unsigned
long
hash_seed
¶
-
int
use_hash_seed
¶
-
Randomized hash function seed.
若
use_hash_seed
is zero, a seed is chosen randomly at Python startup, and
hash_seed
被忽略。
设置通过
PYTHONHASHSEED
环境变量。
默认
use_hash_seed
值:
-1
按 Python 模式,
0
按隔离模式。
-
wchar_t
*
home
¶
-
Set the default Python “home” directory, that is, the location of the standard Python libraries (see
PYTHONHOME
).
设置通过
PYTHONHOME
环境变量。
默认:
NULL
.
属于
Python 路径配置
输入。
-
int
import_time
¶
-
If non-zero, profile import time.
设置
1
通过
-X importtime
选项和
PYTHONPROFILEIMPORTTIME
环境变量。
默认:
0
.
-
int
inspect
¶
-
Enter interactive mode after executing a script or a command.
若大于
0
, enable inspect: when a script is passed as first argument or the -c option is used, enter interactive mode after executing the script or the command, even when
sys.stdin
does not appear to be a terminal.
Incremented by the
-i
command line option. Set to
1
若
PYTHONINSPECT
environment variable is non-empty.
默认:
0
.
-
int
install_signal_handlers
¶
-
安装 Python 信号处理程序?
默认:
1
按 Python 模式,
0
按隔离模式。
-
int
interactive
¶
-
若大于
0
, enable the interactive mode (REPL).
Incremented by the
-i
命令行选项。
默认:
0
.
-
int
int_max_str_digits
¶
-
Configures the
整数字符串转换长度局限性
. An initial value of
-1
means the value will be taken from the command line or environment or otherwise default to 4300 (
sys.int_info.default_max_str_digits
). A value of
0
disables the limitation. Values greater than zero but less than 640 (
sys.int_info.str_digits_check_threshold
) are unsupported and will produce an error.
Configured by the
-X int_max_str_digits
command line flag or the
PYTHONINTMAXSTRDIGITS
环境变量。
默认:
-1
in Python mode. 4300 (
sys.int_info.default_max_str_digits
) in isolated mode.
3.12 版添加。
-
int
cpu_count
¶
-
若值
cpu_count
不是
-1
then it will override the return values of
os.cpu_count()
,
os.process_cpu_count()
,和
multiprocessing.cpu_count()
.
Configured by the
-X cpu_count=n|default
command line flag or the
PYTHON_CPU_COUNT
环境变量。
默认:
-1
.
3.13 版添加。
-
int
isolated
¶
-
若大于
0
, enable isolated mode:
-
Set
safe_path
to
1
: don’t prepend a potentially unsafe path to
sys.path
at Python startup, such as the current directory, the script’s directory or an empty string.
-
Set
use_environment
to
0
: ignore
PYTHON
环境变量。
-
Set
user_site_directory
to
0
: don’t add the user site directory to
sys.path
.
-
Python REPL doesn’t import
readline
nor enable default readline configuration on interactive prompts.
设为
1
通过
-I
命令行选项。
默认:
0
按 Python 模式,
1
按隔离模式。
另请参阅
隔离配置
and
PyPreConfig.isolated
.
-
int
legacy_windows_stdio
¶
-
If non-zero, use
io.FileIO
而不是
io._WindowsConsoleIO
for
sys.stdin
,
sys.stdout
and
sys.stderr
.
设为
1
若
PYTHONLEGACYWINDOWSSTDIO
环境变量被设为非空字符串。
只可用于 Windows。
#ifdef MS_WINDOWS
macro can be used for Windows specific code.
默认:
0
.
另请参阅
PEP 528
(Change Windows console encoding to UTF-8).
-
int
malloc_stats
¶
-
If non-zero, dump statistics on
Python pymalloc memory allocator
at exit.
设为
1
通过
PYTHONMALLOCSTATS
环境变量。
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"
,或
"DLLs"
在 Windows)。
属于
Python 路径配置
输入。
Added in version 3.9.
3.11 版改变:
This macro is now used on Windows to locate the standard library extension modules, typically under
DLLs
. However, for compatibility, note that this value is ignored for any non-standard layouts, including in-tree builds and virtual environments.
-
wchar_t
*
pythonpath_env
¶
-
模块搜索路径 (
sys.path
) as a string separated by
DELIM
(
os.pathsep
).
设置通过
PYTHONPATH
环境变量。
默认:
NULL
.
属于
Python 路径配置
输入。
-
PyWideStringList
module_search_paths
¶
-
int
module_search_paths_set
¶
-
模块搜索路径:
sys.path
.
若
module_search_paths_set
等于
0
,
Py_InitializeFromConfig()
will replace
module_search_paths
并设置
module_search_paths_set
to
1
.
Default: empty list (
module_search_paths
) 和
0
(
module_search_paths_set
).
属于
Python 路径配置
输出。
-
int
optimization_level
¶
-
编译优化级别:
-
0
: Peephole optimizer, set
__debug__
to
True
.
-
1
: Level 0, remove assertions, set
__debug__
to
False
.
-
2
: Level 1, strip docstrings.
Incremented by the
-O
command line option. Set to the
PYTHONOPTIMIZE
environment variable value.
默认:
0
.
-
PyWideStringList
orig_argv
¶
-
The list of the original command line arguments passed to the Python executable:
sys.orig_argv
.
若
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
(若
parse_argv
is non-zero).
另请参阅
argv
member and the
Py_GetArgcArgv()
函数。
默认:空列表。
3.10 版添加。
-
int
parse_argv
¶
-
Parse command line arguments?
If equals to
1
, parse
argv
the same way the regular Python parses
command line arguments
, and strip Python arguments from
argv
.
The
PyConfig_Read()
function only parses
PyConfig.argv
arguments once:
PyConfig.parse_argv
被设为
2
after arguments are parsed. Since Python arguments are stripped from
PyConfig.argv
, parsing arguments twice would parse the application options as Python options.
默认:
1
按 Python 模式,
0
按隔离模式。
3.10 版改变:
The
PyConfig.argv
arguments are now only parsed if
PyConfig.parse_argv
equals to
1
.
-
int
parser_debug
¶
-
Parser debug mode. If greater than
0
, turn on parser debugging output (for expert only, depending on compilation options).
Incremented by the
-d
command line option. Set to the
PYTHONDEBUG
environment variable value.
Needs a
debug build of Python
(
Py_DEBUG
macro must be defined).
默认:
0
.
-
int
pathconfig_warnings
¶
-
If non-zero, calculation of path configuration is allowed to log warnings into
stderr
. If equals to
0
, suppress these warnings.
默认:
1
按 Python 模式,
0
按隔离模式。
属于
Python 路径配置
输入。
3.11 版改变:
Now also applies on Windows.
-
wchar_t
*
prefix
¶
-
The site-specific directory prefix where the platform independent Python files are installed:
sys.prefix
.
默认:
NULL
.
属于
Python 路径配置
输出。
另请参阅
PyConfig.base_prefix
.
-
wchar_t
*
program_name
¶
-
Program name used to initialize
executable
and in early error messages during Python initialization.
-
On macOS, use
PYTHONEXECUTABLE
environment variable if set.
-
若
WITH_NEXT_FRAMEWORK
macro is defined, use
__PYVENV_LAUNCHER__
environment variable if set.
-
使用
argv[0]
of
argv
if available and non-empty.
-
Otherwise, use
L"python"
on Windows, or
L"python3"
在其它平台。
默认:
NULL
.
属于
Python 路径配置
输入。
-
wchar_t
*
pycache_prefix
¶
-
Directory where cached
.pyc
files are written:
sys.pycache_prefix
.
设置通过
-X pycache_prefix=PATH
命令行选项和
PYTHONPYCACHEPREFIX
environment variable. The command-line option takes precedence.
若
NULL
,
sys.pycache_prefix
被设为
None
.
默认:
NULL
.
-
int
quiet
¶
-
Quiet mode. If greater than
0
, don’t display the copyright and version at Python startup in interactive mode.
Incremented by the
-q
命令行选项。
默认:
0
.
-
wchar_t
*
run_command
¶
-
Value of the
-c
命令行选项。
用于
Py_RunMain()
.
默认:
NULL
.
-
wchar_t
*
run_filename
¶
-
Filename passed on the command line: trailing command line argument without
-c
or
-m
. It is used by the
Py_RunMain()
函数。
For example, it is set to
script.py
通过
python3 script.py arg
命令行。
另请参阅
PyConfig.skip_source_first_line
选项。
默认:
NULL
.
-
wchar_t
*
run_module
¶
-
Value of the
-m
命令行选项。
用于
Py_RunMain()
.
默认:
NULL
.
-
wchar_t
*
run_presite
¶
-
package.module
path to module that should be imported before
site.py
is run.
设置通过
-X presite=package.module
command-line option and the
PYTHON_PRESITE
environment variable. The command-line option takes precedence.
Needs a
debug build of Python
(
Py_DEBUG
macro must be defined).
默认:
NULL
.
-
int
show_ref_count
¶
-
Show total reference count at exit (excluding
immortal
objects)?
设为
1
by
-X showrefcount
命令行选项。
Needs a
debug build of Python
(
Py_REF_DEBUG
macro must be defined).
默认:
0
.
-
int
site_import
¶
-
导入
site
module at startup?
If equal to zero, disable the import of the module site and the site-dependent manipulations of
sys.path
that it entails.
Also disable these manipulations if the
site
module is explicitly imported later (call
site.main()
若想要触发它们)。
设为
0
通过
-S
命令行选项。
sys.flags.no_site
is set to the inverted value of
site_import
.
默认:
1
.
-
int
skip_source_first_line
¶
-
If non-zero, skip the first line of the
PyConfig.run_filename
源。
It allows the usage of non-Unix forms of
#!cmd
. This is intended for a DOS specific hack only.
设为
1
通过
-x
命令行选项。
默认:
0
.
-
wchar_t
*
stdio_encoding
¶
-
wchar_t
*
stdio_errors
¶
-
Encoding and encoding errors of
sys.stdin
,
sys.stdout
and
sys.stderr
(但
sys.stderr
always uses
"backslashreplace"
error handler).
使用
PYTHONIOENCODING
environment variable if it is non-empty.
Default encoding:
Default error handler:
-
在 Windows:使用
"surrogateescape"
.
-
"surrogateescape"
if
PyPreConfig.utf8_mode
is non-zero, or if the LC_CTYPE locale is “C” or “POSIX”.
-
"strict"
否则。
另请参阅
PyConfig.legacy_windows_stdio
.
-
int
tracemalloc
¶
-
Enable tracemalloc?
If non-zero, call
tracemalloc.start()
at startup.
设置通过
-X tracemalloc=N
command line option and by the
PYTHONTRACEMALLOC
环境变量。
默认:
-1
按 Python 模式,
0
按隔离模式。
-
int
perf_profiling
¶
-
Enable compatibility mode with the perf profiler?
If non-zero, initialize the perf trampoline. See
Python support for the Linux perf profiler
了解更多信息。
设置通过
-X perf
command-line option and by the
PYTHON_PERF_JIT_SUPPORT
environment variable for perf support with stack pointers and
-X perf_jit
command-line option and by the
PYTHON_PERF_JIT_SUPPORT
environment variable for perf support with DWARF JIT information.
默认:
-1
.
3.12 版添加。
-
int
use_environment
¶
-
使用
环境变量
?
If equals to zero, ignore the
环境变量
.
设为
0
通过
-E
环境变量。
默认:
1
in Python config and
0
in isolated config.
-
int
user_site_directory
¶
-
If non-zero, add the user site directory to
sys.path
.
设为
0
通过
-s
and
-I
command line options.
设为
0
通过
PYTHONNOUSERSITE
环境变量。
默认:
1
按 Python 模式,
0
按隔离模式。
-
int
verbose
¶
-
Verbose mode. If greater than
0
, print a message each time a module is imported, showing the place (filename or built-in module) from which it is loaded.
If greater than or equal to
2
, print a message for each file that is checked for when searching for a module. Also provides information on module cleanup at exit.
Incremented by the
-v
命令行选项。
设置通过
PYTHONVERBOSE
environment variable value.
默认:
0
.
-
PyWideStringList
warnoptions
¶
-
Options of the
warnings
module to build warnings filters, lowest to highest priority:
sys.warnoptions
.
The
warnings
module adds
sys.warnoptions
in the reverse order: the last
PyConfig.warnoptions
item becomes the first item of
warnings.filters
which is checked first (highest priority).
The
-W
command line options adds its value to
warnoptions
, it can be used multiple times.
The
PYTHONWARNINGS
environment variable can also be used to add warning options. Multiple options can be specified, separated by commas (
,
).
默认:空列表。
-
int
write_bytecode
¶
-
若等于
0
,Python 不会试着写入
.pyc
files on the import of source modules.
设为
0
通过
-B
命令行选项和
PYTHONDONTWRITEBYTECODE
环境变量。
sys.dont_write_bytecode
is initialized to the inverted value of
write_bytecode
.
默认:
1
.
-
PyWideStringList
xoptions
¶
-
Values of the
-X
命令行选项:
sys._xoptions
.
默认:空列表。
若
parse_argv
非 0,
argv
arguments are parsed the same way the regular Python parses
command line arguments
, and Python arguments are stripped from
argv
.
The
xoptions
options are parsed to set other options: see the
-X
命令行选项。
3.9 版改变:
The
show_alloc_count
字段被移除。
采用 PyConfig 初始化
¶
Initializing the interpreter from a populated configuration struct is handled by calling
Py_InitializeFromConfig()
.
调用者负责处理异常 (错误或退出) 使用
PyStatus_Exception()
and
Py_ExitStatusException()
.
若
PyImport_FrozenModules()
,
PyImport_AppendInittab()
or
PyImport_ExtendInittab()
are used, they must be set or called after Python preinitialization and before the Python initialization. If Python is initialized multiple times,
PyImport_AppendInittab()
or
PyImport_ExtendInittab()
must be called before each Python initialization.
当前配置 (
PyConfig
type) is stored in
PyInterpreterState.config
.
范例设置程序名称:
void init_python(void)
{
PyStatus status;
PyConfig config;
PyConfig_InitPythonConfig(&config);
/* Set the program name. Implicitly preinitialize Python. */
status = PyConfig_SetString(&config, &config.program_name,
L"/path/to/my_program");
if (PyStatus_Exception(status)) {
goto exception;
}
status = Py_InitializeFromConfig(&config);
if (PyStatus_Exception(status)) {
goto exception;
}
PyConfig_Clear(&config);
return;
exception:
PyConfig_Clear(&config);
Py_ExitStatusException(status);
}
More complete example modifying the default configuration, read the configuration, and then override some parameters. Note that since 3.11, many parameters are not calculated until initialization, and so values cannot be read from the configuration structure. Any values set before initialize is called will be left unchanged by initialization:
PyStatus init_python(const char *program_name)
{
PyStatus status;
PyConfig config;
PyConfig_InitPythonConfig(&config);
/* Set the program name before reading the configuration
(decode byte string from the locale encoding).
Implicitly preinitialize Python. */
status = PyConfig_SetBytesString(&config, &config.program_name,
program_name);
if (PyStatus_Exception(status)) {
goto done;
}
/* Read all configuration at once */
status = PyConfig_Read(&config);
if (PyStatus_Exception(status)) {
goto done;
}
/* Specify sys.path explicitly */
/* If you want to modify the default set of paths, finish
initialization first and then use PySys_GetObject("path") */
config.module_search_paths_set = 1;
status = PyWideStringList_Append(&config.module_search_paths,
L"/path/to/stdlib");
if (PyStatus_Exception(status)) {
goto done;
}
status = PyWideStringList_Append(&config.module_search_paths,
L"/path/to/more/modules");
if (PyStatus_Exception(status)) {
goto done;
}
/* Override executable computed by PyConfig_Read() */
status = PyConfig_SetString(&config, &config.executable,
L"/path/to/my_executable");
if (PyStatus_Exception(status)) {
goto done;
}
status = Py_InitializeFromConfig(&config);
done:
PyConfig_Clear(&config);
return status;
}
隔离配置
¶
PyPreConfig_InitIsolatedConfig()
and
PyConfig_InitIsolatedConfig()
functions create a configuration to isolate Python from the system. For example, to embed Python into an application.
This configuration ignores global configuration variables, environment variables, command line arguments (
PyConfig.argv
is not parsed) and user site directory. The C standard streams (ex:
stdout
) and the LC_CTYPE locale are left unchanged. Signal handlers are not installed.
Configuration files are still used with this configuration to determine paths that are unspecified. Ensure
PyConfig.home
is specified to avoid computing the default path configuration.
Python 路径配置
¶
PyConfig
包含路径配置的多个字段:
If at least one “output field” is not set, Python calculates the path configuration to fill unset fields. If
module_search_paths_set
等于
0
,
module_search_paths
is overridden and
module_search_paths_set
被设为
1
.
It is possible to completely ignore the function calculating the default path configuration by setting explicitly all path configuration output fields listed above. A string is considered as set even if it is non-empty.
module_search_paths
is considered as set if
module_search_paths_set
被设为
1
。在此情况下,
module_search_paths
will be used without modification.
Set
pathconfig_warnings
to
0
to suppress warnings when calculating the path configuration (Unix only, Windows does not log any warning).
若
base_prefix
or
base_exec_prefix
fields are not set, they inherit their value from
prefix
and
exec_prefix
分别。
Py_RunMain()
and
Py_Main()
修改
sys.path
:
若
site_import
非 0,
sys.path
can be modified by the
site
module. If
user_site_directory
is non-zero and the user’s site-package directory exists, the
site
module appends the user’s site-package directory to
sys.path
.
The following configuration files are used by the path configuration:
若
._pth
文件存在:
The
__PYVENV_LAUNCHER__
环境变量用于设置
PyConfig.base_executable
.
Py_GetArgcArgv()
¶
-
void
Py_GetArgcArgv
(
int
*
argc
,
wchar_t
*
*
*
argv
)
¶
-
Get the original command line arguments, before Python modified them.
另请参阅
PyConfig.orig_argv
成员。
多阶段初始化私有暂行 API
¶
This section is a private provisional API introducing multi-phase initialization, the core feature of
PEP 432
:
-
“Core” initialization phase, “bare minimum Python”:
-
“Main” initialization phase, Python is fully initialized:
Private provisional API:
-
PyStatus
_Py_InitializeMain
(
void
)
¶
-
Move to the “Main” initialization phase, finish the Python initialization.
No module is imported during the “Core” phase and the
importlib
module is not configured: the
路径配置
is only applied during the “Main” phase. It may allow to customize Python in Python to override or tune the
路径配置
, maybe install a custom
sys.meta_path
importer or an import hook, etc.
It may become possible to calculate the
路径配置
in Python, after the Core phase and before the Main phase, which is one of the
PEP 432
motivation.
The “Core” phase is not properly defined: what should be and what should not be available at this phase is not specified yet. The API is marked as private and provisional: the API can be modified or even be removed anytime until a proper public API is designed.
Example running Python code between “Core” and “Main” initialization phases:
void init_python(void)
{
PyStatus status;
PyConfig config;
PyConfig_InitPythonConfig(&config);
config._init_main = 0;
/* ... customize 'config' configuration ... */
status = Py_InitializeFromConfig(&config);
PyConfig_Clear(&config);
if (PyStatus_Exception(status)) {
Py_ExitStatusException(status);
}
/* Use sys.stderr because sys.stdout is only created
by _Py_InitializeMain() */
int res = PyRun_SimpleString(
"import sys; "
"print('Run Python code before _Py_InitializeMain', "
"file=sys.stderr)");
if (res < 0) {
exit(1);
}
/* ... put more configuration code here ... */
status = _Py_InitializeMain();
if (PyStatus_Exception(status)) {
Py_ExitStatusException(status);
}
}