Pythonにすべてのモジュールをあるフォルダーからインポートするように指示する最良の(最もクリーンな)方法は何でしょうか?
人々が自分の「改造」(モジュール) を自分のアプリのフォルダーに入れられるようにしたいと思います。このフォルダーは、コードが起動ごとにチェックし、そこにあるモジュールをインポートする必要があります。
また、インポートされたものに余分なスコープを追加したくありません(「myfolder.mymodule.something」ではなく「something」)
モジュール内のフォルダー自体を変換し、__init__.py
ファイルを使用してfrom <foldername> import *
自分に合ったものを使用する場合は、「os.listdir」または「glob.glob」を使用してフォルダーの内容を繰り返し処理し、「.py」で終わる各ファイルをインポートできます。__import__
組み込み関数で:
import os
for name in os.listdir("plugins"):
if name.endswith(".py"):
#strip the extension
module = name[:-3]
# set the module name in the current global name space:
globals()[module] = __import__(os.path.join("plugins", name)
このアプローチの利点は次のとおりです。モジュール名を動的に渡すことができますが__import__
、 ìimport ステートメントではモジュール名をハードコーディングする必要があり、ファイルに関する他のことを確認できます-おそらくサイズ、または特定のファイルをインポートするかどうか必要なモジュールをインポートする前に。
という名前のファイルを作成します。
__init__.py
フォルダー内に移動し、次のようにフォルダー名をインポートします。
>>> from <folder_name> import * #Try to avoid importing everything when you can
>>> from <folder_name> import module1,module2,module3 #And so on
そのプロジェクトを試してみることをお勧めします: https://gitlab.com/aurelien-lourot/importdir
このモジュールを使用すると、ディレクトリからすべてのプラグインをインポートするために 2 行を記述するだけで済み、追加__init__.py
(またはその他の追加ファイル)は必要ありません。
import importdir
importdir.do("plugins/", globals())