1. 命令行與環(huán)境?
為獲取各種設置信息,CPython 解析器會(huì )掃描命令行與環(huán)境。
CPython implementation detail: 其他實(shí)現的命令行方案可能會(huì )有所不同。 詳見(jiàn) 其他實(shí)現。
1.1. 命令行?
調用 Python 時(shí),可以指定下列任意選項:
python [-bBdEhiIOqsSuvVWx?] [-c command | -m module-name | script | - ] [args]
最常見(jiàn)的用例是啟動(dòng)時(shí)執行腳本:
python myscript.py
1.1.1. 接口選項?
解釋器接口類(lèi)似于 UNIX shell,但提供了額外的調用方法:
用連接到 tty 設備的標準輸入調用時(shí),會(huì )提示輸入并執行命令,輸入 EOF (文件結束符,UNIX 中按 Ctrl-D,Windows 中按 Ctrl-Z, Enter)時(shí)終止。
用文件名參數或以標準輸入文件調用時(shí),讀取,并執行該腳本文件。
用目錄名參數調用時(shí),從該目錄讀取、執行適當名稱(chēng)的腳本。
用
-c command
調用時(shí),執行 command 表示的 Python 語(yǔ)句。command 可以包含用換行符分隔的多條語(yǔ)句。注意,前導空白字符在 Python 語(yǔ)句中非常重要!用
-m module-name
調用時(shí),在 Python 模塊路徑中查找指定的模塊,并將其作為腳本執行。
非交互模式下,先解析全部輸入,再執行。
接口選項會(huì )終結解釋器讀入的選項列表,所有后續參數都在 sys.argv
里 -- 注意,首個(gè)元素,即下標為零的元素(sys.argv[0]
)是表示程序來(lái)源的字符串。
- -c <command>?
執行 command 中的 Python 代碼。command 可以是一條語(yǔ)句,也可以是用換行符分隔的多條語(yǔ)句,其中,前導空白字符與普通模塊代碼中的作用一樣。
使用此選項時(shí),
sys.argv
的首個(gè)元素為"-c"
,并會(huì )把當前目錄加入至sys.path
開(kāi)頭(讓該目錄中的模塊作為頂層模塊導入)。使用
command
參數會(huì )引發(fā) 審計事件cpython.run_command
。
- -m <module-name>?
在
sys.path
中搜索指定模塊,并以__main__
模塊執行其內容。該參數是 模塊名,請勿輸入文件擴展名(
.py
)。模塊名應為有效的絕對 Python 模塊名,但本實(shí)現對此不作強制要求(例如,允許使用含連字符-
的名稱(chēng))。包名稱(chēng)(包括命名空間包)也允許使用。使用包名稱(chēng)而不是普通模塊名時(shí),解釋器把
<pkg>.__main__
作為主模塊執行。此行為特意被設計為與作為腳本參數傳遞給解釋器的目錄和 zip 文件的處理方式類(lèi)似。備注
此選項不適用于內置模塊和以 C 編寫(xiě)的擴展模塊,因為它們并沒(méi)有對應的 Python 模塊文件。 但是它仍然適用于預編譯的模塊,即使沒(méi)有可用的初始源文件。
如果給出此選項,
sys.argv
的首個(gè)元素將為模塊文件的完整路徑 (在定位模塊文件期間,首個(gè)元素將設為"-m"
)。 與-c
選項一樣,當前目錄將被加入sys.path
的開(kāi)頭。-I
選項可用來(lái)在隔離模式下運行腳本,此模式中sys.path
既不包含當前目錄也不包含用戶(hù)的 site-packages 目錄。 所有PYTHON*
環(huán)境變量也會(huì )被忽略。許多標準庫模塊都包含在執行時(shí),以腳本方式調用的代碼。例如
timeit
模塊:python -m timeit -s 'setup here' 'benchmarked code here' python -m timeit -h # for details
使用
module-name
參數會(huì )引發(fā) 審計事件cpython.run_module
。在 3.1 版更改: 提供包名稱(chēng)來(lái)運行
__main__
子模塊。在 3.4 版更改: 同樣支持命名空間包
- -
從標準輸入 (
sys.stdin
) 讀取命令。標準輸入為終端時(shí),使用-i
。使用此選項時(shí),
sys.argv
的第一個(gè)元素是"-"
, 同時(shí),把當前目錄加入sys.path
開(kāi)頭。沒(méi)有參數時(shí),會(huì )觸發(fā) 審計事件
cpython.run_stdin
。
- <script>
執行 script 中的 Python 代碼,該參數應為(絕對或相對)文件系統路徑,指向 Python 文件、包含
__main__.py
文件的目錄,或包含__main__.py
文件的 zip 文件。給出此選項時(shí),
sys.argv
的第一個(gè)元素就是在命令行中指定的腳本名稱(chēng)。如果腳本名稱(chēng)直接指向 Python 文件,則把該文件所在目錄加入
sys.path
的開(kāi)頭,并且把該文件當作__main__
模塊來(lái)執行。如果腳本名稱(chēng)指向目錄或 zip 文件,則把腳本名加入
sys.path
的開(kāi)頭,并把該位置中的__main__.py
文件當作__main__
模塊來(lái)執行。-I
選項以隔離模式運行腳本,此模式中,sys.path
既不包含腳本目錄,也不包含用戶(hù)的 site-packages 目錄,還會(huì )忽略所有PYTHON*
環(huán)境變量。使用
filename
參數會(huì )引發(fā) 審計事件cpython.run_file
。參見(jiàn)
runpy.run_path()
Python 代碼可以直接使用的等效功能
未給出接口選項時(shí),使用 -i
,sys.argv[0]
為空字符串 (""
),并把當前目錄加至 sys.path
的開(kāi)頭。 此外,如果系統支持,還能自動(dòng)啟用 tab 補全和歷史編輯(參見(jiàn) Readline 配置)。
參見(jiàn)
在 3.4 版更改: 自動(dòng)啟用 tab 補全和歷史編輯。
1.1.2. 通用選項?
1.1.3. 其他選項?
- -b?
用
str
與bytes
或bytearray
對比, 或對比bytes
與int
時(shí),會(huì )發(fā)出警告。重復給出該選項(-bb
)時(shí)會(huì )報錯。
- -B?
給出此選項時(shí),Python 不在導入源模塊時(shí)寫(xiě)入
.pyc
文件。另請參閱PYTHONDONTWRITEBYTECODE
。
- --check-hash-based-pycs default|always|never?
控制基于哈希值的
.pyc
文件的驗證行為。 參見(jiàn) 已緩存字節碼的失效。 當設為default
時(shí),已選定和未選定的基于哈希值的字節碼緩存文件將根據其默認語(yǔ)義進(jìn)行驗證。 當設為always
時(shí),所有基于哈希值的.pyc
文件,不論是已選定還是未選定的都將根據其對應的源文件進(jìn)行驗證。 當設為never
時(shí),基于哈希值的.pyc
文件將不會(huì )根據其對應的源文件進(jìn)行驗證。基于時(shí)間戳的
.pyc
文件的語(yǔ)義不會(huì )受此選項影響。
- -d?
Turn on parser debugging output (for expert only). See also the
PYTHONDEBUG
environment variable.This option requires a debug build of Python, otherwise it's ignored.
- -E?
忽略所有
PYTHON*
環(huán)境變量,例如,已設置的PYTHONPATH
和PYTHONHOME
。
- -i?
腳本是第一個(gè)參數,或使用
-c
時(shí),即便sys.stdin
不是終端,執行腳本或命令后,也會(huì )進(jìn)入交互模式。不讀取PYTHONSTARTUP
文件。本選項用于,腳本觸發(fā)異常時(shí),檢查全局變量或堆?;厮?。 詳見(jiàn)
PYTHONINSPECT
。
- -I?
Run Python in isolated mode. This also implies
-E
,-P
and-s
options.In isolated mode
sys.path
contains neither the script's directory nor the user's site-packages directory. AllPYTHON*
environment variables are ignored, too. Further restrictions may be imposed to prevent the user from injecting malicious code.3.4 新版功能.
- -O?
移除 assert 語(yǔ)句以及任何以
__debug__
的值作為條件的代碼。 通過(guò)在.pyc
擴展名之前添加.opt-1
來(lái)擴充已編譯文件 (bytecode) 的文件名 (參見(jiàn) PEP 488)。 另請參閱PYTHONOPTIMIZE
。在 3.5 版更改: 依據 PEP 488 修改
.pyc
文件名。
- -OO?
在啟用
-O
的同時(shí)丟棄文檔字符串。 通過(guò)在.pyc
擴展名之前添加.opt-2
來(lái)擴展已編譯文件 (bytecode) 的文件名 (參見(jiàn) PEP 488)。在 3.5 版更改: 依據 PEP 488 修改
.pyc
文件名。
- -P?
Don't prepend a potentially unsafe path to
sys.path
:python -m module
command line: Don't prepend the current working directory.python script.py
command line: Don't prepend the script's directory. If it's a symbolic link, resolve symbolic links.python -c code
andpython
(REPL) command lines: Don't prepend an empty string, which means the current working directory.
See also the
PYTHONSAFEPATH
environment variable, and-E
and-I
(isolated) options.3.11 新版功能.
- -q?
即使在交互模式下也不顯示版權和版本信息。
3.2 新版功能.
- -R?
開(kāi)啟哈希隨機化。 此選項權
PYTHONHASHSEED
環(huán)境變量設置為0
時(shí)起作用,因為哈希隨機化是默認啟用的。在Python的早期版本中,此選項啟用哈希隨機化,將 str 和 bytes 的對象
__hash__()
的值 "加鹽" 為不可預測的隨機值。雖然它們在單個(gè)Python進(jìn)程中保持不變,但是在重復調用的Python進(jìn)程之間它們是不可預測的。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
允許你為哈希種子密碼設置一個(gè)固定值。在 3.7 版更改: 此選項不會(huì )再被忽略。
3.2.3 新版功能.
- -s?
不要將
用戶(hù) site-packages 目錄
添加到sys.path
。參見(jiàn)
PEP 370 -- 分用戶(hù)的 site-packages 目錄
- -S?
禁用
site
的導入及其所附帶的基于站點(diǎn)對sys.path
的操作。 如果site
會(huì )在稍后被顯式地導入也會(huì )禁用這些操作 (如果你希望觸發(fā)它們則應調用site.main()
)。
- -u?
強制 stdout 和 stderr 流不使用緩沖。 此選項對 stdin 流無(wú)影響。
另請參閱
PYTHONUNBUFFERED
。在 3.7 版更改: stdout 和 stderr 流在文本層現在不使用緩沖。
- -v?
每次在初始化模塊時(shí)會(huì )打印一條信息,顯示被加載的地方(文件名或內置模塊名)。當給出兩個(gè)v(
-vv
)時(shí),搜索模塊時(shí)會(huì )為每個(gè)文件打印一條信息。退出時(shí)模塊清理的信息也會(huì )給出來(lái)。在 3.10 版更改: 由
site
模塊可以得到將要處理的站點(diǎn)路徑和.pth
文件。參閱
PYTHONVERBOSE
。
- -W arg?
警告信息的控制。Python 的警告機制默認將警告信息打印到
sys.stderr
。最簡(jiǎn)單的設置是將某個(gè)特定操作無(wú)條件地應用于進(jìn)程所發(fā)出所有警告 (即使是在默認情況下會(huì )忽略的那些警告):
-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
action 名可以根據需要進(jìn)行縮寫(xiě),解釋器將會(huì )解析為合適的名稱(chēng)。例如,
-Wi
與-Wignore
相同。完整的參數如下:
action:message:category:module:lineno
空字段匹配所有值;尾部的空字段可以省略。例如,
-W ignore::DeprecationWarning
將忽略所有的 DeprecationWarning 警告。action 字段如上所述,但只適用于匹配其余字段的警告。
message 字段必須與整個(gè)警告信息相匹配;不區分大小寫(xiě)。
category 字段與警告類(lèi)別相匹配(
DeprecationWarning
等)。必須是個(gè)類(lèi)名;檢測消息的實(shí)際警告類(lèi)別是否為指定類(lèi)別的子類(lèi)。module 字段匹配的是(完全限定)模塊名;區分大小寫(xiě)。
lineno 字段匹配行號,其中 0 匹配所有行號,相當于省略了行號。
可以給出多個(gè)
-W
選項;當某條警告信息匹配上多個(gè)選項時(shí),將執行最后一個(gè)匹配項的操作。非法-W
選項將被忽略(不過(guò),在觸發(fā)第一條警告時(shí),會(huì )打印出一條無(wú)效選項的警告信息)。警告信息還可以用
PYTHONWARNINGS
環(huán)境變量來(lái)控制,也可以在 Python 程序中用warnings
模塊進(jìn)行控制。例如,warnings.filterwarnings()
函數可對警告信息使用正則表達式。請參閱 警告過(guò)濾器 和 警告過(guò)濾器的介紹 了解更多細節。
- -x?
跳過(guò)源中第一行,以允許使用非 Unix 形式的
#!cmd
。 這適用于 DOS 專(zhuān)屬的破解操作。
- -X?
保留用于各種具體實(shí)現專(zhuān)屬的選項。 CPython 目前定義了下列可用的值:
-X faulthandler
啟用faulthandler
;-X showrefcount
可在程序結束時(shí)或在交互式解釋器每條語(yǔ)句后,輸出總的引用計數和使用的內存塊數。這只適用于 調試版本。-X tracemalloc
使用tracemalloc
模塊啟動(dòng)對 Python 內存分配的跟蹤。 默認情況下,只有最近的幀會(huì )保存在跟蹤的回溯信息中。 使用-X tracemalloc=NFRAME
以啟動(dòng)限定回溯 NFRAME 幀的跟蹤。 請參閱tracemalloc.start()
了解詳情。-X importtime
顯示每次導入耗費的時(shí)間。 它會(huì )顯示模塊名稱(chēng),累計時(shí)間(包括嵌套的導入)和自身時(shí)間(排除嵌套的導入)。 請注意它的輸出在多線(xiàn)程應用程序中可能會(huì )出錯。 典型用法如python3 -X importtime -c 'import asyncio'
。 另請參閱PYTHONPROFILEIMPORTTIME
。-X dev
: 啟用 Python 開(kāi)發(fā)模式,引入在默認情況下啟用會(huì )導致開(kāi)銷(xiāo)過(guò)大的運行時(shí)檢查。-X utf8
啟用 Python UTF-8 模式。-X utf8=0
顯式禁用 Python UTF-8 模式 (即便已自動(dòng)啟用)。-X pycache_prefix=PATH
允許將.pyc
文件寫(xiě)入以給定目錄為根的并行樹(shù),而不是代碼樹(shù)。另見(jiàn)PYTHONPYCACHEPREFIX
。-X warn_default_encoding
issues aEncodingWarning
when the locale-specific default encoding is used for opening files. See alsoPYTHONWARNDEFAULTENCODING
.-X no_debug_ranges
disables the inclusion of the tables mapping extra location information (end line, start column offset and end column offset) to every instruction in code objects. This is useful when smaller code objects and pyc files are desired as well as suppressing the extra visual location indicators when the interpreter displays tracebacks. See alsoPYTHONNODEBUGRANGES
.-X frozen_modules
determines whether or not frozen modules are ignored by the import machinery. A value of "on" means they get imported and "off" means they are ignored. The default is "on" if this is an installed Python (the normal case). If it's under development (running from the source tree) then the default is "off". Note that the "importlib_bootstrap" and "importlib_bootstrap_external" frozen modules are always used, even if this flag is set to "off".
它還允許傳入任意值并通過(guò)
sys._xoptions
字典來(lái)提取這些值。在 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
選項,在字符串編碼和解碼操作時(shí)檢查 encoding 和 errors 參數。The
-X showalloccount
選項已被移除。3.10 新版功能:
-X warn_default_encoding
選項。Deprecated since version 3.9, removed in version 3.10: The
-X oldparser
option.3.11 新版功能: The
-X no_debug_ranges
option.3.11 新版功能: The
-X frozen_modules
option.
1.1.4. 不應當使用的選項?
1.2. 環(huán)境變量?
這些環(huán)境變量會(huì )影響 Python 的行為,它們是在命令行開(kāi)關(guān)之前被處理的,但 -E 或 -I 除外。 根據約定,當存在沖突時(shí)命令行開(kāi)關(guān)會(huì )覆蓋環(huán)境變量的設置。
- PYTHONHOME?
更改標準 Python 庫的位置。 默認情況下庫是在
prefix/lib/pythonversion
和exec_prefix/lib/pythonversion
中搜索,其中prefix
和exec_prefix
是由安裝位置確定的目錄,默認都位于/usr/local
。當
PYTHONHOME
被設為單個(gè)目錄時(shí),它的值會(huì )同時(shí)替代prefix
和exec_prefix
。 要為兩者指定不同的值,請將PYTHONHOME
設為prefix:exec_prefix
。
- PYTHONPATH?
增加模塊文件默認搜索路徑。 所用格式與終端的
PATH
相同:一個(gè)或多個(gè)由os.pathsep
分隔的目錄路徑名稱(chēng)(例如 Unix 上用冒號而在 Windows 上用分號)。 默認忽略不存在的目錄。除了普通目錄之外,單個(gè)
PYTHONPATH
條目可以引用包含純Python模塊的zip文件(源代碼或編譯形式)。無(wú)法從zip文件導入擴展模塊。默認索引路徑依賴(lài)于安裝路徑,但通常都是以
prefix/lib/pythonversion
開(kāi)始 (參見(jiàn)上文中的PYTHONHOME
)。 它 總是 會(huì )被添加到PYTHONPATH
。有一個(gè)附加目錄將被插入到索引路徑的
PYTHONPATH
之前,正如上文中 接口選項 所描述的。 搜索路徑可以在 Python 程序內作為變量sys.path
來(lái)進(jìn)行操作。
- PYTHONSAFEPATH?
If this is set to a non-empty string, don't prepend a potentially unsafe path to
sys.path
: see the-P
option for details.3.11 新版功能.
- PYTHONPLATLIBDIR?
如果它被設為非空字符串,則會(huì )覆蓋
sys.platlibdir
值。3.9 新版功能.
- PYTHONSTARTUP?
這如果是一個(gè)可讀文件的名稱(chēng),該文件中的 Python 命令會(huì )在交互模式的首個(gè)提示符顯示之前被執行。 該文件會(huì )在與交互式命令執行所在的同一命名空間中被執行,因此其中所定義或導入的對象可以在交互式會(huì )話(huà)中無(wú)限制地使用。 你還可以在這個(gè)文件中修改提示符
sys.ps1
和sys.ps2
以及鉤子sys.__interactivehook__
。使用
filename
參數會(huì )引發(fā) 審計事件cpython.run_startup
。
- PYTHONBREAKPOINT?
此變量如果被設定,它會(huì )使用加點(diǎn)號的路徑標記一個(gè)可調用對象。 包含該可調用對象的模塊將被導入,隨后該可調用對象將由
sys.breakpointhook()
的默認實(shí)現來(lái)運行,后者自身將由內置的breakpoint()
來(lái)調用。 如果未設定,或設定為空字符串,則它相當于值 "pdb.set_trace"。 將此變量設為字符串 "0" 會(huì )導致sys.breakpointhook()
的默認實(shí)現不做任何事而直接返回。3.7 新版功能.
- PYTHONDEBUG?
此變量如果被設為一個(gè)非空字符串,它就相當于指定
-d
選項。 如果設為一個(gè)整數,則它就相當于多次指定-d
。This environment variable requires a debug build of Python, otherwise it's ignored.
- PYTHONINSPECT?
此變量如果被設為一個(gè)非空字符串,它就相當于指定
-i
選項。此變量也可由 Python 代碼使用
os.environ
來(lái)修改以在程序終結時(shí)強制檢查模式。
- PYTHONCASEOK?
If this is set, Python ignores case in
import
statements. This only works on Windows and macOS.
- PYTHONDONTWRITEBYTECODE?
此變量如果被設為一個(gè)非空字符串,Python 將不會(huì )嘗試在導入源模塊時(shí)寫(xiě)入
.pyc
文件。 這相當于指定-B
選項。
- PYTHONPYCACHEPREFIX?
如果設置了此選項,Python將在鏡像目錄樹(shù)中的此路徑中寫(xiě)入
.pyc
文件,而不是源樹(shù)中的__pycache__
目錄中。這相當于指定-X
pycache_prefix=PATH
選項。3.8 新版功能.
- PYTHONHASHSEED?
如果此變量未設置或設為
random
,將使用一個(gè)隨機值作為 str 和 bytes 對象哈希運算的種子。如果
PYTHONHASHSEED
被設為一個(gè)整數值,它將被作為固定的種子數用來(lái)生成哈希隨機化所涵蓋的類(lèi)型的 hash() 結果。它的目的是允許可復現的哈希運算,例如用于解釋器本身的自我檢測,或允許一組 python 進(jìn)程共享哈希值。
該整數必須為一個(gè) [0,4294967295] 范圍內的十進(jìn)制數。 指定數值 0 將禁用哈希隨機化。
3.2.3 新版功能.
- PYTHONIOENCODING?
如果此變量在運行解釋器之前被設置,它會(huì )覆蓋通過(guò)
encodingname:errorhandler
語(yǔ)法設置的 stdin/stdout/stderr 所用編碼。encodingname
和:errorhandler
部分都是可選項,與在str.encode()
中的含義相同。對于 stderr,
:errorhandler
部分會(huì )被忽略;處理程序將總是為'backslashreplace'
。在 3.4 版更改: “encodingname” 部分現在是可選的。
在 3.6 版更改: 在 Windows 上,對于交互式控制臺緩沖區會(huì )忽略此變量所指定的編碼,除非還指定了
PYTHONLEGACYWINDOWSSTDIO
。 通過(guò)標準流重定向的文件和管道則不受其影響。
- PYTHONNOUSERSITE?
如果設置了此變量,Python 將不會(huì )把
用戶(hù) site-packages 目錄
添加到sys.path
。參見(jiàn)
PEP 370 -- 分用戶(hù)的 site-packages 目錄
- PYTHONUSERBASE?
定義
用戶(hù)基準目錄
,它會(huì )在執行python setup.py install --user
時(shí)被用來(lái)計算用戶(hù) site-packages 目錄
的路徑以及 Distutils 安裝路徑。參見(jiàn)
PEP 370 -- 分用戶(hù)的 site-packages 目錄
- PYTHONEXECUTABLE?
If this environment variable is set,
sys.argv[0]
will be set to its value instead of the value got through the C runtime. Only works on macOS.
- PYTHONWARNINGS?
此變量等價(jià)于
-W
選項。 如果被設為一個(gè)以逗號分隔的字符串,它就相當于多次指定-W
,列表中后出現的過(guò)濾器優(yōu)先級會(huì )高于列表中先出現的。最簡(jiǎn)單的設置是將某個(gè)特定操作無(wú)條件地應用于進(jìn)程所發(fā)出所有警告 (即使是在默認情況下會(huì )忽略的那些警告):
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
請參閱 警告過(guò)濾器 和 警告過(guò)濾器的介紹 了解更多細節。
- PYTHONFAULTHANDLER?
如果此環(huán)境變量被設為一個(gè)非空字符串,
faulthandler.enable()
會(huì )在啟動(dòng)時(shí)被調用:為SIGSEGV
,SIGFPE
,SIGABRT
,SIGBUS
和SIGILL
等信號安裝一個(gè)處理句柄以轉儲 Python 回溯信息。 此變量等價(jià)于-X
faulthandler
選項。3.3 新版功能.
- PYTHONTRACEMALLOC?
如果此環(huán)境變量被設為一個(gè)非空字符串,則會(huì )使用
tracemalloc
模塊啟動(dòng)對 Python 內存分配的跟蹤。 該變量的值是保存于跟蹤的回溯信息中的最大幀數。 例如,PYTHONTRACEMALLOC=1
只保存最近的幀。 請參閱tracemalloc.start()
了解詳情。3.4 新版功能.
- PYTHONPROFILEIMPORTTIME?
如果此變量被設為一個(gè)非空字符串,Python 將顯示每次導入花費了多長(cháng)時(shí)間。 此變量完全等價(jià)于在命令行為設置
-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()
函數。
安裝 調試鉤子 :
debug
: 在 默認內存分配器 之上安裝調試鉤子。malloc_debug
: 與malloc
相同但還會(huì )安裝調試鉤子。pymalloc_debug
: 與pymalloc
相同但還會(huì )安裝調試鉤子。
在 3.7 版更改: 增加了
"default"
分配器。3.6 新版功能.
- PYTHONMALLOCSTATS?
如果設為一個(gè)非空字符串,Python 將在每次創(chuàng )建新的 pymalloc 對象區域以及在關(guān)閉時(shí)打印 pymalloc 內存分配器 的統計信息。
如果
PYTHONMALLOC
環(huán)境變量被用來(lái)強制開(kāi)啟 C 庫的malloc()
分配器,或者如果 Python 的配置不支持pymalloc
,則此變量將被忽略。在 3.6 版更改: 此變量現在也可以被用于在發(fā)布模式下編譯的 Python。 如果它被設置為一個(gè)空字符串則將沒(méi)有任何效果。
- PYTHONLEGACYWINDOWSFSENCODING?
如果設為非空字符串,默認的 filesystem encoding and error handler 模式將恢復到 3.6 版本之前的值 “mbcs”和“replace”。 否則,將采用新的默認值“utf-8”和“surrogatepass”。
這也可以在運行時(shí)通過(guò)
sys._enablelegacywindowsfsencoding()
來(lái)啟用。可用性: Windows。
3.6 新版功能: 更多詳情請參閱 PEP 529。
- PYTHONLEGACYWINDOWSSTDIO?
如果設為一個(gè)非空字符串,則不使用新的控制臺讀取器和寫(xiě)入器。 這意味著(zhù) Unicode 字符將根據活動(dòng)控制臺的代碼頁(yè)進(jìn)行編碼,而不是使用 utf-8。
如果標準流被重定向(到文件或管道)而不是指向控制臺緩沖區則該變量會(huì )被忽略。
可用性: Windows。
3.6 新版功能.
- PYTHONCOERCECLOCALE?
如果值設為
0
,將導致主 Python 命令行應用跳過(guò)將傳統的基于 ASCII 的 C 與 POSIX 區域設置強制轉換為更強大的基于 UTF-8 的替代方案。如果此變量 未被 設置(或被設為
0
以外的值),則覆蓋環(huán)境變量的LC_ALL
區域選項也不會(huì )被設置,并且報告給LC_CTYPE
類(lèi)別的當前區域選項或者為默認的C
區域,或者為顯式指明的基于 ASCII 的POSIX
區域,然后 Python CLI 將在加載解釋器運行時(shí)之前嘗試為LC_CTYPE
類(lèi)別按指定的順序配置下列區域選項:C.UTF-8
C.utf8
UTF-8
如果成功設置了以上區域類(lèi)別中的一個(gè),則初始化 Python 運行時(shí)之前也將在當前進(jìn)程環(huán)境中相應地設置
LC_CTYPE
環(huán)境變量。 這會(huì )確保除了解釋器本身和運行于同一進(jìn)程中的其他可感知區域選項的組件 (例如 GNUreadline
庫) 之外,還能在子進(jìn)程 (無(wú)論這些進(jìn)程是否在運行 Python 解釋器) 以及在查詢(xún)環(huán)境而非當前 C 區域的操作 (例如 Python 自己的locale.getdefaultlocale()
) 中看到更新的設置。(顯式地或通過(guò)上述的隱式區域強制轉換) 配置其中一個(gè)區域選項將自動(dòng)為
sys.stdin
和sys.stdout
啟用surrogateescape
錯誤處理句柄 (sys.stderr
會(huì )繼續使用backslashreplace
如同在任何其他區域選項中一樣)。 這種流處理行為可以按通常方式使用PYTHONIOENCODING
來(lái)覆蓋。出于調試目的,如果激活了區域強制轉換,或者如果當 Python 運行時(shí)被初始化時(shí)某個(gè) 應該 觸發(fā)強制轉換的區域選項仍處于激活狀態(tài)則設置
PYTHONCOERCECLOCALE=warn
將導致 Python 在stderr
上發(fā)出警告消息。還要注意,即使在區域轉換轉換被禁用,或者在其無(wú)法找到合適的目標區域時(shí),默認
PYTHONUTF8
仍將在傳統的基于 ASCII 的區域中被激活。 必須同時(shí)禁用這兩項特性以強制解釋器使用ASCII
而不是UTF-8
作為系統接口。可用性: *nix。
3.7 新版功能: 請參閱 PEP 538 了解詳情。
- PYTHONDEVMODE?
如果將此環(huán)境變量設為非空字符串,則啟用 Python 開(kāi)發(fā)模式,引入在默認情況下啟用會(huì )導致開(kāi)銷(xiāo)過(guò)大的運行時(shí)檢查。
3.7 新版功能.
- PYTHONUTF8?
如果設為
1
,將會(huì )啟用 Python UTF-8 模式。若設為
0
,則會(huì )禁用 Python UTF-8 模式 。設置任何其他非空字符串會(huì )在解釋器初始化期間導致錯誤。
3.7 新版功能.
- PYTHONWARNDEFAULTENCODING?
如果該環(huán)境變量設為一個(gè)非空字符串,則在采用某地區默認編碼時(shí),將會(huì )引發(fā)一條
EncodingWarning
。請參閱 選擇性的 EncodingWarning 來(lái)了解詳情。
3.10 新版功能.
- PYTHONNODEBUGRANGES?
If this variable is set, it disables the inclusion of the tables mapping extra location information (end line, start column offset and end column offset) to every instruction in code objects. This is useful when smaller code objects and pyc files are desired as well as suppressing the extra visual location indicators when the interpreter displays tracebacks.
3.11 新版功能.
1.2.1. 調試模式變量?
- PYTHONDUMPREFS?
如果設置,Python在關(guān)閉解釋器,及轉儲對象和引用計數后仍將保持活動(dòng)。
需用
--with-trace-refs
編譯選項來(lái)配置 Python。
- PYTHONDUMPREFSFILE=FILENAME?
If set, Python will dump objects and reference counts still alive after shutting down the interpreter into a file called FILENAME.
需用
--with-trace-refs
編譯選項來(lái)配置 Python。3.11 新版功能.