IDLE¶
原始碼: Lib/idlelib/
IDLE 是 Python 的整合開發和學習環境。
IDLE 具有以下功能
跨平臺:在 Windows、Unix 和 macOS 上大致相同
Python Shell 視窗(互動式直譯器),具有程式碼輸入、輸出和錯誤訊息的著色
多視窗文字編輯器,具有多次撤銷、Python 著色、智慧縮排、呼叫提示、自動補全和其他功能
在任何視窗中搜索,在編輯器視窗中替換,以及搜尋多個檔案 (grep)
具有持久斷點、單步執行以及檢視全域性和本地名稱空間的偵錯程式
配置、瀏覽器和其他對話方塊
啟動和程式碼執行¶
使用 -s
選項啟動時,IDLE 將執行環境變數 IDLESTARTUP
或 PYTHONSTARTUP
引用的檔案。IDLE 首先檢查 IDLESTARTUP
;如果存在 IDLESTARTUP
,則執行引用的檔案。如果不存在 IDLESTARTUP
,則 IDLE 檢查 PYTHONSTARTUP
。這些環境變數引用的檔案是儲存 IDLE Shell 中經常使用的函式或執行匯入常用模組的匯入語句的便捷位置。
此外,如果存在,Tk
也會載入一個啟動檔案。請注意,Tk 檔案是無條件載入的。此附加檔案為 .Idle.py
,並在使用者的主目錄中查詢。此檔案中的語句將在 Tk 名稱空間中執行,因此此檔案對於匯入要從 IDLE 的 Python Shell 中使用的函式沒有用。
命令列用法¶
idle.py [-c command] [-d] [-e] [-h] [-i] [-r file] [-s] [-t title] [-] [arg] ...
-c command run command in the shell window
-d enable debugger and open shell window
-e open editor window
-h print help message with legal combinations and exit
-i open shell window
-r file run file in shell window
-s run $IDLESTARTUP or $PYTHONSTARTUP first, in shell window
-t title set title of shell window
- run stdin in shell (- must be last option before args)
如果有引數
如果使用
-
、-c
或r
,則所有引數都放置在sys.argv[1:...]
中,並且sys.argv[0]
設定為''
、'-c'
或'-r'
。即使在“選項”對話方塊中設定了預設值,也不會開啟編輯器視窗。否則,引數是開啟進行編輯的檔案,並且
sys.argv
反映傳遞給 IDLE 本身的引數。
啟動失敗¶
IDLE 使用套接字在 IDLE GUI 程序和使用者程式碼執行程序之間進行通訊。每當 Shell 啟動或重啟時,都必須建立連線。(後者由一條顯示“RESTART”的分隔線表示)。如果使用者程序無法連線到 GUI 程序,通常會顯示一個帶有“無法連線”訊息的 Tk
錯誤框,並引導使用者來到這裡。然後它會退出。
在 Unix 系統上,一個特定的連線失敗是由於系統中某處的偽裝規則配置錯誤導致的。當從終端啟動 IDLE 時,會看到一條以 ** Invalid host:
開頭的訊息。有效值是 127.0.0.1 (idlelib.rpc.LOCALHOST)
。可以使用在一個終端視窗中使用 tcpconnect -irv 127.0.0.1 6543
,在另一個終端視窗中使用 tcplisten <same args>
來進行診斷。
一個常見的失敗原因是使用者編寫的檔案與標準庫模組同名,例如 random.py 和 tkinter.py。當此類檔案與即將執行的檔案位於同一目錄中時,IDLE 無法匯入標準庫檔案。當前的解決方法是重新命名使用者檔案。
雖然不如過去常見,但防病毒或防火牆程式可能會阻止連線。如果無法教會該程式允許連線,則必須將其關閉才能使 IDLE 工作。允許此內部連線是安全的,因為外部埠上沒有資料可見。一個類似的問題是阻止連線的網路配置錯誤。
Python 安裝問題偶爾也會阻止 IDLE:多個版本可能會衝突,或者單個安裝可能需要管理員許可權。如果可以解決衝突,或者不能或不想以管理員身份執行,最簡單的辦法可能是完全刪除 Python 並重新開始。
一個殭屍 pythonw.exe 程序可能會成為問題。在 Windows 上,使用任務管理器檢查是否有該程序,如果有則停止它。有時,由程式崩潰或鍵盤中斷(control-C)引發的重啟可能會連線失敗。關閉錯誤框或在 Shell 選單上使用“重啟 Shell”可能會解決臨時問題。
當 IDLE 首次啟動時,它會嘗試讀取 ~/.idlerc/
(~ 是使用者的主目錄)中的使用者配置檔案。如果出現問題,應該會顯示一條錯誤訊息。撇開隨機的磁碟故障不談,可以透過永不手動編輯檔案來防止這種情況。而是使用“選項”下的配置對話方塊。一旦使用者配置檔案中出現錯誤,最好的解決方法可能是刪除它並使用設定對話方塊重新開始。
如果 IDLE 在沒有任何訊息的情況下退出,並且不是從控制檯啟動的,請嘗試從控制檯或終端啟動它(python -m idlelib
),看看是否會產生錯誤訊息。
在 tcl/tk 版本低於 8.6.11
的基於 Unix 的系統上(請參閱 關於 IDLE
),某些字型中的某些字元可能會導致 tk 失敗,並在終端顯示訊息。如果啟動 IDLE 來編輯包含此類字元的檔案,或者稍後在輸入此類字元時,可能會發生這種情況。如果無法升級 tcl/tk,則重新配置 IDLE 以使用效果更好的字型。
執行使用者程式碼¶
在極少數情況下,使用 IDLE 執行 Python 程式碼的結果與使用預設方法(直接在文字模式系統控制檯或終端視窗中使用 Python)執行相同程式碼的結果相同。但是,不同的介面和操作偶爾會影響可見結果。例如,sys.modules
以更多的條目開始,並且 threading.active_count()
返回 2 而不是 1。
預設情況下,IDLE 在單獨的作業系統程序中執行使用者程式碼,而不是在執行 shell 和編輯器的使用者介面程序中執行。在執行程序中,它將 sys.stdin
、sys.stdout
和 sys.stderr
替換為從 Shell 視窗獲取輸入並向其傳送輸出的物件。sys.__stdin__
、sys.__stdout__
和 sys.__stderr__
中儲存的原始值未被觸及,但可能為 None
。
將列印輸出從一個程序傳送到另一個程序中的文字小部件比在同一程序中列印到系統終端要慢。當列印多個引數時,這種影響最大,因為每個引數的字串、每個分隔符和換行符都是單獨傳送的。對於開發來說,這通常不是問題,但是如果想在 IDLE 中更快地列印,請格式化並連線所有要一起顯示的內容,然後列印一個字串。格式字串和 str.join()
可以幫助組合欄位和行。
IDLE 的標準流替換不會被執行程序中建立的子程序繼承,無論是直接由使用者程式碼建立還是由多處理等模組建立。如果這些子程序使用來自 sys.stdin 的 input
或對 sys.stdout 或 sys.stderr 的 print
或 write
,則應在命令列視窗中啟動 IDLE。(在 Windows 上,使用 python
或 py
而不是 pythonw
或 pyw
。)然後,輔助子程序將附加到該視窗以進行輸入和輸出。
如果使用者程式碼重置了 sys
,例如使用 importlib.reload(sys)
,則 IDLE 的更改將丟失,並且來自鍵盤的輸入和到螢幕的輸出將無法正常工作。
當 Shell 具有焦點時,它會控制鍵盤和螢幕。這通常是透明的,但直接訪問鍵盤和螢幕的功能將無法工作。這些包括確定是否已按下鍵以及如果按下,按下了哪個鍵的系統特定函式。
在執行程序中執行的 IDLE 程式碼會將幀新增到呼叫堆疊中,否則這些幀將不存在。IDLE 包裝了 sys.getrecursionlimit
和 sys.setrecursionlimit
以減少額外堆疊幀的影響。
當用戶程式碼直接或透過呼叫 sys.exit 引發 SystemExit 時,IDLE 會返回到 Shell 提示符,而不是退出。
Shell 中的使用者輸出¶
當程式輸出文字時,結果由相應的輸出裝置確定。當 IDLE 執行使用者程式碼時,sys.stdout
和 sys.stderr
連線到 IDLE Shell 的顯示區域。它的一些功能是從底層 Tk Text 小部件繼承的。其他是程式設計新增。在重要的地方,Shell 的設計是為了開發而不是生產執行。
例如,Shell 永遠不會丟棄輸出。一個向 Shell 傳送無限輸出的程式最終會填滿記憶體,導致記憶體錯誤。相比之下,一些系統文字視窗只保留最後 n 行輸出。例如,Windows 控制檯保留使用者可設定的 1 到 9999 行,預設值為 300。
Tk Text 小部件,因此也是 IDLE 的 Shell,顯示 Unicode 的 BMP(基本多語言平面)子集中的字元(程式碼點)。哪些字元使用正確的字形顯示,哪些字元使用替換框顯示取決於作業系統和安裝的字型。製表符導致後續文字在下一個製表位之後開始。(它們每 8 個“字元”出現一次)。換行符導致後續文字出現在新的一行中。其他控制字元會被忽略或顯示為空格、方框或其他內容,具體取決於作業系統和字型。(使用箭頭鍵在這樣的輸出中移動文字游標可能會顯示出一些令人驚訝的間距行為。)
>>> s = 'a\tb\a<\x02><\r>\bc\nd' # Enter 22 chars.
>>> len(s)
14
>>> s # Display repr(s)
'a\tb\x07<\x02><\r>\x08c\nd'
>>> print(s, end='') # Display s as is.
# Result varies by OS and font. Try it.
repr
函式用於互動式回顯表示式值。它返回輸入字串的修改版本,其中控制程式碼、某些 BMP 程式碼點和所有非 BMP 程式碼點都替換為轉義程式碼。如上所示,它允許人們識別字符串中的字元,而不管它們是如何顯示的。
正常輸出和錯誤輸出通常與程式碼輸入和彼此分開(在單獨的行上)。它們各自獲得不同的突出顯示顏色。
對於 SyntaxError 回溯,標記錯誤檢測位置的正常“^”將替換為使用錯誤突出顯示顏色對文字進行著色。當從檔案執行的程式碼導致其他異常時,可以右鍵單擊回溯行以跳轉到 IDLE 編輯器中相應的行。如有必要,將開啟該檔案。
Shell 具有一個特殊的功能,可以將輸出行壓縮為“壓縮文字”標籤。對於超過 N 行的輸出(預設情況下 N = 50),會自動執行此操作。可以在“設定”對話方塊的“常規”頁面的“PyShell”部分中更改 N。可以透過右鍵單擊輸出來壓縮行數較少的輸出。這對於長到足以減慢滾動的行很有用。
透過雙擊標籤,壓縮的輸出會在原處展開。也可以透過右鍵單擊標籤將其傳送到剪貼簿或單獨的檢視視窗。
開發 tkinter 應用程式¶
IDLE的設計與標準Python有所不同,目的是為了方便開發tkinter程式。在標準Python中輸入 import tkinter as tk; root = tk.Tk()
不會顯示任何內容。而在IDLE中輸入同樣的程式碼,則會出現一個tk視窗。在標準Python中,還必須輸入 root.update()
才能看到視窗。IDLE在後臺執行等效操作,大約每秒20次,也就是大約每50毫秒一次。接下來輸入 b = tk.Button(root, text='button'); b.pack()
。同樣,在標準Python中,在輸入 root.update()
之前,沒有任何可見的變化。
大多數tkinter程式會執行 root.mainloop()
,該函式通常在tk應用程式被銷燬之前不會返回。如果程式透過 python -i
或從IDLE編輯器執行,則在 mainloop()
返回之前不會出現 >>>
shell提示符,此時已經沒有任何東西可以互動了。
當從IDLE編輯器執行tkinter程式時,可以註釋掉mainloop呼叫。這樣就可以立即獲得shell提示符並與活動的應用程式進行互動。只需要記住在標準Python中執行時重新啟用mainloop呼叫。
不使用子程序執行¶
預設情況下,IDLE透過一個套接字在單獨的子程序中執行使用者程式碼,該套接字使用內部迴環介面。此連線在外部不可見,並且沒有資料傳送到網際網路或從網際網路接收資料。如果防火牆軟體仍然發出警告,您可以忽略它。
如果嘗試建立套接字連線失敗,Idle會通知您。此類失敗有時是暫時的,但如果持續發生,則問題可能是防火牆阻止了連線或特定系統的配置錯誤。在問題解決之前,可以使用-n命令列開關執行Idle。
如果使用-n命令列開關啟動IDLE,它將在單個程序中執行,並且不會建立執行RPC Python執行伺服器的子程序。如果Python無法在您的平臺上建立子程序或RPC套接字介面,這會很有用。但是,在這種模式下,使用者程式碼不會與IDLE本身隔離。此外,當選擇“執行/執行模組 (F5)”時,環境不會重新啟動。如果您的程式碼已被修改,則必須重新載入受影響的模組並重新匯入任何特定的項(例如,從foo匯入baz),更改才能生效。出於這些原因,如果可以,最好使用預設的子程序執行IDLE。
自版本 3.4 起已棄用。
幫助和首選項¶
幫助來源¶
“幫助”選單項“IDLE 幫助”顯示庫參考中 IDLE 章節的格式化 html 版本。結果在一個只讀的 tkinter 文字視窗中,與在 Web 瀏覽器中看到的內容非常相似。使用滑鼠滾輪、捲軸或按住向上和向下箭頭鍵來瀏覽文字。或者單擊“目錄”按鈕,並在開啟的框中選擇一個節標題。
“幫助”選單項“Python 文件”開啟廣泛的幫助資源,包括教程,可在 docs.python.org/x.y
上獲得,其中“x.y”是當前正在執行的 Python 版本。如果您的系統有文件的離線副本(這可能是一個安裝選項),則會改為開啟該副本。
可以使用“配置 IDLE”對話方塊的“常規”選項卡隨時新增或刪除幫助選單中的選定 URL。
設定首選項¶
可以透過“選項”選單上的“配置 IDLE”來更改字型首選項、高亮顯示、鍵和常規首選項。非預設使用者設定儲存在使用者主目錄中的 .idlerc
目錄中。透過編輯或刪除 .idlerc
中的一個或多個檔案,可以解決由錯誤的使用者配置檔案引起的問題。
在“字型”選項卡上,檢視文字示例,瞭解字型和大小對多種語言中多個字元的影響。編輯示例以新增其他您個人感興趣的字元。使用該示例選擇等寬字型。如果特定字元在Shell或編輯器中存在問題,請將其新增到示例的頂部,並嘗試先更改大小,然後再更改字型。
在“高亮顯示”和“鍵”選項卡上,選擇內建或自定義的顏色主題和鍵集。要將較新的內建顏色主題或鍵集與較舊的 IDLE 結合使用,請將其另存為新的自定義主題或鍵集,以便較舊的 IDLE 可以訪問。
macOS 上的 IDLE¶
在“系統偏好設定:程式塢”下,可以將“開啟文稿時首選標籤頁”設定為“始終”。此設定與 IDLE 使用的 tk/tkinter GUI 框架不相容,並且會破壞 IDLE 的一些功能。
擴充套件¶
IDLE 包含一個擴充套件功能。可以使用首選項對話方塊的“擴充套件”選項卡更改擴充套件的首選項。有關更多資訊,請參閱 idlelib 目錄中的 config-extensions.def 的開頭。當前唯一的預設擴充套件是 zzdummy,這是一個也用於測試的示例。
idlelib¶
原始碼: Lib/idlelib
Lib/idlelib 包實現了 IDLE 應用程式。有關如何使用 IDLE 的資訊,請參閱本頁的其餘部分。
idlelib 中的檔案在 idlelib/README.txt 中進行了描述。可以在 idlelib 中訪問它,或者在 IDLE 選單中單擊“幫助”=>“關於 IDLE”。此檔案還將 IDLE 選單項對映到實現該項的程式碼。除了“啟動”下列出的檔案外,idlelib 程式碼是“私有的”,因為功能更改可以向後移植(請參閱 PEP 434)。