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 。
PYTHONOPTIMIZE¶
这如果被设为一个非空字符串,它就相当于指定 -O 选项。 如果设为一个整数,则它就相当于多次指定 -O。
PYTHONBREAKPOINT¶
此变量如果被设定,它会使用加点号的路径标记一个可调用对象。 包含该可调用对象的模块将被导入,随后该可调用对象将由 sys.breakpointhook() 的默认实现来运行,后者自身将由内置的 breakpoint() 来调用。 如果未设定,或设定为空字符串,则它相当于值 "pdb.set_trace"。 将此变量设为字符串 "0" 会导致 sys.breakpointhook() 的默认实现不做任何事而直接返回。
3.7 版新加入.
PYTHONDEBUG¶
此变量如果被设为一个非空字符串,它就相当于指定 -d 选项。 如果设为一个整数,则它就相当于多次指定 -d。
PYTHONOLDPARSER¶
如果将该选项设为非空字符串,则启用传统的 LL(1) 解析器。
另请参阅 -X oldparser 选项和 PEP 617。
Deprecated since version 3.9, will be removed in version 3.10.
PYTHONINSPECT¶
此变量如果被设为一个非空字符串,它就相当于指定 -i 选项。
此变量也可由 Python 代码使用 os.environ 来修改以在程序终结时强制检查模式。
PYTHONUNBUFFERED¶
此变量如果被设为一个非空字符串,它就相当于指定 -u 选项。
PYTHONVERBOSE¶
此变量如果被设为一个非空字符串,它就相当于指定 -v 选项。 如果设为一个整数,则它就相当于多次指定 -v。
PYTHONCASEOK¶
如果设置此变量,Python 将忽略 import 语句中的大小写。 这仅在 Windows 和 OS X 上有效。
PYTHONDONTWRITEBYTECODE¶
此变量如果被设为一个非空字符串,Python 将不会尝试在导入源模块时写入 .pyc 文件。 这相当于指定 -B 选项。
PYTHONPYCACHEPREFIX¶
如果设置了此选项,Python将在镜像目录树中的此路径中写入 .pyc 文件,而不是源树中的 __pycache__ 目录中。这相当于指定 -X pycache_prefix=PATH 选项。
3.8 版新加入.
PYTHONHASHSEED¶
如果此变量未设置或设为 random,将使用一个随机值作为 str 和 bytes 对象哈希运算的种子。
如果 PYTHONHASHSEED 被设为一个整数值,它将被作为固定的种子数用来生成哈希随机化所涵盖的类型的 hash() 结果。
它的目的是允许可复现的哈希运算,例如用于解释器本身的自我检测,或允许一组 python 进程共享哈希值。
该整数必须为一个 [0,4294967295] 范围内的十进制数。 指定数值 0 将禁用哈希随机化。
3.2.3 版新加入.
PYTHONIOENCODING¶
如果此变量在运行解释器之前被设置,它会覆盖通过 encodingname:errorhandler 语法设置的 stdin/stdout/stderr 所用编码。 encodingname 和 :errorhandler 部分都是可选项,与在 str.encode() 中的含义相同。
对于 stderr,:errorhandler 部分会被忽略;处理程序将总是为 'backslashreplace'。
3.4 版更變:“encodingname” 部分现在是可选的。
3.6 版更變:在 Windows 上,对于交互式控制台缓冲区会忽略此变量所指定的编码,除非还指定了 PYTHONLEGACYWINDOWSSTDIO。 通过标准流重定向的文件和管道则不受其影响。
PYTHONNOUSERSITE¶
也參考
PEP 370 -- 分用户的 site-packages 目录
PYTHONUSERBASE¶
定义 用户基准目录,它会在执行 python setup.py install --user 时被用来计算 用户 site-packages 目录 的路径以及 Distutils 安装路径。
也參考
PEP 370 -- 分用户的 site-packages 目录
PYTHONEXECUTABLE¶
如果设置了此环境变量,则 sys.argv[0] 将被设为此变量的值而不是通过 C 运行时所获得的值。 仅在 Mac OS X 上起作用。
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 版新加入.
PYTHONASYNCIODEBUG¶
如果此变量被设为一个非空字符串,则会启用 asyncio 模块的 调试模式。
3.4 版新加入.
PYTHONMALLOC¶
设置 Python 内存分配器和/或安装调试钩子。
设置 Python 所使用的内存分配器族群:
安装调试钩子:
debug: 在 默认内存分配器 之上安装调试钩子。
malloc_debug: 与 malloc 相同但还会安装调试钩子。
pymalloc_debug: 与 pymalloc 相同但还会安装调试钩子。
请参阅 默认内存分配器 以及 PyMem_SetupDebugHooks() 函数(在 Python 内存分配器之上安装调试钩子)。
3.7 版更變:增加了 "default" 分配器。
3.6 版新加入.
PYTHONMALLOCSTATS¶
如果设为一个非空字符串,Python 将在每次创建新的 pymalloc 对象区域以及在关闭时打印 pymalloc 内存分配器 的统计信息。
如果 PYTHONMALLOC 环境变量被用来强制开启 C 库的 malloc() 分配器,或者如果 Python 的配置不支持 pymalloc,则此变量将被忽略。
3.6 版更變:此变量现在也可以被用于在发布模式下编译的 Python。 如果它被设置为一个空字符串则将没有任何效果。
PYTHONLEGACYWINDOWSFSENCODING¶
如果设为一个非空字符串,则默认的文件系统编码和错误模式将分别恢复为它们在 3.6 版之前的值 'mbcs' 和 'replace'。 否则会使用新的默认值 'utf-8' 和 'surrogatepass'。
可用性: 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¶
如果设为 1,则会启用解释器的 UTF-8 模式,将 UTF-8 用作系统接口的文本编码,无论当前区域选项如何设置。
这意味着:
locale.getpreferredencoding() 将返回 'UTF-8' (本地编码会被忽略,并且该函数的 do_setlocale 参数不起作用)。
sys.stdin, sys.stdout 和 sys.stderr 都将 UTF-8 用作它们的文本编码,并且为 sys.stdin 和 sys.stdout 启用 surrogateescape 错误处理句柄 (sys.stderr 会继续使用 backslashreplace 如同在默认的局部感知模式下一样)
作为低层级 API 发生改变的结果,其他高层级 API 也会表现出不同的默认行为:
命令行参数,环境变量和文件名会使用 UTF-8 编码来解码为文本。
open(), io.open() 和 codecs.open() 默认会使用 UTF-8 编码。 但是,它们默认仍将使用严格错误处理句柄,因此试图在文本模式下打开二进制文件将可能引发异常,而不是生成无意义的数据。
请注意 UTF-8 模式下的标准流设置可以被 PYTHONIOENCODING 所覆盖(在默认的区域感知模式下也同样如此)。
如果设置为“0”,则解释器以其默认的区域识别模式运行。
设置任何其他非空字符串会在解释器初始化期间导致错误。
如果根本未设置此环境变量,则解释器默认使用当前区域设置,除非 当前区域被标识为基于 ASCII 的旧式区域设置(如 PYTHONCOERCECLOCALE 所述),并且区域强制转换被禁用或失败。 在此类旧式区域设置中,解释器将默认启用 UTF-8 模式,除非显式地指定不这样做。
也可以使用 -X utf8 选项。
3.7 版新加入:有关更多详细信息,请参阅 PEP 540 。
1.2.1.调试模式变量¶
设置这些变量只会在Python的调试版本中产生影响。
PYTHONTHREADDEBUG¶
如果设置,Python将打印线程调试信息。
需要使用 --with-pydebug 构建选项配置Python。
PYTHONDUMPREFS¶
如果设置,Python在关闭解释器,及转储对象和引用计数后仍将保持活动。
需要使用 --with-trace-refs 构建选项配置Python。