8

Pythonにすべてのモジュールをあるフォルダーからインポートするように指示する最良の(最もクリーンな)方法は何でしょうか?

人々が自分の「改造」(モジュール) を自分のアプリのフォルダーに入れられるようにしたいと思います。このフォルダーは、コードが起動ごとにチェックし、そこにあるモジュールをインポートする必要があります。

また、インポートされたものに余分なスコープを追加したくありません(「myfolder.mymodule.something」ではなく「something」)

4

3 に答える 3

6

モジュール内のフォルダー自体を変換し、__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 ステートメントではモジュール名をハードコーディングする必要があり、ファイルに関する他のことを確認できます-おそらくサイズ、または特定のファイルをインポートするかどうか必要なモジュールをインポートする前に。

于 2012-04-06T13:57:55.867 に答える
2

という名前のファイルを作成します。

 __init__.py

フォルダー内に移動し、次のようにフォルダー名をインポートします。

>>> from <folder_name> import * #Try to avoid importing everything when you can
>>> from <folder_name> import module1,module2,module3 #And so on
于 2012-04-06T12:31:34.477 に答える
0

そのプロジェクトを試してみることをお勧めします: https://gitlab.com/aurelien-lourot/importdir

このモジュールを使用すると、ディレクトリからすべてのプラグインをインポートするために 2 行を記述するだけで済み、追加__init__.py(またはその他の追加ファイル)は必要ありません。

import importdir
importdir.do("plugins/", globals())
于 2014-11-19T00:01:46.193 に答える