1. 命令行与环境¶
为获取各种设置信息,CPython 解析器会扫描命令行与环境。
CPython implementation detail: 其他实现的命令行方案可能会有所不同。 详见 其他实现。
1.1. 命令行¶
调用 Python 时,可以指定下列任意选项:
python [-bBdEhiIOqsSuvVWx?] [-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 # for details - 引发一个 审计事件 - 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. 通用选项¶
1.1.3. 其他选项¶
- 
-B¶
- 给出此选项时,Python 不在导入源模块时写入 - .pyc文件。另请参阅- PYTHONDONTWRITEBYTECODE。
- 
--check-hash-based-pycsdefault|always|never¶
- 控制基于哈希值的 - .pyc文件的验证行为。 参见 已缓存字节码的失效。 当设为- default时,已选定和未选定的基于哈希值的字节码缓存文件将根据其默认语义进行验证。 当设为- always时,所有基于哈希值的- .pyc文件,不论是已选定还是未选定的都将根据其对应的源文件进行验证。 当设为- never时,基于哈希值的- .pyc文件将不会根据其对应的源文件进行验证。- 基于时间戳的 - .pyc文件的语义不会受此选项影响。
- 
-d¶
- 开启解析器调试输出(限专家使用,依赖于编译选项)。 另请参阅 - PYTHONDEBUG。
- 
-E¶
- 忽略所有 - PYTHON*环境变量,例如,已设置的- PYTHONPATH和- PYTHONHOME。
- 
-i¶
- 脚本是第一个参数,或使用 - -c时,即便- sys.stdin不是终端,执行脚本或命令后,也会进入交互模式。不读取- PYTHONSTARTUP文件。- 本选项用于,脚本触发异常时,检查全局变量或堆栈回溯。 详见 - PYTHONINSPECT。
- 
-I¶
- 在隔离模式下运行 Python。 这将同时应用 -E 和 -s。 在隔离模式下 - sys.path既不包含脚本所在目录也不包含用户的 site-packages 目录。 所有- PYTHON*环境变量也会被忽略。 还可以施加更进一步的限制以防止用户注入恶意代码。- 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文件名。
- 
-q¶
- 即使在交互模式下也不显示版权和版本信息。 - 3.2 新版功能. 
- 
-R¶
- 开启哈希随机化。 此选项权 - PYTHONHASHSEED环境变量设置为- 0时起作用,因为哈希随机化是默认启用的。- 在Python的早期版本中,此选项启用哈希随机化,将 str 和 bytes 的对象 - __hash__()的值 "加盐" 为不可预测的随机值。虽然它们在单个Python进程中保持不变,但是在重复调用的Python进程之间它们是不可预测的。- Hash randomization is intended to provide protection against a denial-of-service caused by carefully-chosen inputs that exploit the worst case performance of a dict construction, O(n2) complexity. See http://www.ocert.org/advisories/ocert-2011-003.html for details. - PYTHONHASHSEED允许你为哈希种子密码设置一个固定值。- 在 3.7 版更改: 此选项不会再被忽略。 - 3.2.3 新版功能. 
- 
-s¶
- 不要将 - 用户 site-packages 目录添加到- sys.path。- 参见 - PEP 370 -- 分用户的 site-packages 目录 
- 
-S¶
- 禁用 - site的导入及其所附带的基于站点对- sys.path的操作。 如果- site会在稍后被显式地导入也会禁用这些操作 (如果你希望触发它们则应调用- site.main())。
- 
-u¶
- 强制 stdout 和 stderr 流不使用缓冲。 此选项对 stdin 流无影响。 - 另请参阅 - PYTHONUNBUFFERED。- 在 3.7 版更改: stdout 和 stderr 流在文本层现在不使用缓冲。 
- 
-v¶
- Print a message each time a module is initialized, showing the place (filename or built-in module) from which it is loaded. When given twice ( - -vv), print a message for each file that is checked for when searching for a module. Also provides information on module cleanup at exit. See also- PYTHONVERBOSE.
- 
-Warg¶
- Warning control. Python's warning machinery by default prints warning messages to - sys.stderr. A typical warning message has the following form:- file:line: category: message - By default, each warning is printed once for each source line where it occurs. This option controls how often warnings are printed. - Multiple - -Woptions may be given; when a warning matches more than one option, the action for the last matching option is performed. Invalid- -Woptions are ignored (though, a warning message is printed about invalid options when the first warning is issued).- Warnings can also be controlled using the - PYTHONWARNINGSenvironment variable and from within a Python program using the- warningsmodule.- 最简单的设置是将某个特定操作无条件地应用于进程所发出所有警告 (即使是在默认情况下会忽略的那些警告): - -Wdefault # Warn once per call location -Werror # Convert to exceptions -Walways # Warn every time -Wmodule # Warn once per calling module -Wonce # Warn once per Python process -Wignore # Never warn - The action names can be abbreviated as desired (e.g. - -Wi,- -Wd,- -Wa,- -We) and the interpreter will resolve them to the appropriate action name.
- 
-x¶
- 跳过源中第一行,以允许使用非 Unix 形式的 - #!cmd。 这适用于 DOS 专属的破解操作。
- 
-X¶
- 保留用于各种具体实现专属的选项。 CPython 目前定义了下列可用的值: - -X faulthandler启用- faulthandler;
- -X oldparser: enable the traditional LL(1) parser. See also- PYTHONOLDPARSERand PEP 617.
- -X showrefcountto output the total reference count and number of used memory blocks when the program finishes or after each statement in the interactive interpreter. This only works on debug builds.
- -X tracemalloc使用- tracemalloc模块启动对 Python 内存分配的跟踪。 默认情况下,只有最近的帧会保存在跟踪的回溯信息中。 使用- -X tracemalloc=NFRAME以启动限定回溯 NFRAME 帧的跟踪。 请参阅- tracemalloc.start()了解详情。
- -X int_max_str_digits将配置 整数字符串转换长度限制。 另请参阅- PYTHONINTMAXSTRDIGITS。
- -X importtime显示每次导入耗费的时间。 它会显示模块名称,累计时间(包括嵌套的导入)和自身时间(排除嵌套的导入)。 请注意它的输出在多线程应用程序中可能会出错。 典型用法如- python3 -X importtime -c 'import asyncio'。 另请参阅- PYTHONPROFILEIMPORTTIME。
- -X dev: 启用 Python 开发模式,引入在默认情况下启用会导致开销过大的运行时检查。
- -X utf8enables UTF-8 mode for operating system interfaces, overriding the default locale-aware mode.- -X utf8=0explicitly disables UTF-8 mode (even when it would otherwise activate automatically). See- PYTHONUTF8for more details.
- -X pycache_prefix=PATH允许将- .pyc文件写入以给定目录为根的并行树,而不是代码树。另见- PYTHONPYCACHEPREFIX。
 - 它还允许传入任意值并通过 - sys._xoptions字典来提取这些值。- 在 3.2 版更改: 增加了 - -X选项。- 3.3 新版功能: - -X faulthandler选项。- 3.4 新版功能: - -X showrefcount与- -X tracemalloc选项。- 3.6 新版功能: - -X showalloccount选项。- 3.7 新版功能: - -X importtime,- -X dev与- -X utf8选项。- 3.8 新版功能: - -X pycache_prefix选项。- -X dev选项现在在- io.IOBase析构函数中记录- close()异常。- 在 3.9 版更改: 使用 - -X dev选项,在字符串编码和解码操作时检查 encoding 和 errors 参数。- The - -X showalloccount选项已被移除。- 3.9.14 新版功能: - -X int_max_str_digits选项。- Deprecated since version 3.9, will be removed in version 3.10: The - -X oldparseroption.
1.1.4. 不应当使用的选项¶
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值。- 3.9 新版功能. 
- 
PYTHONSTARTUP¶
- 这如果是一个可读文件的名称,该文件中的 Python 命令会在交互模式的首个提示符显示之前被执行。 该文件会在与交互式命令执行所在的同一命名空间中被执行,因此其中所定义或导入的对象可以在交互式会话中无限制地使用。 你还可以在这个文件中修改提示符 - sys.ps1和- sys.ps2以及钩子- sys.__interactivehook__。- 使用 - filename参数会引发 审计事件- cpython.run_startup。
- 
PYTHONBREAKPOINT¶
- 此变量如果被设定,它会使用加点号的路径标记一个可调用对象。 包含该可调用对象的模块将被导入,随后该可调用对象将由 - sys.breakpointhook()的默认实现来运行,后者自身将由内置的- breakpoint()来调用。 如果未设定,或设定为空字符串,则它相当于值 "pdb.set_trace"。 将此变量设为字符串 "0" 会导致- sys.breakpointhook()的默认实现不做任何事而直接返回。- 3.7 新版功能. 
- 
PYTHONOLDPARSER¶
- If this is set to a non-empty string, enable the traditional LL(1) parser. - See also the - -X- oldparseroption and PEP 617.- Deprecated since version 3.9, will be removed in version 3.10. 
- 
PYTHONINSPECT¶
- 此变量如果被设为一个非空字符串,它就相当于指定 - -i选项。- 此变量也可由 Python 代码使用 - os.environ来修改以在程序终结时强制检查模式。- 引发一个不带参数的 审计事件 - cpython.run_stdin。- 在 3.9.20 版更改: (also 3.8.20) Emits audit events. 
- 
PYTHONPYCACHEPREFIX¶
- 如果设置了此选项,Python将在镜像目录树中的此路径中写入 - .pyc文件,而不是源树中的- __pycache__目录中。这相当于指定- -X- pycache_prefix=PATH选项。- 3.8 新版功能. 
- 
PYTHONHASHSEED¶
- 如果此变量未设置或设为 - random,将使用一个随机值作为 str 和 bytes 对象哈希运算的种子。- 如果 - PYTHONHASHSEED被设为一个整数值,它将被作为固定的种子数用来生成哈希随机化所涵盖的类型的 hash() 结果。- 它的目的是允许可复现的哈希运算,例如用于解释器本身的自我检测,或允许一组 python 进程共享哈希值。 - 该整数必须为一个 [0,4294967295] 范围内的十进制数。 指定数值 0 将禁用哈希随机化。 - 3.2.3 新版功能. 
- 
PYTHONINTMAXSTRDIGITS¶
- 如果将此变量设为一个整数,它会被用来配置解释器的全局 整数字符串转换长度限制。 - 3.9.14 新版功能. 
- 
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¶
- 定义 - 用户基准目录,它会在执行- python setup.py install --user时被用来计算- 用户 site-packages 目录的路径以及 Distutils 安装路径。- 参见 - PEP 370 -- 分用户的 site-packages 目录 
- 
PYTHONEXECUTABLE¶
- 如果设置了此环境变量,则 - sys.argv[0]将被设为此变量的值而不是通过 C 运行时所获得的值。 这仅在 macOS 上起作用。
- 
PYTHONWARNINGS¶
- 此变量等价于 - -W选项。 如果被设为一个以逗号分隔的字符串,它就相当于多次指定- -W,列表中后出现的过滤器优先级会高于列表中先出现的。- 最简单的设置是将某个特定操作无条件地应用于进程所发出所有警告 (即使是在默认情况下会忽略的那些警告): - PYTHONWARNINGS=default # Warn once per call location PYTHONWARNINGS=error # Convert to exceptions PYTHONWARNINGS=always # Warn every time PYTHONWARNINGS=module # Warn once per calling module PYTHONWARNINGS=once # Warn once per Python process PYTHONWARNINGS=ignore # Never warn 
- 
PYTHONFAULTHANDLER¶
- 如果此环境变量被设为一个非空字符串, - faulthandler.enable()会在启动时被调用:为- SIGSEGV,- SIGFPE,- SIGABRT,- SIGBUS和- SIGILL等信号安装一个处理器以转储 Python 回溯信息。 此变量等价于- -X- faulthandler选项。- 3.3 新版功能. 
- 
PYTHONTRACEMALLOC¶
- 如果此环境变量被设为一个非空字符串,则会使用 - tracemalloc模块启动对 Python 内存分配的跟踪。 该变量的值是保存于跟踪的回溯信息中的最大帧数。 例如,- PYTHONTRACEMALLOC=1只保存最近的帧。 请参阅- tracemalloc.start()了解详情。- 3.4 新版功能. 
- 
PYTHONPROFILEIMPORTTIME¶
- 如果此变量被设为一个非空字符串,Python 将显示每次导入花费了多长时间。 此变量完全等价于在命令行为设置 - -X importtime。- 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()函数。
 - Install debug hooks: - debug: 在 默认内存分配器 之上安装调试钩子。
- malloc_debug: 与- malloc相同但还会安装调试钩子。
- pymalloc_debug: 与- pymalloc相同但还会安装调试钩子。
 - See the default memory allocators and the - PyMem_SetupDebugHooks()function (install debug hooks on Python memory allocators).- 在 3.7 版更改: 增加了 - "default"分配器。- 3.6 新版功能. 
- 
PYTHONMALLOCSTATS¶
- 如果设为一个非空字符串,Python 将在每次创建新的 pymalloc 对象区域以及在关闭时打印 pymalloc 内存分配器 的统计信息。 - 如果 - PYTHONMALLOC环境变量被用来强制开启 C 库的- malloc()分配器,或者如果 Python 的配置不支持- pymalloc,则此变量将被忽略。- 在 3.6 版更改: 此变量现在也可以被用于在发布模式下编译的 Python。 如果它被设置为一个空字符串则将没有任何效果。 
- 
PYTHONLEGACYWINDOWSFSENCODING¶
- If set to a non-empty string, the default filesystem encoding and errors mode will revert to their pre-3.6 values of 'mbcs' and 'replace', respectively. Otherwise, the new defaults 'utf-8' and 'surrogatepass' are used. - 这也可以在运行时通过 - sys._enablelegacywindowsfsencoding()来启用。- 可用性: Windows。 - 3.6 新版功能: 更多详情请参阅 PEP 529。 
- 
PYTHONLEGACYWINDOWSSTDIO¶
- 如果设为一个非空字符串,则不使用新的控制台读取器和写入器。 这意味着 Unicode 字符将根据活动控制台的代码页进行编码,而不是使用 utf-8。 - 如果标准流被重定向(到文件或管道)而不是指向控制台缓冲区则该变量会被忽略。 - 可用性: Windows。 - 3.6 新版功能. 
- 
PYTHONCOERCECLOCALE¶
- 如果值设为 - 0,将导致主 Python 命令行应用跳过将传统的基于 ASCII 的 C 与 POSIX 区域设置强制转换为更强大的基于 UTF-8 的替代方案。- 如果此变量 未被 设置(或被设为 - 0以外的值),则覆盖环境变量的- LC_ALL区域选项也不会被设置,并且报告给- LC_CTYPE类别的当前区域选项或者为默认的- C区域,或者为显式指明的基于 ASCII 的- POSIX区域,然后 Python CLI 将在加载解释器运行时之前尝试为- LC_CTYPE类别按指定的顺序配置下列区域选项:- C.UTF-8
- C.utf8
- UTF-8
 - 如果成功设置了以上区域类别中的一个,则初始化 Python 运行时之前也将在当前进程环境中相应地设置 - LC_CTYPE环境变量。 这会确保除了解释器本身和运行于同一进程中的其他可感知区域选项的组件 (例如 GNU- readline库) 之外,还能在子进程 (无论这些进程是否在运行 Python 解释器) 以及在查询环境而非当前 C 区域的操作 (例如 Python 自己的- locale.getdefaultlocale()) 中看到更新的设置。- (显式地或通过上述的隐式区域强制转换) 配置其中一个区域选项将自动为 - sys.stdin和- sys.stdout启用- surrogateescape错误处理器 (- sys.stderr会继续使用- backslashreplace如同在任何其他区域选项中一样)。 这种流处理行为可以按通常方式使用- PYTHONIOENCODING来覆盖。- 出于调试目的,如果激活了区域强制转换,或者如果当 Python 运行时被初始化时某个 应该 触发强制转换的区域选项仍处于激活状态则设置 - PYTHONCOERCECLOCALE=warn将导致 Python 在- stderr上发出警告消息。- 还要注意,即使在区域转换转换被禁用,或者在其无法找到合适的目标区域时,默认 - PYTHONUTF8仍将在传统的基于 ASCII 的区域中被激活。 必须同时禁用这两项特性以强制解释器使用- ASCII而不是- UTF-8作为系统接口。- 可用性: *nix。 - 3.7 新版功能: 请参阅 PEP 538 了解详情。 
- 
PYTHONDEVMODE¶
- 如果将此环境变量设为非空字符串,则启用 Python 开发模式,引入在默认情况下启用会导致开销过大的运行时检查。 - 3.7 新版功能. 
- 
PYTHONUTF8¶
- If set to - 1, enables the interpreter's UTF-8 mode, where- UTF-8is used as the text encoding for system interfaces, regardless of the current locale setting.- This means that: - sys.getfilesystemencoding()returns- 'UTF-8'(the locale encoding is ignored).
- locale.getpreferredencoding()returns- 'UTF-8'(the locale encoding is ignored, and the function's- do_setlocaleparameter has no effect).
- sys.stdin,- sys.stdout和- sys.stderr都将 UTF-8 用作它们的文本编码,并且为- sys.stdin和- sys.stdout启用- surrogateescape错误处理器 (- sys.stderr会继续使用- backslashreplace如同在默认的局部感知模式下一样)
 - 作为低层级 API 发生改变的结果,其他高层级 API 也会表现出不同的默认行为: - 命令行参数,环境变量和文件名会使用 UTF-8 编码来解码为文本。 
- os.fsdecode()和- os.fsencode()会使用 UTF-8 编码。
- open(),- io.open()和- codecs.open()默认会使用 UTF-8 编码。 但是,它们默认仍将使用 strict 错误处理器,因此试图在文本模式下打开二进制文件将可能引发异常,而不是生成无意义的数据。
 - 请注意 UTF-8 模式下的标准流设置可以被 - PYTHONIOENCODING所覆盖(在默认的区域感知模式下也同样如此)。- If set to - 0, the interpreter runs in its default locale-aware mode.- 设置任何其他非空字符串会在解释器初始化期间导致错误。 - If this environment variable is not set at all, then the interpreter defaults to using the current locale settings, unless the current locale is identified as a legacy ASCII-based locale (as described for - PYTHONCOERCECLOCALE), and locale coercion is either disabled or fails. In such legacy locales, the interpreter will default to enabling UTF-8 mode unless explicitly instructed not to do so.- Also available as the - -X- utf8option.- 3.7 新版功能: 有关更多详细信息,请参阅 PEP 540 。 
1.2.1. 调试模式变量¶
Setting these variables only has an effect in a debug build of Python.
- 
PYTHONTHREADDEBUG¶
- If set, Python will print threading debug info. - Need Python configured with the - --with-pydebugbuild option.
- 
PYTHONDUMPREFS¶
- 如果设置,Python 将在关闭解释器后转储仍存活的对象和引用计数。 - Need Python configured with the - --with-trace-refsbuild option.