1. 命令行与环境¶
为获取各种设置信息,CPython 解析器会扫描命令行与环境。
CPython 实现细节: 其他实现的命令行方案可能会有所不同。 详见 其他实现。
1.1. 命令行¶
调用 Python 时,可以指定下列任意选项:
python [-bBdEhiIOPqRsSuvVWx?] [-c command | -m module-name | script | - ] [args]
最常见的用例是启动时执行脚本:
python myscript.py
1.1.1. 接口选项¶
解释器接口类似于 UNIX shell,但提供了额外的调用方法:
当调用时附带连接到某个 tty 设备的标准输入时,它会提示输入命令并执行它们直至读到一个 EOF (文件结束字符,你可以在 UNIX 上按 Ctrl-D 或在 Windows 上按 Ctrl-Z, Enter 来产生此字符)。 有关交互模式的更多信息,请参阅 交互模式。
用文件名参数或以标准输入文件调用时,读取,并执行该脚本文件。
用目录名参数调用时,从该目录读取、执行适当名称的脚本。
用
-c command调用时,执行 command 表示的 Python 语句。command 可以包含用换行符分隔的多条语句。注意,前导空白字符在 Python 语句中非常重要!用
-m module-name调用时,在 Python 模块路径中查找指定的模块,并将其作为脚本执行。
非交互模式下,先解析全部输入,再执行。
接口选项会终结解释器读入的选项列表,所有后续参数都在 sys.argv 里 -- 注意,首个元素,即下标为零的元素(sys.argv[0])是表示程序来源的字符串。
- -c <command>¶
执行 command 中的 Python 代码。command 可以是一条语句,也可以是用换行符分隔的多条语句,其中,前导空白字符与普通模块代码中的作用一样。
使用此选项时,
sys.argv的首个元素为"-c",并会把当前目录加入至sys.path开头(让该目录中的模块作为顶层模块导入)。引发一个 审计事件
cpython.run_command并附带参数command。
- -m <module-name>¶
在
sys.path中搜索指定模块,并以__main__模块执行其内容。该参数是 模块名,请勿输入文件扩展名(
.py)。模块名应为有效的绝对 Python 模块名,但本实现对此不作强制要求(例如,允许使用含连字符-的名称)。包名称(包括命名空间包)也允许使用。使用包名称而不是普通模块名时,解释器把
<pkg>.__main__作为主模块执行。此行为特意被设计为与作为脚本参数传递给解释器的目录和 zip 文件的处理方式类似。备注
此选项不适用于内置模块和以 C 编写的扩展模块,因为它们并没有对应的 Python 模块文件。 但是它仍然适用于预编译的模块,即使没有可用的初始源文件。
如果给出此选项,
sys.argv的首个元素将为模块文件的完整路径 (在定位模块文件期间,首个元素将设为"-m")。 与-c选项一样,当前目录将被加入sys.path的开头。-I选项可用来在隔离模式下运行脚本,此模式中sys.path既不包含当前目录也不包含用户的 site-packages 目录。 所有PYTHON*环境变量也都会被忽略。许多标准库模块都包含在执行时,以脚本方式调用的代码。例如
timeit模块:python -m timeit -s "setup here" "benchmarked code here" python -m timeit -h # 获取详情
引发一个 审计事件
cpython.run_module并附带参数module-name。在 3.1 版本发生变更: 提供包名称来运行
__main__子模块。在 3.4 版本发生变更: 同样支持命名空间包
- -
从标准输入 (
sys.stdin) 读取命令。标准输入为终端时,使用-i。使用此选项时,
sys.argv的第一个元素是"-", 同时,把当前目录加入sys.path开头。引发一个不带参数的 审计事件
cpython.run_stdin。
- <script>
执行 script 中的 Python 代码,该参数应为(绝对或相对)文件系统路径,指向 Python 文件、包含
__main__.py文件的目录,或包含__main__.py文件的 zip 文件。给出此选项时,
sys.argv的第一个元素就是在命令行中指定的脚本名称。如果脚本名称直接指向 Python 文件,则把该文件所在目录加入
sys.path的开头,并且把该文件当作__main__模块来执行。如果脚本名称指向目录或 zip 文件,则把脚本名加入
sys.path的开头,并把该位置中的__main__.py文件当作__main__模块来执行。-I选项可用来在隔离模式下运行脚本,此模式中sys.path既不包含当前目录也不包含用户的 site-packages 目录。 所有PYTHON*环境变量也都会被忽略。引发一个 审计事件
cpython.run_file并附带参数filename。参见
runpy.run_path()Python 代码可以直接使用的等效功能
未给出接口选项时,使用 -i,sys.argv[0] 为空字符串 (""),并把当前目录加至 sys.path 的开头。 此外,如果系统支持,还能自动启用 tab 补全和历史编辑(参见 Readline 配置)。
参见
在 3.4 版本发生变更: 自动启用 tab 补全和历史编辑。
1.1.2. 通用选项¶
- --help-env¶
打印 Python 专属环境变量的简短描述然后退出。
Added in version 3.11.
- --help-all¶
打印完整使用信息然后退出。
Added in version 3.11.
1.1.3. 其他选项¶
- -b¶
在将
bytes或bytearray转换为str时未指定编码格式或在将bytes或bytearray与str或者在将bytes与int进行比较时将发出警告。 当选项被给出两次 (-bb) 时则会报错。
- -B¶
给出此选项时,Python 不在导入源模块时写入
.pyc文件。另请参阅PYTHONDONTWRITEBYTECODE。
- --check-hash-based-pycs default|always|never¶
控制基于哈希值的
.pyc文件的验证行为。 参见 已缓存字节码的失效。 当设为default时,已选定和未选定的基于哈希值的字节码缓存文件将根据其默认语义进行验证。 当设为always时,所有基于哈希值的.pyc文件,不论是已选定还是未选定的都将根据其对应的源文件进行验证。 当设为never时,基于哈希值的.pyc文件将不会根据其对应的源文件进行验证。基于时间戳的
.pyc文件的语义不会受此选项影响。
- -d¶
启用解析器调试输出(仅供专家查看)。 另请参见
PYTHONDEBUG环境变量。此选项需要 Python 的调试构建版,否则它将被忽略。
- -E¶
忽略所有
PYTHON*环境变量,例如可能已设置的PYTHONPATH和PYTHONHOME。
- -i¶
脚本是第一个参数,或使用
-c时,即便sys.stdin不是终端,执行脚本或命令后,也会进入交互模式。不读取PYTHONSTARTUP文件。本选项用于,脚本触发异常时,检查全局变量或堆栈回溯。 详见
PYTHONINSPECT。
- -I¶
以隔离模式运行 Python。 这还将应用
-E,-P和-s选项。在隔离模式下
sys.path既不包含脚本所在目录也不包含用户的 site-packages 目录。 所有PYTHON*环境变量也都会被忽略。 还可以施加更进一步的限制以防止用户注入恶意代码。Added in version 3.4.
- -O¶
移除 assert 语句以及任何以
__debug__的值作为条件的代码。 通过在.pyc扩展名之前添加.opt-1来扩充已编译文件 (bytecode) 的文件名 (参见 PEP 488)。 另请参阅PYTHONOPTIMIZE。在 3.5 版本发生变更: 依据 PEP 488 修改
.pyc文件名。
- -OO¶
在启用
-O的同时丢弃文档字符串。 通过在.pyc扩展名之前添加.opt-2来扩展已编译文件 (bytecode) 的文件名 (参见 PEP 488)。在 3.5 版本发生变更: 依据 PEP 488 修改
.pyc文件名。
- -P¶
不要将具有潜在不安全性的路径附加到
sys.path:python -m module命令行: 不要附加当前工作目录。python script.py命令行: 不要附加脚本所在目录。 如果是一个符号链接,则会解析符号链接。python -c code和python(REPL) 命令行: 不要附加空字符串,这表示当前工作目录。
另请参阅
PYTHONSAFEPATH环境变量,以及-E和-I(隔离) 选项。Added in version 3.11.
- -q¶
即使在交互模式下也不显示版权和版本信息。
Added in version 3.2.
- -R¶
开启哈希随机化。 此选项权
PYTHONHASHSEED环境变量设置为0时起作用,因为哈希随机化是默认启用的。在之前版本的 Python 中,此选项会启用哈希随机化,以将字符串和字节串对象的
__hash__()值用不可预测的随机值“加盐”。 虽然它们在单个 Python 进程内将保持恒定,但是在重复发起调用的 Python 进程间它们将是不可预测的。哈希随机化旨在针对由精心选择的输入引起的拒绝服务攻击提供防护,这种输入利用了构造 dict 在最坏情况下的性能即 O(n2) 复杂度。 请参阅 http://ocert.org/advisories/ocert-2011-003.html 了解详情。
PYTHONHASHSEED允许你为哈希种子密码设置一个固定值。Added in version 3.2.3.
在 3.7 版本发生变更: 此选项不会再被忽略。
- -s¶
不要将
用户 site-packages 目录添加到sys.path。另请参阅
PYTHONNOUSERSITE。参见
PEP 370 -- 分用户的 site-packages 目录
- -S¶
禁用
site的导入及其所附带的基于站点对sys.path的操作。 如果site会在稍后被显式地导入也会禁用这些操作 (如果你希望触发它们则应调用site.main())。
- -u¶
强制 stdout 和 stderr 流不使用缓冲。 此选项对 stdin 流无影响。
另请参阅
PYTHONUNBUFFERED。在 3.7 版本发生变更: stdout 和 stderr 流在文本层现在不使用缓冲。
- -v¶
每次在初始化模块时会打印一条信息,显示被加载的地方(文件名或内置模块名)。当给出两个v(
-vv)时,搜索模块时会为每个文件打印一条信息。退出时模块清理的信息也会给出来。在 3.10 版本发生变更: 由
site模块可以得到将要处理的站点路径和.pth文件。参阅
PYTHONVERBOSE。
- -W arg¶
警告信息的控制。Python 的警告机制默认将警告信息打印到
sys.stderr。最简单的设置是将某个特定操作无条件地应用于进程所发出所有警告 (即使是在默认情况下会忽略的那些警告):
-Wdefault # 每个调用位置警告一次 -Werror # 转换为异常 -Walways # 每次都警告 -Wall # 与 -Walways 相同 -Wmodule # 每个调用模块警告一次 -Wonce # 每个 Python 进程警告一次 -Wignore # 从不警告
action 名可以根据需要进行缩写,解释器将会解析为合适的名称。例如,
-Wi与-Wignore相同。完整的参数如下:
action:message:category:module:lineno
空字段匹配所有值;尾部的空字段可以省略。例如,
-W ignore::DeprecationWarning将忽略所有的 DeprecationWarning 警告。action 字段如上所述,但只适用于匹配其余字段的警告。
message 字段必须与整个警告信息相匹配;不区分大小写。
category 字段与警告类别相匹配(
DeprecationWarning等)。必须是个类名;检测消息的实际警告类别是否为指定类别的子类。module 字段匹配的是(完整限定)模块名称;这种匹配是大小写敏感的。
lineno 字段匹配行号,其中 0 匹配所有行号,相当于省略了行号。
可以给出多个
-W选项;当某条警告信息匹配上多个选项时,将执行最后一个匹配项的操作。非法-W选项将被忽略(不过,在触发第一条警告时,会打印出一条无效选项的警告信息)。警告信息还可以用
PYTHONWARNINGS环境变量来控制,也可以在 Python 程序中用warnings模块进行控制。例如,warnings.filterwarnings()函数可对警告信息使用正则表达式。
- -x¶
跳过源中第一行,以允许使用非 Unix 形式的
#!cmd。 这适用于 DOS 专属的破解操作。
- -X¶
保留用于各种具体实现专属的选项。 CPython 目前定义了下列可用的值:
-X faulthandler将启用faulthandler。 另请参阅PYTHONFAULTHANDLER。Added in version 3.3.
-X showrefcount可在程序结束时或在交互式解释器每条语句后,输出总的引用计数和使用的内存块数。这只适用于 调试版本。Added in version 3.4.
-X tracemalloc使用tracemalloc模块启动对 Python 内存分配的跟踪。 在默认情况下,只有最近的帧会保存在跟踪的回溯信息中。 使用-X tracemalloc=NFRAME来启动限定回溯 NFRAME 帧的跟踪。 请参阅tracemalloc.start()和PYTHONTRACEMALLOC了解详情。Added in version 3.4.
-X int_max_str_digits将配置 整数字符串转换长度限制。 另请参阅PYTHONINTMAXSTRDIGITS。Added in version 3.11.
-X importtime显示每次导入耗费的时间。 它会显示模块名称,累计时间(包括嵌套的导入)和自身时间(排除嵌套的导入)。 请注意它的输出在多线程应用程序中可能会出错。 典型用法如python3 -X importtime -c 'import asyncio'。 另请参阅PYTHONPROFILEIMPORTTIME。Added in version 3.7.
-X dev: 启用 Python 开发模式,引入在默认情况下启用会导致过大开销的运行时检查。 另请参阅PYTHONDEVMODE。Added in version 3.7.
-X utf8启用 Python UTF-8 模式。-X utf8=0将显式地禁用 Python UTF-8 模式 (即使在该模式应该会自动激活时也是如此)。 另请参阅PYTHONUTF8。Added in version 3.7.
-X pycache_prefix=PATH允许将.pyc文件写入以给定目录为根的并行树,而不是代码树。另见PYTHONPYCACHEPREFIX。Added in version 3.8.
-X warn_default_encodingissues aEncodingWarningwhen the locale-specific default encoding is used for opening files. See alsoPYTHONWARNDEFAULTENCODING.Added in version 3.10.
-X no_debug_ranges会禁用在代码对象中包括将额外位置信息(结束行、开始列偏移量和结束列偏移量)映射到每条指令的映射表。 这在需要较小的代码对象和 pyc 文件时很有用处并可在解释器显示回溯时屏蔽额外的视觉位置提示。 另请参阅PYTHONNODEBUGRANGES。Added in version 3.11.
-X frozen_modules确定已冻结模块是否要被导入机制所忽略。值为on表示它们将被导入而off表示它们将被忽略。 如果是安装版 Python(正常情况)则默认为on。 如果是在开发中(基于源代码树运行)则默认为off。 请注意importlib_bootstrap和importlib_bootstrap_external冻结模块总是会被使用,即使该旗标被设为off。 另请参阅PYTHON_FROZEN_MODULES。Added in version 3.11.
-X perf会启用对 Linuxperf性能分析器的支持。 当提供了此选项时,perf性能分析器将能够报告 Python 调用。 此选项仅在某些平台上可用而在当前系统不支持的情况下将不做任何事。 默认值为 "off"。 另请参阅PYTHONPERFSUPPORT和 Python 对 Linux perf 性能分析器的支持。Added in version 3.12.
-X perf_jit将启用对对 Linuxperf性能分析器的支持并附带 DWARF 支持。 当提供了此选项时,perf性能分析器将能够使用 DWARF 信息来报告 Python 调用。 此选项仅在某些平台上可用而在当前系统不支持的情况下将不做任何事。 默认值为 "off"。 另请参阅PYTHON_PERF_JIT_SUPPORT和 Python 对 Linux perf 性能分析器的支持。Added in version 3.13.
-X cpu_count=n将覆盖os.cpu_count(),os.process_cpu_count()和multiprocessing.cpu_count()。 n 必须大于等于 1。 此选项对于需要限制某个容器系统的 CPU 资源的用户来说会很有用处。 另请参阅PYTHON_CPU_COUNT。 如果 n 为default,则不会覆盖任何值。Added in version 3.13.
-X presite=package.module指明一个模块应当site模块执行之前以及__main__模块存在之前被导入。 因此,这个被导入的模块不是__main__。 此选项适用于要早在 Python 初始化期间就执行的代码。 Python 需要 以调试模式构建 此选项才能存在。 另请参阅PYTHON_PRESITE。Added in version 3.13.
-X gil=0,1强制分别禁用或启用 GIL。 设为0仅在配置了--disable-gil的构建版上可用。 另请参阅PYTHON_GIL和 自由线程的 CPython。Added in version 3.13.
它还允许传入任意值并通过
sys._xoptions字典来提取这些值。Added in version 3.2.
在 3.9 版本发生变更: 移除了
-X showalloccount选项。在 3.10 版本发生变更: 移除了
-X oldparser选项。
1.1.4. 控制颜色¶
Python 解释器默认被配置为在特定场景例如当显示回溯信息时使用颜色高亮输出。 此行为可通过设置不同的环境变量来控制。
将环境变量 TERM 设为 dumb 将禁用颜色。
如果设置了 FORCE_COLOR 环境变量,则无论 TERM 的值为何都将启用彩色。 这适用于不属于终端但仍然会显示 ANSI 转义序列的的 CI 系统。
如果设置了 NO_COLOR 环境变量,则 Python 将在输出中禁用所有彩色。 此变量的优先级高于 FORCE_COLOR。
所有这些环境变量也被其他工具用来控制颜色输出。 要仅在 Python 解释器中控制颜色输出,可以使用 PYTHON_COLORS 环境变量。 此变量的优先级高于 NO_COLOR,后者的优先级又高于 FORCE_COLOR。
1.1.5. 不应当使用的选项¶
1.2. 环境变量¶
这些环境变量会影响 Python 的行为,它们是在命令行开关之前被处理的,但 -E 或 -I 除外。 根据约定,当存在冲突时命令行开关会覆盖环境变量的设置。
- PYTHONHOME¶
更改标准 Python 库的位置。 默认情况下库是在
prefix/lib/pythonversion和exec_prefix/lib/pythonversion中搜索,其中prefix和exec_prefix是由安装位置确定的目录,默认都位于/usr/local。当
PYTHONHOME被设为单个目录时,它的值会同时替代prefix和exec_prefix。 要为两者指定不同的值,请将PYTHONHOME设为prefix:exec_prefix。
- PYTHONPATH¶
增加模块文件默认搜索路径。 所用格式与终端的
PATH相同:一个或多个由os.pathsep分隔的目录路径名称(例如 Unix 上用冒号而在 Windows 上用分号)。 默认忽略不存在的目录。除了普通目录之外,单个
PYTHONPATH条目可以引用包含纯Python模块的zip文件(源代码或编译形式)。无法从zip文件导入扩展模块。默认索引路径依赖于安装路径,但通常都是以
prefix/lib/pythonversion开始 (参见上文中的PYTHONHOME)。 它 总是 会被添加到PYTHONPATH。有一个附加目录将被插入到索引路径的
PYTHONPATH之前,正如上文中 接口选项 所描述的。 搜索路径可以在 Python 程序内作为变量sys.path来进行操作。
- PYTHONPLATLIBDIR¶
如果它被设为非空字符串,则会覆盖
sys.platlibdir值。Added in version 3.9.
- PYTHONSTARTUP¶
这如果是一个可读文件的名称,该文件中的 Python 命令会在交互模式的首个提示符显示之前被执行。 该文件会在与交互式命令执行所在的同一命名空间中被执行,因此其中所定义或导入的对象可以在交互式会话中无限制地使用。 你还可以在这个文件中修改提示符
sys.ps1和sys.ps2以及钩子sys.__interactivehook__。在启动时调用文件名作为参数会引发 审计事件
cpython.run_startup。
- PYTHONBREAKPOINT¶
此变量如果被设定,它会使用加点号的路径标记一个可调用对象。 包含该可调用对象的模块将被导入,随后该可调用对象将由
sys.breakpointhook()的默认实现来运行,后者自身将由内置的breakpoint()来调用。 如果未设定,或设定为空字符串,则它相当于值 "pdb.set_trace"。 将此变量设为字符串 "0" 会导致sys.breakpointhook()的默认实现不做任何事而直接返回。Added in version 3.7.
- PYTHONDEBUG¶
此变量如果被设为一个非空字符串,它就相当于指定
-d选项。 如果设为一个整数,则它就相当于多次指定-d。此环境变量需要 Python 的调试构建版,否则它将被忽略。
- PYTHONINSPECT¶
此变量如果被设为一个非空字符串,它就相当于指定
-i选项。此变量也可由 Python 代码使用
os.environ来修改以在程序终结时强制检查模式。引发一个不带参数的 审计事件
cpython.run_stdin。在 3.12.5 版本发生变更: (还有 3.11.10, 3.10.15, 3.9.20 和 3.8.20) 发出审计事件。
在 3.13 版本发生变更: 如果无法做到则使用 PyREPL,在此情况下
PYTHONSTARTUP也会被执行。 将发出审计事件。
- PYTHONPYCACHEPREFIX¶
如果设置了此选项,Python将在镜像目录树中的此路径中写入
.pyc文件,而不是源树中的__pycache__目录中。这相当于指定-Xpycache_prefix=PATH选项。Added in version 3.8.
- PYTHONHASHSEED¶
如果此变量未设置或设为
random,将使用一个随机值作为 str 和 bytes 对象哈希运算的种子。如果
PYTHONHASHSEED被设为一个整数值,它将被作为固定的种子数用来生成哈希随机化所涵盖的类型的 hash() 结果。它的目的是允许可复现的哈希运算,例如用于解释器本身的自我检测,或允许一组 python 进程共享哈希值。
该整数必须为一个 [0,4294967295] 范围内的十进制数。 指定数值 0 将禁用哈希随机化。
Added in version 3.2.3.
- PYTHONINTMAXSTRDIGITS¶
如果将此变量设为一个整数,它会被用来配置解释器的全局 整数字符串转换长度限制。
Added in version 3.11.
- PYTHONIOENCODING¶
如果此变量在运行解释器之前被设置,它会覆盖通过
encodingname:errorhandler语法设置的 stdin/stdout/stderr 所用编码。encodingname和:errorhandler部分都是可选项,与在str.encode()中的含义相同。对于 stderr,
:errorhandler部分会被忽略;处理程序将总是为'backslashreplace'。在 3.4 版本发生变更: “encodingname” 部分现在是可选的。
在 3.6 版本发生变更: 在 Windows 上,对于交互式控制台缓冲区会忽略此变量所指定的编码,除非还指定了
PYTHONLEGACYWINDOWSSTDIO。 通过标准流重定向的文件和管道则不受其影响。
- PYTHONNOUSERSITE¶
如果设置了此变量,Python 将不会把
用户 site-packages 目录添加到sys.path。参见
PEP 370 -- 分用户的 site-packages 目录
- PYTHONUSERBASE¶
定义
用户基准目录,它将被用来计算user site-packages 目录以及python -m pip install --user的 安装路径。参见
PEP 370 -- 分用户的 site-packages 目录
- PYTHONEXECUTABLE¶
如果设置了此环境变量,则
sys.argv[0]将被设为此变量的值而不是通过 C 运行时所获得的值。 这仅在 macOS 上起作用。
- PYTHONWARNINGS¶
此变量等价于
-W选项。 如果被设为一个以逗号分隔的字符串,它就相当于多次指定-W,列表中后出现的过滤器优先级会高于列表中先出现的。最简单的设置是将某个特定操作无条件地应用于进程所发出所有警告 (即使是在默认情况下会忽略的那些警告):
PYTHONWARNINGS=default # 每个调用位置警告一次 PYTHONWARNINGS=error # 转换为异常 PYTHONWARNINGS=always # 每次都警告 PYTHONWARNINGS=all # 与 PYTHONWARNINGS=always 相同 PYTHONWARNINGS=module # 每个调用模块警告一次 PYTHONWARNINGS=once # 每个 Python 进程警告一次 PYTHONWARNINGS=ignore # 从不警告
- PYTHONFAULTHANDLER¶
如果此环境变量被设为一个非空字符串,
faulthandler.enable()会在启动时被调用:为SIGSEGV,SIGFPE,SIGABRT,SIGBUS和SIGILL等信号安装一个处理器以转储 Python 回溯信息。 此环境变量等价于-Xfaulthandler选项。Added in version 3.3.
- PYTHONTRACEMALLOC¶
如果此环境变量被设为一个非空字符串,则会使用
tracemalloc模块启动对 Python 内存分配的跟踪。 该变量的值是保存在跟踪的回溯信息中的最大帧数。 例如,PYTHONTRACEMALLOC=1只保存最近的帧。 请参阅tracemalloc.start()函数了解更多信息。 这等价于设置-Xtracemalloc选项。Added in version 3.4.
- PYTHONPROFILEIMPORTTIME¶
如果此环境变量被设为一个非空字符串,Python 将会显示每次导入耗费了多长时间。 这等价于设置
-Ximporttime选项。Added in version 3.7.
- PYTHONMALLOC¶
设置 Python 内存分配器和/或安装调试钩子。
设置 Python 所使用的内存分配器族群:
default: 使用 默认内存分配器。malloc: 对所有域 (PYMEM_DOMAIN_RAW,PYMEM_DOMAIN_MEM,PYMEM_DOMAIN_OBJ) 使用 C 库的malloc()函数。pymalloc: 对PYMEM_DOMAIN_MEM和PYMEM_DOMAIN_OBJ域使用 pymalloc 分配器 而对PYMEM_DOMAIN_RAW域使用malloc()函数。mimalloc: 对PYMEM_DOMAIN_MEM和PYMEM_DOMAIN_OBJ域使用 mimalloc 分配器 而对PYMEM_DOMAIN_RAW域使用malloc()函数。
安装 调试钩子 :
debug: 在 默认内存分配器 之上安装调试钩子。malloc_debug: 与malloc相同但还会安装调试钩子。pymalloc_debug: 与pymalloc相同但还会安装调试钩子。mimalloc_debug: 与mimalloc相同但还会安装调试钩子。
Added in version 3.6.
在 3.7 版本发生变更: 增加了
"default"分配器。
- PYTHONMALLOCSTATS¶
如果设为一个非空字符串,Python 将在每次创建新的 pymalloc 对象区域以及在关闭时打印 pymalloc 内存分配器 的统计信息。
如果
PYTHONMALLOC环境变量被用来强制开启 C 库的malloc()分配器,或者如果 Python 的配置不支持pymalloc,则此变量将被忽略。在 3.6 版本发生变更: 此变量现在也可以被用于在发布模式下编译的 Python。 如果它被设置为一个空字符串则将没有任何效果。
- PYTHONLEGACYWINDOWSFSENCODING¶
如果设为非空字符串,默认的 filesystem encoding and error handler 模式将恢复到 3.6 版本之前的值 “mbcs”和“replace”。 否则,将采用新的默认值“utf-8”和“surrogatepass”。
这也可以在运行时通过
sys._enablelegacywindowsfsencoding()来启用。Availability: Windows.
Added in version 3.6: 更多详情请参阅 PEP 529。
- PYTHONLEGACYWINDOWSSTDIO¶
如果设为一个非空字符串,则不使用新的控制台读取器和写入器。 这意味着 Unicode 字符将根据活动控制台的代码页进行编码,而不是使用 utf-8。
如果标准流被重定向(到文件或管道)而不是指向控制台缓冲区则该变量会被忽略。
Availability: Windows.
Added in version 3.6.
- PYTHONCOERCECLOCALE¶
如果值设为
0,将导致主 Python 命令行应用跳过将传统的基于 ASCII 的 C 与 POSIX 区域设置强制转换为更强大的基于 UTF-8 的替代方案。如果此变量 未被 设置(或被设为
0以外的值),则覆盖环境变量的LC_ALL区域选项也不会被设置,并且报告给LC_CTYPE类别的当前区域选项或者为默认的C区域,或者为显式指明的基于 ASCII 的POSIX区域,然后 Python CLI 将在加载解释器运行时之前尝试为LC_CTYPE类别按指定的顺序配置下列区域选项:C.UTF-8C.utf8UTF-8
如果成功设置了以上区域类别中的一个,则初始化 Python 运行时之前也将在当前进程环境中相应地设置
LC_CTYPE环境变量。 这会确保除了解释器本身和运行于同一进程中的其他可感知区域选项的组件 (例如 GNUreadline库) 之外,还能在子进程 (无论这些进程是否在运行 Python 解释器) 以及在查询环境而非当前 C 区域的操作 (例如 Python 自己的locale.getdefaultlocale()) 中看到更新的设置。(显式地或通过上述的隐式区域强制转换) 配置其中一个区域选项将自动为
sys.stdin和sys.stdout启用surrogateescape错误处理器 (sys.stderr会继续使用backslashreplace如同在任何其他区域选项中一样)。 这种流处理行为可以按通常方式使用PYTHONIOENCODING来覆盖。出于调试目的,如果激活了区域强制转换,或者如果当 Python 运行时被初始化时某个 应该 触发强制转换的区域选项仍处于激活状态则设置
PYTHONCOERCECLOCALE=warn将导致 Python 在stderr上发出警告消息。还要注意,即使在区域转换转换被禁用,或者在其无法找到合适的目标区域时,默认
PYTHONUTF8仍将在传统的基于 ASCII 的区域中被激活。 必须同时禁用这两项特性以强制解释器使用ASCII而不是UTF-8作为系统接口。Availability: Unix.
Added in version 3.7: 请参阅 PEP 538 了解详情。
- PYTHONDEVMODE¶
如果此环境变量被设为一个非空字符串,则会启用 Python 开发模式,引入在默认情况下启用扩展会导致开销过大的额外运行时检查。 这等价于设置
-Xdev选项。Added in version 3.7.
- PYTHONUTF8¶
如果设为
1,将会启用 Python UTF-8 模式。若设为
0,则会禁用 Python UTF-8 模式 。设置任何其他非空字符串会在解释器初始化期间导致错误。
Added in version 3.7.
- PYTHONWARNDEFAULTENCODING¶
如果该环境变量设为一个非空字符串,则在采用某地区默认编码时,将会引发一条
EncodingWarning。请参阅 选择性的 EncodingWarning 来了解详情。
Added in version 3.10.
- PYTHONNODEBUGRANGES¶
如果设置了此变量,它会禁用在代码对象中包括将额外位置信息(结束行、开始列偏移量和结束列偏移量)映射到每条指令的映射表。 这在需要较小的代码对象和 pyc 文件时很有用处并可在解释器显示回溯时屏蔽额外的视觉位置提示。
Added in version 3.11.
- PYTHONPERFSUPPORT¶
如果此变量被设为非零值,它将启用对 Linux
perf分析器的支持以便 Python 调用能被它检测到。如果设为
0,则禁用 Linuxperf性能分析器支持。另请参阅
-X perf命令行选项和 Python 对 Linux perf 性能分析器的支持。Added in version 3.12.
- PYTHON_PERF_JIT_SUPPORT¶
如果此变量被设为非零值,它将启用对 Linux
perf分析器的支持以便 Python 调用能被它使用 DWARF 信息来检测。如果设为
0,则禁用 Linuxperf性能分析器支持。另请参阅
-X perf_jit命令行选项和 Python 对 Linux perf 性能分析器的支持。Added in version 3.13.
- PYTHON_CPU_COUNT¶
如果此变量被设为正整数值,它将覆盖
os.cpu_count()和os.process_cpu_count()的返回值。另请参阅
-X cpu_count命令行选项。Added in version 3.13.
- PYTHON_FROZEN_MODULES¶
如果此变量被设为
on或off,它将确定已冻结模块是否要被导入机制所忽略。 值为on表示它们将被导入而off表示它们将被忽略。 对于非调试构建版(正常情况)默认为on而对调试构建版则为off。 请注意importlib_bootstrap和importlib_bootstrap_external冻结模块总是会被使用,即使该旗标被设为off。另请参阅
-X frozen_modules命令行选项。Added in version 3.13.
- PYTHON_BASIC_REPL¶
如果此变量被设为
1,解释器将不再尝试加载需要curses和readline的基于 Python 的 REPL,而将改用传统的基于解析器的 REPL。Added in version 3.13.
- PYTHON_HISTORY¶
此环境变量可被用来设置
.python_history文件的位置(在默认情况下,它将为用户主目录下的.python_history文件)。Added in version 3.13.
- PYTHON_GIL¶
如果将此变量设为
1,则将强制启用全局解释器锁 (GIL)。 将其设为0将强制禁用 GIL (需要使用--disable-gil构建选项来配置 Python)。另请参阅
-X gil命令行选项,该选项的优先级高于此变量,并请参阅 自由线程的 CPython。Added in version 3.13.
1.2.1. 调试模式变量¶
- PYTHONDUMPREFS¶
如果设置,Python 将在关闭解释器后转储仍存活的对象和引用计数。
需要使用
--with-trace-refs构建选项来配置 Python。
- PYTHONDUMPREFSFILE¶
如果设置,Python 将在关闭解释器后将仍然存活的对象和引用计数转储至此环境变量给出的路径所对应的文件中。
需要使用
--with-trace-refs构建选项来配置 Python。Added in version 3.11.
- PYTHON_PRESITE¶
如果此变量被设为一个模块,则该模块将在解释器生命周期的较早阶段被导入,即在
site模块被执行之前,并在__main__模块被创建之前。 因此,这个被导入的模块不会被作为__main__。这适用于要早在 Python 初始化期间就执行的代码。
要导入一个子模块,请使用
package.module作为值,就像在 import 语句中那样。另请参阅
-X presite命令行选项,该选项的优先级高于此变量。需要使用
--with-pydebug构建选项来配置 Python。Added in version 3.13.