アイドル
ソースコード: :source: `Lib / idlelib /`
IDLEは、Pythonの統合開発および学習環境です。
IDLEには次の機能があります。
- tkinter GUIツールキットを使用して、100%純粋なPythonでコーディングされています
- クロスプラットフォーム:Windows、Unix、macOSでほぼ同じように機能します
- コードの入力、出力、およびエラーメッセージの色付けを備えたPythonシェルウィンドウ(インタラクティブインタープリター)
- 複数の取り消し、Pythonの色付け、スマートインデント、通話のヒント、オートコンプリート、その他の機能を備えたマルチウィンドウテキストエディター
- 任意のウィンドウ内で検索し、エディターウィンドウ内で置き換え、複数のファイルを検索します(grep)
- 永続的なブレークポイント、ステッピング、およびグローバル名前空間とローカル名前空間の表示を備えたデバッガー
- 構成、ブラウザー、およびその他のダイアログ
起動とコード実行
-s
オプションで起動すると、IDLEは環境変数 IDLESTARTUP
または PYTHONSTARTUP によって参照されるファイルを実行します。 IDLEは最初にIDLESTARTUP
をチェックします。 IDLESTARTUP
が存在する場合、参照されているファイルが実行されます。 IDLESTARTUP
が存在しない場合、IDLEはPYTHONSTARTUP
をチェックします。 これらの環境変数によって参照されるファイルは、IDLEシェルから頻繁に使用される関数を格納したり、インポートステートメントを実行して共通モジュールをインポートしたりするのに便利な場所です。
さらに、Tk
は、スタートアップファイルが存在する場合はそれもロードします。 Tkファイルは無条件にロードされることに注意してください。 この追加ファイルは.Idle.py
であり、ユーザーのホームディレクトリで検索されます。 このファイルのステートメントはTk名前空間で実行されるため、このファイルはIDLEのPythonシェルから使用する関数をインポートするのには役立ちません。
コマンドラインの使用法
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]
は [に設定されます。 X113X]、'-c'
、または'-r'
。 [オプション]ダイアログでデフォルトに設定されている場合でも、エディタウィンドウは開かれません。- それ以外の場合、引数は編集用に開かれたファイルであり、
sys.argv
はIDLE自体に渡された引数を反映します。
起動失敗
IDLEは、ソケットを使用してIDLEGUIプロセスとユーザーコード実行プロセスの間で通信します。 シェルが起動または再起動するたびに、接続を確立する必要があります。 (後者は「RESTART」と書かれた分割線で示されます)。 ユーザープロセスがGUIプロセスへの接続に失敗した場合、通常、Tk
エラーボックスが表示され、ユーザーにここを指示する「接続できません」というメッセージが表示されます。 その後、終了します。
Unixシステムでの特定の接続障害の1つは、システムのネットワーク設定のどこかで誤って構成されたマスカレードルールが原因です。 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はstdlibファイルをインポートできません。 現在の修正は、ユーザーファイルの名前を変更することです。
以前ほど一般的ではありませんが、ウイルス対策プログラムまたはファイアウォールプログラムが接続を停止する場合があります。 プログラムに接続を許可するように教えることができない場合は、IDLEを機能させるためにプログラムをオフにする必要があります。 外部ポートにデータが表示されないため、この内部接続を許可しても安全です。 同様の問題は、接続をブロックするネットワークの設定ミスです。
Pythonのインストールの問題により、IDLEが停止することがあります。複数のバージョンが衝突したり、1つのインストールで管理者アクセスが必要になる場合があります。 衝突を元に戻す場合、または管理者として実行できない、または実行したくない場合は、Pythonを完全に削除して最初からやり直すのが最も簡単な場合があります。
ゾンビpythonw.exeプロセスが問題になる可能性があります。 Windowsでは、タスクマネージャーを使用して1つを確認し、ある場合は停止します。 プログラムのクラッシュまたはキーボード割り込み(control-C)によって開始された再起動が接続に失敗する場合があります。 エラーボックスを閉じるか、[シェル]メニューの[シェルの再起動]を使用すると、一時的な問題が修正される場合があります。
IDLEが最初に起動すると、~/.idlerc/
(〜は自分のホームディレクトリ)にあるユーザー構成ファイルを読み取ろうとします。 問題がある場合は、エラーメッセージが表示されます。 ランダムなディスクグリッチは別として、ファイルを手動で編集しないことでこれを防ぐことができます。 代わりに、[オプション]の下の構成ダイアログを使用してください。 ユーザー構成ファイルにエラーが発生したら、それを削除して設定ダイアログからやり直すのが最善の解決策です。
IDLEがメッセージなしで終了し、コンソールから起動されなかった場合は、コンソールまたは端末(python -m idlelib
)から起動してみて、エラーメッセージが表示されるかどうかを確認してください。
8.6.11
(About IDLE
を参照)より古いtcl / tkを使用するUnixベースのシステムでは、特定のフォントの特定の文字により、端末へのメッセージでtkエラーが発生する可能性があります。 これは、IDLEを起動してそのような文字を含むファイルを編集した場合、または後でそのような文字を入力した場合に発生する可能性があります。 tcl / tkをアップグレードできない場合は、より適切に機能するフォントを使用するようにIDLEを再構成します。
実行中のユーザーコード
まれな例外を除いて、IDLEを使用してPythonコードを実行した結果は、テキストモードのシステムコンソールまたはターミナルウィンドウでPythonを使用して直接、デフォルトの方法で同じコードを実行した場合と同じになることを目的としています。 ただし、インターフェイスと操作が異なると、表示される結果に影響する場合があります。 たとえば、sys.modules
はより多くのエントリで始まり、threading.active_count()
は1ではなく2を返します。
デフォルトでは、IDLEは、シェルとエディターを実行するユーザーインターフェイスプロセスではなく、別のOSプロセスでユーザーコードを実行します。 実行プロセスでは、sys.stdin
、sys.stdout
、およびsys.stderr
を、シェルウィンドウから入力を取得してシェルウィンドウに出力を送信するオブジェクトに置き換えます。 sys.__stdin__
、sys.__stdout__
、およびsys.__stderr__
に格納されている元の値は変更されませんが、None
である可能性があります。
あるプロセスから別のプロセスのテキストウィジェットに印刷出力を送信すると、同じプロセスのシステム端末に印刷するよりも時間がかかります。 これは、複数の引数を出力するときに最も効果的です。各引数の文字列、各区切り文字、改行が別々に送信されるためです。 開発の場合、これは通常問題ではありませんが、IDLEでより高速に印刷したい場合は、表示したいものすべてをフォーマットして結合し、1つの文字列を印刷します。 フォーマット文字列と str.join()はどちらも、フィールドと行を組み合わせるのに役立ちます。
IDLEの標準ストリーム置換は、ユーザーコードによって直接行われるか、マルチプロセッシングなどのモジュールによって行われるかにかかわらず、実行プロセスで作成されたサブプロセスには継承されません。 そのようなサブプロセスがsys.stdinまたはprint
またはwrite
からsys.stdoutまたはsys.stderrへのinput
を使用する場合、IDLEはコマンドラインウィンドウで開始する必要があります。 次に、セカンダリサブプロセスがそのウィンドウにアタッチされて入力と出力が行われます。
sys
がimportlib.reload(sys)
などのユーザーコードによってリセットされると、IDLEの変更が失われ、キーボードからの入力と画面への出力が正しく機能しなくなります。
シェルにフォーカスがあると、キーボードと画面を制御します。 これは通常透過的ですが、キーボードと画面に直接アクセスする機能は機能しません。 これらには、キーが押されたかどうか、押された場合はどれかを決定するシステム固有の機能が含まれます。
実行プロセスで実行されているIDLEコードは、他の方法では存在しないフレームをコールスタックに追加します。 IDLEは、sys.getrecursionlimit
とsys.setrecursionlimit
をラップして、追加のスタックフレームの影響を減らします。
ユーザーコードが直接またはsys.exitを呼び出してSystemExitを起動すると、IDLEは終了する代わりにシェルプロンプトに戻ります。
シェルでのユーザー出力
プログラムがテキストを出力する場合、結果は対応する出力デバイスによって決定されます。 IDLEがユーザーコードを実行すると、sys.stdout
とsys.stderr
がIDLEのシェルの表示領域に接続されます。 その機能の一部は、基盤となるTkTextウィジェットから継承されています。 その他はプログラムされた追加です。 重要なのは、シェルは本番稼働ではなく開発用に設計されていることです。
たとえば、シェルが出力を破棄することはありません。 無制限の出力をシェルに送信するプログラムは、最終的にメモリをいっぱいにし、メモリエラーを引き起こします。 対照的に、一部のシステムテキストウィンドウは、出力の最後のn行のみを保持します。 たとえば、Windowsコンソールでは、ユーザーが設定可能な1〜9999行が保持され、デフォルトでは300行になります。
Tkテキストウィジェット、つまりIDLEのシェルは、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)。 Nは、[設定]ダイアログの[一般]ページの[PyShell]セクションで変更できます。 出力を右クリックすると、行数の少ない出力を圧縮できます。 これは、スクロールを遅くするのに十分な長さの便利な行になる可能性があります。
ラベルをダブルクリックすると、スクイーズされた出力が所定の位置に展開されます。 ラベルを右クリックして、クリップボードまたは別のビューウィンドウに送信することもできます。
tkinterアプリケーションの開発
IDLEは、tkinterプログラムの開発を容易にするために、意図的に標準のPythonとは異なります。 標準のPythonでimport tkinter as tk; root = tk.Tk()
と入力すると、何も表示されません。 IDLEに同じものを入力すると、tkウィンドウが表示されます。 標準のPythonでは、ウィンドウを表示するにはroot.update()
も入力する必要があります。 IDLEは、バックグラウンドで同等の処理を1秒間に約20回実行します。これは、約50ミリ秒ごとです。 次に、b = tk.Button(root, text='button'); b.pack()
と入力します。 繰り返しますが、root.update()
に入るまで、標準のPythonでは目に見える変化はありません。
ほとんどのtkinterプログラムはroot.mainloop()
を実行します。これは通常、tkアプリが破棄されるまで戻りません。 プログラムがpython -i
またはIDLEエディターから実行されている場合、>>>
シェルプロンプトは、mainloop()
が戻るまで表示されません。戻ると、操作するものは何も残りません。
IDLEエディターからtkinterプログラムを実行する場合、mainloop呼び出しをコメントアウトできます。 その後、すぐにシェルプロンプトが表示され、ライブアプリケーションと対話できます。 標準のPythonで実行する場合は、mainloop呼び出しを再度有効にすることを忘れないでください。
サブプロセスなしで実行
デフォルトでは、IDLEは、内部ループバックインターフェイスを使用するソケットを介して別のサブプロセスでユーザーコードを実行します。 この接続は外部からは見えず、インターネットとの間でデータが送受信されることはありません。 とにかくファイアウォールソフトウェアが文句を言うなら、あなたはそれを無視することができます。
ソケット接続の試行が失敗した場合、Idleは通知します。 このような障害は一時的なものである場合もありますが、永続的な場合は、ファイアウォールが接続をブロックしているか、特定のシステムの構成が間違っている可能性があります。 問題が修正されるまで、-nコマンドラインスイッチを使用してアイドルを実行できます。
IDLEが-nコマンドラインスイッチで開始された場合、IDLEは単一のプロセスで実行され、RPCPython実行サーバーを実行するサブプロセスは作成されません。 これは、Pythonがプラットフォーム上にサブプロセスまたはRPCソケットインターフェイスを作成できない場合に役立ちます。 ただし、このモードでは、ユーザーコードはIDLE自体から分離されません。 また、モジュールの実行/実行(F5)が選択されている場合、環境は再起動されません。 コードが変更されている場合は、影響を受けるモジュールをreload()して、特定のアイテムを再インポートする必要があります(例: 変更を有効にする場合は、foo import bazから)。 これらの理由から、可能な限りデフォルトのサブプロセスでIDLEを実行することをお勧めします。
バージョン3.4以降非推奨。
ヘルプと設定
ヘルプソース
ヘルプメニューエントリ「IDLEヘルプ」には、ライブラリリファレンスのIDLEの章のフォーマットされたhtmlバージョンが表示されます。 結果は、読み取り専用のtkinterテキストウィンドウで、Webブラウザに表示されるものに近くなります。 マウスホイール、スクロールバー、または上下の矢印キーを押したまま、テキスト内を移動します。 または、目次(目次)ボタンをクリックして、開いたボックスでセクションヘッダーを選択します。
ヘルプメニューエントリ「PythonDocs」は、docs.python.org/x.y
で利用可能なチュートリアルを含む広範なヘルプソースを開きます。ここで、「x.y」は現在実行中のPythonバージョンです。 システムにドキュメントのオフラインコピーがある場合(これはインストールオプションである可能性があります)、代わりにそれが開かれます。
選択したURLは、[IDLEの構成]ダイアログの[全般]タブを使用して、いつでもヘルプメニューに追加またはヘルプメニューから削除できます。
プリファレンスの設定
フォント設定、強調表示、キー、および一般設定は、[オプション]メニューの[IDLEの構成]を使用して変更できます。 デフォルト以外のユーザー設定は、ユーザーのホームディレクトリの.idlerc
ディレクトリに保存されます。 不正なユーザー構成ファイルによって引き起こされる問題は、.idlerc
内の1つ以上のファイルを編集または削除することで解決されます。
[フォント]タブで、複数の言語の複数の文字に対するフォントの面とサイズの影響について、テキストサンプルを参照してください。 サンプルを編集して、個人的に興味のある他の文字を追加します。 サンプルを使用して、等幅フォントを選択します。 シェルまたはエディターで特定の文字に問題がある場合は、それらをサンプルの上部に追加し、最初のサイズを変更してからフォントを変更してみてください。
[ハイライトとキー]タブで、組み込みまたはカスタムのカラーテーマとキーセットを選択します。 古いIDLEで新しい組み込みのカラーテーマまたはキーセットを使用するには、それを新しいカスタムテーマまたはキーセットとして保存すると、古いIDLEからアクセスできるようになります。
macOSでのアイドル
[システム環境設定:ドック]で、[ドキュメントを開くときにタブを優先する]を[常に]に設定できます。 この設定は、IDLEで使用されるtk / tkinter GUIフレームワークと互換性がなく、いくつかのIDLE機能を壊します。
拡張機能
IDLEには拡張機能が含まれています。 拡張機能の設定は、設定ダイアログの[拡張機能]タブで変更できます。 詳細については、idlelibディレクトリのconfig-extensions.defの先頭を参照してください。 現在のデフォルトの拡張子はzzdummyだけです。これは、テストにも使用される例です。