1

iPythonには、モジュールをオートコンプリートできるという優れた機能があり、これはそこで非常にうまく機能します。

長い間、私は特定のモジュールが配置されている場所にディレクトリを変更できるシェル関数を持っていました。これは、最初の引数からモジュールの名前をインポートして、そのを調べることによって行われます__file__

私がやりたいのは、この小さなヘルパーのオートコンプリート関数を記述できるように、利用可能なインポート可能なモジュールを見つけることです。

giveモジュールの場合、次のようなことができdir(module_name)、そのモジュールに必要なものが得られることはわかっていますが、次のようなことを行うときのiPythonのように、インポートできるものを見つけるために何をすべきかわかりません。

import [TAB]

または

import St[TAB]

これにより、で始まるすべてのインポート可能なモジュールがオートコンプリートされますSt

オートコンプリート機能の書き方を知っています。何をインポートできるかを知る方法を見つけることに興味があります。

編集:

IPythonコードを掘り下げて、特定の環境で現在のすべてのモジュールを取得する作業を実行する正確な部分を見つけることができました。

from IPython.core.completerlib import module_completion

for module in module_completion('import '): 
    print module

結果を印刷する理由は、実際にこれをZSHの完了に使用しているため、出力を処理する必要があるためです。

4

1 に答える 1

0

sys.path出発点として、 python モジュールを探す際にパスを繰り返し処理することができますimport。それ以外では、インポートは実行時に要求されたときに解決されるため、Python にはすべてのモジュールのインデックスなどはありません。ただし、組み込みモジュールのインデックスを簡単に提供でき、以前にインポートされたモジュールのキャッシュまたは何かを持っている可能性があります。

于 2012-06-27T11:36:46.353 に答える