3.8 版新增。
可以初始化 Python 采用
Py_InitializeFromConfig()
和
PyConfig
结构。可以预初始化它采用
Py_PreInitialize()
和
PyPreConfig
结构。
有 2 种配置:
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.
隔离配置 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.
Py_RunMain()
函数可以用于编写定制 Python 程序。
另请参阅 初始化、定稿和线程 .
另请参阅
PEP 587 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); }
List of
wchar_t*
strings.
若
length
非 0,
项
must be non-
NULL
and all strings must be non-
NULL
.
Methods:
追加 item to list .
Python must be preinitialized to call this function.
插入 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:
List length.
List items.
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:
Exit code. Argument passed to
exit()
.
Error message.
Name of the function which created an error, can be
NULL
.
Functions to create a status:
Initialization error with a message.
err_msg
不得为
NULL
.
Exit Python with the specified exit code.
Functions to handle a status:
Is the status an error or an exit? If true, the exception must be handled; by calling
Py_ExitStatusException()
例如。
调用
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; }
Structure used to preinitialize Python.
Function to initialize a preconfiguration:
Initialize the preconfiguration with Python 配置 .
Initialize the preconfiguration with 隔离配置 .
Structure fields:
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_PYMALLOC
and
PYMEM_ALLOCATOR_PYMALLOC_DEBUG
are not supported if Python is
configured using --without-pymalloc
.
见 内存管理 .
默认:
PYMEM_ALLOCATOR_NOT_SET
.
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.
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.
If non-zero, emit a warning if the C locale is coerced.
默认:
-1
in Python config,
0
in isolated config.
Python 开发模式
: see
PyConfig.dev_mode
.
默认:
-1
按 Python 模式,
0
按隔离模式。
Isolated mode: see
PyConfig.isolated
.
默认:
0
按 Python 模式,
1
按隔离模式。
If non-zero:
Set
PyPreConfig.utf8_mode
to
0
,
Set
PyConfig.filesystem_encoding
to
"mbcs"
,
Set
PyConfig.filesystem_errors
to
"replace"
.
Initialized the from
PYTHONLEGACYWINDOWSFSENCODING
environment variable value.
只可用于 Windows。
#ifdef MS_WINDOWS
macro can be used for Windows specific code.
默认:
0
.
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.
使用
环境变量
? See
PyConfig.use_environment
.
默认:
1
in Python config and
0
in isolated config.
若非 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.
Python 的预初始化:
Set the Python memory allocators (
PyPreConfig.allocator
)
Configure the LC_CTYPE locale ( 区域设置编码 )
The current preconfiguration (
PyPreConfig
type) is stored in
_PyRuntime.preconfig
.
Functions to preinitialize Python:
Preinitialize Python from preconfig preconfiguration.
preconfig
不得为
NULL
.
Preinitialize Python from preconfig preconfiguration.
剖析
argv
command line arguments (bytes strings) if
parse_argv
of
preconfig
is non-zero.
preconfig
不得为
NULL
.
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();
Structure containing most parameters to configure Python.
When done, the
PyConfig_Clear()
function must be used to release the configuration memory.
Structure 方法:
Initialize configuration with the Python 配置 .
Copy the wide character string
str
into
*config_str
.
预初始化 Python 若需要。
解码
str
使用
Py_DecodeLocale()
and set the result into
*config_str
.
预初始化 Python 若需要。
设置命令行自变量 (
argv
member of
config
) from the
argv
list of wide character strings.
预初始化 Python 若需要。
设置命令行自变量 (
argv
member of
config
) from the
argv
list of bytes strings. Decode bytes using
Py_DecodeLocale()
.
预初始化 Python 若需要。
设置宽字符串列表 list to length and 项 .
预初始化 Python 若需要。
读取所有 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.
PyConfig_Read()
function only parses
PyConfig.argv
arguments once:
PyConfig.parse_argv
被设为
2
after arguments are parsed. Since Python arguments are strippped from
PyConfig.argv
, parsing arguments twice would parse the application options as Python options.
预初始化 Python 若需要。
3.10 版改变:
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()
被调用。
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:
Command line arguments:
sys.argv
.
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
成员。
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.
3.11 版新增。
默认:
NULL
.
属于 Python 路径配置 输出。
Python base executable:
sys._base_executable
.
设置通过
__PYVENV_LAUNCHER__
环境变量。
Set from
PyConfig.executable
if
NULL
.
默认:
NULL
.
属于 Python 路径配置 输出。
默认:
NULL
.
属于 Python 路径配置 输出。
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
.
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
.
If non-zero, emit a
EncodingWarning
warning when
io.TextIOWrapper
uses its default encoding. See
选择加入 EncodingWarning
了解细节。
默认:
0
.
3.10 版新增。
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
.
3.11 版新增。
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”.
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.
若非 0,启用 Python 开发模式 .
设为
1
通过
-X dev
选项和
PYTHONDEVMODE
环境变量。
默认:
-1
按 Python 模式,
0
按隔离模式。
转储 Python 引用?
If non-zero, dump all objects which are still alive at exit.
设为
1
通过
PYTHONDUMPREFS
环境变量。
Need a special build of Python with the
Py_TRACE_REFS
macro defined: see the
configure --with-trace-refs option
.
默认:
0
.
The site-specific directory prefix where the platform-dependent Python files are installed:
sys.exec_prefix
.
默认:
NULL
.
属于 Python 路径配置 输出。
The absolute path of the executable binary for the Python interpreter:
sys.executable
.
默认:
NULL
.
属于 Python 路径配置 输出。
Enable faulthandler?
If non-zero, call
faulthandler.enable()
at startup.
设为
1
by
-X faulthandler
和
PYTHONFAULTHANDLER
环境变量。
默认:
-1
按 Python 模式,
0
按隔离模式。
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
成员。
Filesystem error handler
:
sys.getfilesystemencodeerrors()
.
在 Windows:使用
"surrogatepass"
by default, or
"replace"
if
legacy_windows_fs_encoding
of
PyPreConfig
is non-zero.
在其它平台:使用
"surrogateescape"
在默认情况下。
支持的错误处理程序:
"strict"
"surrogateescape"
"surrogatepass"
(only supported with the UTF-8 encoding)
另请参阅
filesystem_encoding
成员。
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
按隔离模式。
Python home directory.
若
Py_SetPythonHome()
has been called, use its argument if it is not
NULL
.
设置通过
PYTHONHOME
环境变量。
默认:
NULL
.
属于 Python 路径配置 输入。
If non-zero, profile import time.
设置
1
通过
-X importtime
选项和
PYTHONPROFILEIMPORTTIME
环境变量。
默认:
0
.
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
.
安装 Python 信号处理程序?
默认:
1
按 Python 模式,
0
按隔离模式。
若大于
0
, enable isolated mode:
Set
safe_path
to
1
: don’t prepend a potentially unsafe path to
sys.path
在 Python 启动时。
Set
use_environment
to
0
.
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
按隔离模式。
另请参阅
PyPreConfig.isolated
.
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).
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
.
平台库目录名:
sys.platlibdir
.
设置通过
PYTHONPLATLIBDIR
环境变量。
Default: value of the
PLATLIBDIR
macro which is set by the
configure --with-platlibdir option
(default:
"lib"
,或
"DLLs"
在 Windows)。
属于 Python 路径配置 输入。
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.
模块搜索路径 (
sys.path
) as a string separated by
DELIM
(
os.path.pathsep
).
设置通过
PYTHONPATH
环境变量。
默认:
NULL
.
属于 Python 路径配置 输入。
模块搜索路径:
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 路径配置 输出。
编译优化级别:
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
.
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 版新增。
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
.
PyConfig_Read()
function only parses
PyConfig.argv
arguments once:
PyConfig.parse_argv
被设为
2
after arguments are parsed. Since Python arguments are strippped from
PyConfig.argv
, parsing arguments twice would parse the application options as Python options.
默认:
1
按 Python 模式,
0
按隔离模式。
3.10 版改变:
PyConfig.argv
arguments are now only parsed if
PyConfig.parse_argv
equals to
1
.
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.
默认:
0
.
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.
The site-specific directory prefix where the platform independent Python files are installed:
sys.prefix
.
默认:
NULL
.
属于 Python 路径配置 输出。
Program name used to initialize
executable
and in early error messages during Python initialization.
若
Py_SetProgramName()
has been called, use its argument.
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 路径配置 输入。
Directory where cached
.pyc
files are written:
sys.pycache_prefix
.
设置通过
-X pycache_prefix=PATH
命令行选项和
PYTHONPYCACHEPREFIX
环境变量。
若
NULL
,
sys.pycache_prefix
被设为
None
.
默认:
NULL
.
Quiet mode. If greater than
0
, don’t display the copyright and version at Python startup in interactive mode.
Incremented by the
-q
命令行选项。
默认:
0
.
Value of the
-c
命令行选项。
用于
Py_RunMain()
.
默认:
NULL
.
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
.
Value of the
-m
命令行选项。
用于
Py_RunMain()
.
默认:
NULL
.
Show total reference count at exit?
设为
1
by
-X showrefcount
命令行选项。
需要
debug build of Python
(
Py_REF_DEBUG
macro must be defined).
默认:
0
.
导入
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
.
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
.
Encoding and encoding errors of
sys.stdin
,
sys.stdout
and
sys.stderr
(但
sys.stderr
always uses
"backslashreplace"
error handler).
若
Py_SetStandardStreamEncoding()
has been called, use its
error
and
errors
arguments if they are not
NULL
.
使用
PYTHONIOENCODING
environment variable if it is non-empty.
Default encoding:
"UTF-8"
if
PyPreConfig.utf8_mode
is non-zero.
Otherwise, use the 区域设置编码 .
Default error handler:
在 Windows:使用
"surrogateescape"
.
"surrogateescape"
if
PyPreConfig.utf8_mode
is non-zero, or if the LC_CTYPE locale is “C” or “POSIX”.
"strict"
否则。
Enable tracemalloc?
If non-zero, call
tracemalloc.start()
at startup.
设置通过
-X tracemalloc=N
command line option and by the
PYTHONTRACEMALLOC
环境变量。
默认:
-1
按 Python 模式,
0
按隔离模式。
使用 环境变量 ?
If equals to zero, ignore the 环境变量 .
设为
0
通过
-E
环境变量。
默认:
1
in Python config and
0
in isolated config.
If non-zero, add the user site directory to
sys.path
.
设为
0
通过
-s
and
-I
command line options.
设为
0
通过
PYTHONNOUSERSITE
环境变量。
默认:
1
按 Python 模式,
0
按隔离模式。
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 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
命令行选项。
Set to the
PYTHONVERBOSE
environment variable value.
默认:
0
.
Options of the
warnings
module to build warnings filters, lowest to highest priority:
sys.warnoptions
.
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).
-W
command line options adds its value to
warnoptions
, it can be used multiple times.
PYTHONWARNINGS
environment variable can also be used to add warning options. Multiple options can be specified, separated by commas (
,
).
默认:空列表。
若等于
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
.
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
.
xoptions
options are parsed to set other options: see the
-X
命令行选项。
3.9 版改变:
show_alloc_count
字段被移除。
用于初始化 Python 的函数:
初始化 Python 从 config 配置。
调用者负责处理异常 (错误或退出) 使用
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.
PyPreConfig_InitPythonConfig()
and
PyConfig_InitPythonConfig()
functions create a configuration to build a customized Python which behaves as the regular Python.
Environments variables and command line arguments are used to configure Python, whereas global configuration variables are ignored.
此函数启用 C 区域设置强制 (
PEP 538
) 和
Python UTF-8 模式
(
PEP 540
) 从属 LC_CTYPE 区域设置,
PYTHONUTF8
and
PYTHONCOERCECLOCALE
环境变量。
PyConfig
包含路径配置的多个字段:
路径配置输入:
current working directory: to get absolute paths
PATH
environment variable to get the program full path (from
PyConfig.program_name
)
__PYVENV_LAUNCHER__
环境变量
(Windows only) Application paths in the registry under “SoftwarePythonPythonCoreX.YPythonPath” of HKEY_CURRENT_USER and HKEY_LOCAL_MACHINE (where X.Y is the Python version).
路径配置输出字段:
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
:
若
run_filename
is set and is a directory which contains a
__main__.py
script, prepend
run_filename
to
sys.path
.
若
isolated
为 0:
若
run_module
is set, prepend the current directory to
sys.path
. Do nothing if the current directory cannot be read.
若
run_filename
is set, prepend the directory of the filename to
sys.path
.
Otherwise, prepend an empty string to
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:
pyvenv.cfg
._pth
file (ex:
python._pth
)
pybuilddir.txt
(仅 Unix)
若
._pth
文件存在:
Set
isolated
to
1
.
Set
use_environment
to
0
.
Set
site_import
to
0
.
Set
safe_path
to
1
.
__PYVENV_LAUNCHER__
环境变量用于设置
PyConfig.base_executable
执行命令 (
PyConfig.run_command
),脚本 (
PyConfig.run_filename
) 或模块 (
PyConfig.run_module
) specified on the command line or in the configuration.
By default and when if
-i
option is used, run the REPL.
Finally, finalizes Python and returns an exit status that can be passed to the
exit()
函数。
见
Python 配置
for an example of customized Python always running in isolated mode using
Py_RunMain()
.
Get the original command line arguments, before Python modified them.
另请参阅
PyConfig.orig_argv
成员。
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:
Install and configure
importlib
;
Apply the 路径配置 ;
Install signal handlers;
Finish
sys
module initialization (ex: create
sys.stdout
and
sys.path
);
Enable optional features like
faulthandler
and
tracemalloc
;
导入
site
模块;
etc.
Private provisional API:
PyConfig._init_main
: if set to
0
,
Py_InitializeFromConfig()
stops at the “Core” initialization phase.
PyConfig._isolated_interpreter
: if non-zero, disallow threads, subprocesses and fork.
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 calculatin 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); } }