On this page
1. 命令行和环境
CPython 解释器会在命令行和环境中扫描各种设置。
CPython 实现细节: 其他实现的命令行方案可能有所不同。有关更多资源,请参见Alternate Implementations。
1.1. 命令行
调用 Python 时,您可以指定以下任何选项:
python [-bBdEhiIOqsSuvVWx?] [-c command | -m module-name | script | - ] [args]
当然,最常见的用例是对脚本的简单调用:
python myscript.py
1.1.1. 界面选项
解释器接口类似于 UNIX shell 的接口,但是提供了一些其他的调用方法:
在将标准 Importing 连接到 tty 设备的情况下调用时,它会提示 Importing 命令并执行命令,直到 EOF(文件结束符,您可以在 UNIX 上使用 Ctrl-D 或在 Windows 上使用 Ctrl-Z 生成,然后再 Importing)读。
当使用文件名参数或以文件作为标准 Importing 调用时,它将读取并执行该文件中的脚本。
当使用目录名称参数调用时,它将从该目录读取并执行一个适当命名的脚本。
当用
-c command
调用时,它将执行以* command *形式给出的 Python 语句。 * command *可能包含多个用换行符分隔的语句。领先的空格在 Python 语句中非常重要!用
-m module-name
调用时,给定的模块位于 Python 模块路径上并作为脚本执行。
在非交互模式下,将在执行整个 Importing 之前对其进行解析。
接口选项终止解释器使用的选项列表,所有连续参数都以sys.argv结尾–请注意,第一个元素下标零(sys.argv[0]
)是反映程序源的字符串。
-c
<command>
- 在* command *中执行 Python 代码。 * command *可以是一个或多个用换行符分隔的语句,与常规模块代码一样,前导空格很大。
如果指定了此选项,则sys.argv的第一个元素将是"-c"
,并且当前目录将被添加到sys.path的开头(允许将该目录中的模块作为顶级模块导入)。
用参数command
引发auditing event cpython.run_command
。
由于参数是* module *名称,因此您不能给文件 extensions(.py
)。模块名称应为有效的绝对 Python 模块名称,但是实现可能并不总是强制执行此操作(例如,它可能允许您使用包含连字符的名称)。
包名称(包括名称空间包)也是允许的。当提供软件包名称而不是常规模块时,解释器将执行<pkg>.__main__
作为主模块。这种行为故意类似于处理作为脚本参数传递给解释器的目录和 zipfile。
Note
该选项不能与用 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
用参数module-name
引发auditing event cpython.run_module
。
See also
等效Function可直接用于 Python 代码
PEP 338 –将模块作为脚本执行
在版本 3.1 中更改:提供程序包名称以运行__main__
子模块。
在版本 3.4 中更改:还支持名称空间包
如果指定了此选项,则sys.argv的第一个元素将是"-"
,并且当前目录将被添加到sys.path的开头。
引发不带参数的auditing event cpython.run_stdin
。
<script>
- 执行* script *中包含的 Python 代码,该代码必须是指向 Python 文件,包含
__main__.py
文件的目录或包含__main__.py
文件的 zip 文件的文件系统路径(绝对或相对)。
- 执行* script *中包含的 Python 代码,该代码必须是指向 Python 文件,包含
如果指定了此选项,则sys.argv的第一个元素将是在命令行中指定的脚本名称。
如果脚本名称直接指向 Python 文件,则包含该文件的目录将添加到sys.path的开头,并且该文件将作为main模块执行。
如果脚本名称引用目录或 zipfile,则将脚本名称添加到sys.path的开头,并将该位置的__main__.py
文件作为main模块执行。
-I选项可用于在隔离模式下运行脚本,其中sys.path既不包含脚本的目录也不包含用户的 site-packages 目录。所有 PYTHON*
环境变量也将被忽略。
用参数filename
引发auditing event cpython.run_file
。
See also
等效Function可直接用于 Python 代码
如果未提供接口选项,则表示-i,sys.argv[0]
是空字符串(""
),并且当前目录将添加到sys.path的开头。另外,如果平台上可用,则将自动启用制表符完成和历史记录编辑(请参见Readline configuration)。
See also
在版本 3.4 中更改:自动启用制表符完成和历史记录编辑。
1.1.2. 通用选项
-?
``-h
``--help
``- 打印所有命令行选项的简短描述。
-V
``--version
``- 打印 Python 版本号并退出。示例输出可能是:
Python 3.8.0b2+
当给出两次时,打印有关构建的更多信息,例如:
Python 3.8.0b2+ (3.8:0c076caaa8, Apr 20 2019, 21:55:00)
[GCC 6.2.0 20161005]
3.6 版的新Function:-VV
选项。
1.1.3. 杂项选项
在版本 3.5 中进行了更改:影响bytes与int的比较。
-B
``- 如果给出,Python 将不会try在导入源模块时写入
.pyc
文件。另请参见 PYTHONDONTWRITEBYTECODE。
- 如果给出,Python 将不会try在导入源模块时写入
--check-hash-based-pycs
default|always|never
- 控制基于散列的
.pyc
文件的验证行为。参见缓存的字节码无效。当设置为default
时,将根据其默认语义来验证已选中和未选中的基于哈希的字节码缓存文件。当设置为always
时,所有基于散列的.pyc
文件(无论已选中还是未选中)都将根据其相应的源文件进行验证。设置为never
时,不会针对基于散列的.pyc
文件对其相应的源文件进行验证。
- 控制基于散列的
基于时间戳的.pyc
文件的语义不受此选项的影响。
-d
``- 打开解析器调试输出(仅针对 maven,取决于编译选项)。另请参见 PYTHONDEBUG。
-E
``- 忽略所有
PYTHON*
环境变量,例如 PYTHONPATH和 PYTHONHOME,可以设置。
- 忽略所有
-i
``- 当将脚本作为第一个参数传递或使用-c选项时,即使sys.stdin似乎不是终端,执行脚本或命令后也要进入交互模式。无法读取 PYTHONSTARTUP文件。
当脚本引发异常时,这对于检查全局变量或堆栈跟踪很有用。另请参见 PYTHONINSPECT。
-I
``- 在隔离模式下运行 Python。这也意味着-E 和-s。在隔离模式下,sys.path既不包含脚本的目录也不包含用户的 site-packages 目录。所有
PYTHON*
环境变量也将被忽略。可以施加进一步的限制以防止用户注入恶意代码。
- 在隔离模式下运行 Python。这也意味着-E 和-s。在隔离模式下,sys.path既不包含脚本的目录也不包含用户的 site-packages 目录。所有
3.4 版的新Function。
-O
``- 删除 assert 语句和所有以debug为条件的代码。pass在
.pyc
extensions 之前添加.opt-1
来扩展已编译(bytecode)文件的文件名(请参见 PEP 488)。另请参见 PYTHONOPTIMIZE。
- 删除 assert 语句和所有以debug为条件的代码。pass在
在版本 3.5 中进行了更改:根据 PEP 488修改.pyc
文件名。
在版本 3.5 中进行了更改:根据 PEP 488修改.pyc
文件名。
-q
``- 即使在交互模式下也不显示版权和版本消息。
3.2 版中的新Function。
-R
``- 打开哈希随机化。仅当 PYTHONHASHSEED环境变量设置为
0
时,此选项才有效,因为默认情况下启用了哈希随机化。
- 打开哈希随机化。仅当 PYTHONHASHSEED环境变量设置为
在 Python 的早期版本中,此选项启用哈希随机化,以便 str 和 bytes 对象的hash()值被“盐化”,具有不可预测的随机值。尽管它们在单个 Python 进程中保持不变,但在重复调用 Python 之间是不可预测的。
哈希随机化旨在提供保护,防止由于精心选择的 Importing 而导致的拒绝服务,这些 Importing 利用了 dict 结构的最坏情况的性能,即 O(n ^ 2)复杂度。有关详情,请参见http://www.ocert.org/advisories/ocert-2011-003.html。
PYTHONHASHSEED允许您为哈希种子机密设置固定值。
在版本 3.7 中更改:该选项不再被忽略。
版本 3.2.3 中的新Function。
See also
PEP 370 –每个用户的站点软件包目录
-S
``- 禁止导入模块site及其需要的与站点相关的sys.path操作。如果稍后显式导入site,也请禁用这些操作(如果希望触发它们,请调用site.main())。
-u
``- 强制取消对 stdout 和 stderr 流的缓冲。此选项对 stdin 流无效。
另请参见 PYTHONUNBUFFERED。
在版本 3.7 中进行了更改:现在,stdout 和 stderr 流的文本层已取消缓冲。
-v
``- 每次模块初始化时打印一条消息,显示加载该模块的位置(文件名或内置模块)。当给出两次(
-vv
)时,为搜索模块时检查的每个文件打印一条消息。还提供有关退出时模块清理的信息。另请参见 PYTHONVERBOSE。
- 每次模块初始化时打印一条消息,显示加载该模块的位置(文件名或内置模块)。当给出两次(
-W
arg
- 警告控制。默认情况下,Python 的警告机制将警告消息打印到sys.stderr。典型的警告消息具有以下形式:
file:line: category: message
默认情况下,每个警告在发生该警告的每个源行中都打印一次。此选项控制打印警告的频率。
可以提供多个-W选项;当警告匹配多个选项时,将执行最后一个匹配选项的操作。无效的-W选项将被忽略(尽管在发出第一个警告时会显示有关无效选项的警告消息)。
也可以使用 PYTHONWARNINGS环境变量来控制警告,也可以使用warnings模块在 Python 程序中控制警告。
最简单的设置将无条件地将特定操作应用于流程发出的所有警告(甚至默认情况下会忽略的警告):
-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
动作名称可以根据需要缩写(例如-Wi
,-Wd
,-Wa
,-We
),解释器会将其解析为适当的动作名称。
-x
``- 跳过源代码的第一行,允许使用非 Unix 形式的
#!cmd
。这仅适用于 DOS 特定的 hack。
- 跳过源代码的第一行,允许使用非 Unix 形式的
-X
``- 保留用于各种特定于实现的选项。 CPython 当前定义了以下可能的值:
-X faulthandler
启用faulthandler;-X showrefcount
用于在程序完成时或在交互式解释器中的每个语句之后输出总引用计数和已用存储块的数量。这仅适用于调试版本。-X tracemalloc
开始使用tracemalloc模块跟踪 Python 内存分配。默认情况下,仅最新帧存储在跟踪的回溯中。使用-X tracemalloc=NFRAME
以* NFRAME *帧的 traceback 限制开始跟踪。有关更多信息,请参见tracemalloc.start()。-X showalloccount
在程序结束时输出每种类型分配的对象总数。这仅在使用COUNT_ALLOCS
定义的 Python 构建时有效。-X importtime
以显示每次导入需要多长时间。它显示模块名称,累积时间(包括嵌套的导入)和自身时间(不包括嵌套的导入)。请注意,其输出在多线程应用程序中可能会损坏。典型用法是python3 -X importtime -c 'import asyncio'
。另请参见 PYTHONPROFILEIMPORTTIME。-X dev
:启用 CPython 的“开发模式”,引入了其他运行时检查,这些检查过于昂贵,因此默认情况下无法启用。如果代码正确,则它的详细程度不应超过默认值:仅在检测到问题时才发出新警告。开发人员模式的效果:添加
default
警告过滤器,作为-Wdefault
。在内存分配器上安装调试钩子:请参见PyMem_SetupDebugHooks() C 函数。
启用faulthandler模块以在崩溃时转储 Pythontraceback。
Enable 异步调试模式.
将sys.flags的
dev_mode
属性设置为True
。io.IOBase析构函数日志
close()
异常。
-X utf8
为 os 接口启用 UTF-8 模式,从而覆盖默认的区域设置感知模式。-X utf8=0
明确禁用 UTF-8 模式(即使它原本会自动激活)。有关更多详细信息,请参见 PYTHONUTF8。-X pycache_prefix=PATH
允许将.pyc
文件写入到以给定目录为根的并行树中,而不是代码树中。另请参见 PYTHONPYCACHEPREFIX。
它还允许传递任意值,并passsys._xoptions字典检索它们。
在版本 3.2 中更改:添加了-X选项。
版本 3.3 中的新Function:-X faulthandler
选项。
3.4 版的新Function:-X showrefcount
和-X tracemalloc
选项。
3.6 版的新Function:-X showalloccount
选项。
3.7 版的新Function:-X importtime
,-X dev
和-X utf8
选项。
3.8 版的新Function:-X pycache_prefix
选项。 -X dev
选项现在将close()
异常记录在io.IOBase析构函数中。
1.1.4. 您不应该使用的选项
-J
``- 保留供Jython使用。
1.2. 环境变量
这些环境变量会影响 Python 的行为,它们会在-E 或-I 以外的命令行开关之前进行处理。通常,命令行开关会在存在冲突的情况下覆盖环境变量。
PYTHONHOME
- 更改标准 Python 库的位置。默认情况下,将在
prefix/lib/pythonversion
和exec_prefix/lib/pythonversion
中搜索库,其中prefix
和exec_prefix
是与安装有关的目录,都默认为/usr/local
。
- 更改标准 Python 库的位置。默认情况下,将在
将 PYTHONHOME设置为单个目录时,其值将替换prefix
和exec_prefix
。要为此指定不同的值,请将 PYTHONHOME设置为prefix:exec_prefix
。
PYTHONPATH
- 扩展模块文件的默认搜索路径。格式与 Shell 的
PATH
相同:一个或多个用os.pathsep分隔的目录路径名(例如 Unix 上的冒号或 Windows 上的分号)。不存在的目录将被静默忽略。
- 扩展模块文件的默认搜索路径。格式与 Shell 的
除普通目录外,单独的 PYTHONPATH条目可能引用包含纯 Python 模块(源或编译形式)的 zipfile。无法从 zip 文件导入扩展模块。
默认搜索路径取决于安装,但通常以prefix/lib/pythonversion
开头(请参见上面的 PYTHONHOME)。总是将它附加到 PYTHONPATH。
如上面Interface options所述,将在 PYTHONPATH前面的搜索路径中插入一个附加目录。搜索路径可以在 Python 程序中作为变量sys.path进行操作。
PYTHONSTARTUP
- 如果这是可读文件的名称,则在以交互方式显示第一个提示之前,将执行该文件中的 Python 命令。在与执行交互命令相同的名称空间中执行文件,以便在其中定义或导入的对象可以在交互会话中使用而无需限定。您还可以在此文件中更改提示sys.ps1和sys.ps2以及钩子sys.interactivehook。
在启动时调用,以文件名作为参数引发auditing event cpython.run_startup
。
PYTHONOPTIMIZE
PYTHONBREAKPOINT
- 如果设置了此选项,它将使用点路径符号命名可调用对象。包含可调用对象的模块将被导入,然后可调用对象将由默认实现sys.breakpointhook()运行,该默认实现本身由内置breakpoint()调用。如果未设置或设置为空字符串,则等效于值“ pdb.set_trace”。将其设置为字符串“ 0”将导致sys.breakpointhook()的默认实现不执行任何操作,而是立即返回。
3.7 版中的新Function。
也可以使用os.environpass Python 代码修改此变量,以在程序终止时强制检查模式。
PYTHONUNBUFFERED
- 如果将其设置为非空字符串,则等效于指定-u选项。
PYTHONVERBOSE
PYTHONCASEOK
- 如果设置了该值,Python 将忽略import语句中的大小写。这仅适用于 Windows 和 OSX。
PYTHONDONTWRITEBYTECODE
- 如果将其设置为非空字符串,Python 将不会try在导入源模块时写入
.pyc
文件。这等效于指定-B选项。
- 如果将其设置为非空字符串,Python 将不会try在导入源模块时写入
PYTHONPYCACHEPREFIX
- 如果设置了该选项,Python 将在此路径的镜像目录树中而不是在源树的
__pycache__
目录中写入.pyc
个文件。这等效于指定-Xpycache_prefix=PATH
选项。
- 如果设置了该选项,Python 将在此路径的镜像目录树中而不是在源树的
3.8 版的新Function。
PYTHONHASHSEED
- 如果未设置此变量或未将其设置为
random
,则将使用随机值来播种 str 和 bytes 对象的哈希值。
- 如果未设置此变量或未将其设置为
如果 PYTHONHASHSEED设置为整数值,则将其用作固定种子来生成哈希随机化所覆盖类型的 hash()。
其目的是允许可重复的哈希,例如用于解释程序本身的自测,或允许一组 python 进程共享哈希值。
整数必须是[0,4294967295]范围内的十进制数。指定值 0 将禁用哈希随机化。
版本 3.2.3 中的新Function。
PYTHONIOENCODING
- 如果在运行解释器之前设置了此设置,它将覆盖语法
encodingname:errorhandler
中用于 stdin/stdout/stderr 的编码。encodingname
和:errorhandler
部分都是可选的,并且与str.encode()中的含义相同。
- 如果在运行解释器之前设置了此设置,它将覆盖语法
对于 stderr,将忽略:errorhandler
部分;处理程序将始终为'backslashreplace'
。
在版本 3.4 中进行了更改:encodingname
部分现在是可选的。
在版本 3.6 中进行了更改:在 Windows 上,除非也指定了 PYTHONLEGACYWINDOWSSTDIO,否则交互式控制台缓冲区将忽略此变量指定的编码。pass标准流重定向的文件和管道不受影响。
See also
PEP 370 –每个用户的站点软件包目录
PYTHONUSERBASE
- 定义用户基本目录,用于计算
python setup.py install --user
的用户站点包目录和Distutils 安装路径的路径。
- 定义用户基本目录,用于计算
See also
PEP 370 –每个用户的站点软件包目录
PYTHONEXECUTABLE
- 如果设置了此环境变量,则将
sys.argv[0]
设置为其值,而不是pass C 运行时获取的值。仅适用于 Mac OSX。
- 如果设置了此环境变量,则将
PYTHONWARNINGS
最简单的设置将无条件地将特定操作应用于流程发出的所有警告(甚至默认情况下会忽略的警告):
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
signal 安装处理程序以转储 Python 回溯。这等效于-Xfaulthandler
选项。
- 如果此环境变量设置为非空字符串,则在启动时调用faulthandler.enable():为
版本 3.3 中的新Function。
PYTHONTRACEMALLOC
- 如果此环境变量设置为非空字符串,请开始使用tracemalloc模块跟踪 Python 内存分配。变量的值是在跟踪的回溯中存储的最大帧数。例如,
PYTHONTRACEMALLOC=1
仅存储最新的帧。有关更多信息,请参见tracemalloc.start()。
- 如果此环境变量设置为非空字符串,请开始使用tracemalloc模块跟踪 Python 内存分配。变量的值是在跟踪的回溯中存储的最大帧数。例如,
3.4 版的新Function。
PYTHONPROFILEIMPORTTIME
- 如果此环境变量设置为非空字符串,Python 将显示每次导入需要多长时间。这完全等同于在命令行上设置
-X importtime
。
- 如果此环境变量设置为非空字符串,Python 将显示每次导入需要多长时间。这完全等同于在命令行上设置
3.7 版中的新Function。
PYTHONASYNCIODEBUG
- 如果此环境变量设置为非空字符串,请启用asyncio模块的debug mode。
3.4 版的新Function。
PYTHONMALLOC
- 设置 Python 内存分配器和/或安装调试钩子。
设置 Python 使用的内存分配器系列:
default
:使用默认内存分配器。malloc
:对所有域(PYMEM_DOMAIN_RAW,PYMEM_DOMAIN_MEM,PYMEM_DOMAIN_OBJ)使用 C 库的malloc()
函数。pymalloc
:将pymalloc allocator用于PYMEM_DOMAIN_MEM和PYMEM_DOMAIN_OBJ域,并将malloc()
函数用于PYMEM_DOMAIN_RAW域。
安装调试钩子:
debug
:在默认内存分配器顶部安装调试钩子。malloc_debug
:与malloc
相同,但也安装调试钩子。pymalloc_debug
:与pymalloc
相同,但也安装调试钩子。
请参见默认内存分配器和PyMem_SetupDebugHooks()函数(在 Python 内存分配器上安装调试钩子)。
在 3.7 版中进行了更改:添加了"default"
分配器。
3.6 版的新Function。
PYTHONMALLOCSTATS
- 如果设置为非空字符串,则每次创建新的 pymalloc 对象舞台时以及关闭时,Python 都会打印pymalloc 内存分配器的统计信息。
如果使用 PYTHONMALLOC环境变量来强制 C 库的malloc()
分配器,或者如果 Python 配置为不支持pymalloc
,则忽略此变量。
在版本 3.6 中更改:此变量现在也可以在以发布模式编译的 Python 上使用。如果设置为空字符串,则现在无效。
PYTHONLEGACYWINDOWSFSENCODING
- 如果设置为非空字符串,则默认文件系统编码和错误模式将分别恢复为其 3.6 之前的值“ mbcs”和“ replace”。否则,将使用新的默认值'utf-8'和'surrogatepass'。
也可以在运行时使用sys._enablelegacywindowsfsencoding()启用它。
Availability: Windows.
3.6 版的新Function:有关更多详细信息,请参见 PEP 529。
PYTHONLEGACYWINDOWSSTDIO
- 如果设置为非空字符串,则不使用新的控制台读取器和写入器。这意味着 Unicode 字符将根据活动的控制台代码页进行编码,而不是使用 utf-8.
如果将标准流重定向(到文件或管道)而不是引用控制台缓冲区,则忽略此变量。
Availability: Windows.
3.6 版的新Function。
PYTHONCOERCECLOCALE
- 如果设置为值
0
,将导致主 Python 命令行应用程序跳过将基于 ASCII 的旧 C 和 POSIX 语言环境强制转换为Function更强大的基于 UTF-8 的替代方法。
- 如果设置为值
如果未设置此变量(或设置为0
以外的值),则也不会设置LC_ALL
语言环境覆盖环境变量,并且为LC_CTYPE
类别报告的当前语言环境是默认的C
语言环境,否则明确基于 ASCII 的POSIX
语言环境,然后 Python CLI 将try在加载解释器运行时之前按列出的 Sequences 为LC_CTYPE
类别配置以下语言环境:
C.UTF-8
C.utf8
UTF-8
如果成功设置了这些语言环境类别之一,那么在初始化 Python 运行时之前,还将在当前进程环境中相应地设置LC_CTYPE
环境变量。这样可以确保除了解释器本身和运行在同一进程(例如 GNU readline
库)中的其他可识别语言环境的组件都可以看到之外,还可以在子进程中看到更新的设置(无论这些进程是否运行 Python 解释器),以及查询环境而不是查询当前 C 语言环境的操作(例如 Python 自己的locale.getdefaultlocale())。
配置这些语言环境之一(显式或pass上述隐式语言环境强制)自动为和sys.stdout启用surrogateescape
error handler(sys.stderr像在其他任何语言环境中一样 continue 使用backslashreplace
)。可以照常使用 PYTHONIOENCODING覆盖此流处理行为。
出于调试目的,如果激活了语言环境强制,或者在初始化 Python 运行时时仍会激活的语言环境,设置PYTHONCOERCECLOCALE=warn
将导致 Python 在stderr
上发出警告消息。
还要注意,即使禁用了区域设置强制,或者找不到合适的目标区域设置, PYTHONUTF8仍将默认在基于 ASCII 的传统区域设置中激活。必须禁用这两个Function,才能强制解释器将ASCII
而不是UTF-8
用于系统接口。
Availability: *nix.
3.7 版的新Function:有关更多详细信息,请参见 PEP 538。
PYTHONDEVMODE
- 如果此环境变量设置为非空字符串,请启用 CPython“开发模式”。请参阅-X
dev
选项。
- 如果此环境变量设置为非空字符串,请启用 CPython“开发模式”。请参阅-X
3.7 版中的新Function。
PYTHONUTF8
- 如果设置为
1
,则启用解释器的 UTF-8 模式,其中UTF-8
用作系统接口的文本编码,而不管当前的区域设置如何。
- 如果设置为
这意味着:
Note
sys.getfilesystemencoding()返回
'UTF-8'
(忽略区域设置编码)。locale.getpreferredencoding()返回
'UTF-8'
(语言环境编码被忽略,并且函数的do_setlocale
参数无效)。sys.stdin,sys.stdout和sys.stderr都使用 UTF-8 作为其文本编码,同时为sys.stdin和sys.stdout启用了
surrogateescape
error handler((sys.stderrcontinue 使用backslashreplace
,就像在默认的区域设置感知模式下一样)
由于这些较低级别的 API 的更改,其他较高级别的 API 也表现出不同的默认行为:
Note
命令行参数,环境变量和文件名使用 UTF-8 编码解码为文本。
os.fsdecode()和os.fsencode()使用 UTF-8 编码。
open(),io.open()和codecs.open()默认使用 UTF-8 编码。但是,它们仍然默认使用严格的错误处理程序,因此try以文本模式打开二进制文件很可能引发异常,而不是产生无意义的数据。
请注意,UTF-8 模式下的标准流设置可以被 PYTHONIOENCODING覆盖(就像它们可以在默认的区域设置感知模式下一样)。
如果设置为0
,则解释器以其默认的区域设置感知模式运行。
设置任何其他非空字符串会在解释器初始化期间导致错误。
如果根本没有设置此环境变量,那么解释器默认使用当前的语言环境设置,除非当前语言环境被标识为基于 ASCII 的传统语言环境(如 PYTHONCOERCECLOCALE所述),并且禁用了语言环境强制性或失败。在此类传统语言环境中,除非明确指示不启用,否则解释器将默认启用 UTF-8 模式。
也可以作为-X utf8
选项使用。
3.7 版的新Function:有关更多详细信息,请参见 PEP 540。
1.2.1. 调试模式变量
设置这些变量仅在 Python 的调试版本中有效。
PYTHONTHREADDEBUG
- 如果设置,Python 将打印线程调试信息。
需要使用--with-pydebug
build 选项配置 Python。
PYTHONDUMPREFS
- 如果设置了该选项,Python 将在关闭解释器后转储对象并且引用计数仍然有效。
需要使用--with-trace-refs
build 选项配置 Python。