2012-04-06 17 views
4

Pythonにいくつかのフォルダからすべてのモジュールをインポートするように指示するには、何が最善の方法でしょうか?Python:すべてのモジュールをフォルダからインポートしますか?

自分のアプリケーションのフォルダに「mods」(モジュール)を置いて、起動時にコードをチェックしてそこに置かれたモジュールをインポートするようにしたいと考えています。

私も余分なスコープをインポートもの(ない「myfolder.mymodule.something」が、「何か」)に追加したくない

+0

可能重複(http://stackoverflow.com/questions/1057431/loading-all-modules-in-a-folder-in-python ) –

+0

同様のスレッドとその答えを確認してください:http://stackoverflow.com/questions/279237/python-import-a-module-from-a-folder – vaisakh

答えて

5

:次のようにフォルダ名をフォルダとインポートTSもし、あなたが「os.listdir」または「glob.glob」と フォルダの内容を反復し、__import__組み込み関数と「の.py」で終わる各ファイルをインポートすることができます。

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__に動的に渡すことができます。--mportステートメントでモジュール名をハードコードする必要がありますが、ファイルに関する他のものをチェックすることができます。必要なモジュールをインポートします。

+0

これはPython3.6でも動作しますが、最後の行は次のように変更されます: 'import importlib; importlib.import_module( "plugins" + "。" + module) ' –

+0

ありがとうございます - 彼らは' __import__'にファイル名の使用を非難しました。機能はまだまだ機能しますが、「」を使用するだけです。 'os.path.join'の代わりに – jsbueno

1

内部

__init__.py 

という名前のファイルを作成します。 __init__.pyファイルを使用して、モジュール内のフォルダ自体を形質転換し、from <foldername> import *がsuiを使用している場合

>>> from <folder_name> import * #Try to avoid importing everything when you can 
>>> from <folder_name> import module1,module2,module3 #And so on 
+0

は私のポストを編集しました。詳細は –

+0

です。リンクされた回答に示唆されているように、os.pathリストにフォルダを追加し、必要なものをインポートします。 – luke14free

0

あなたがそのプロジェクトしようとする場合があります。このモジュールではhttps://gitlab.com/aurelien-lourot/importdir

を、あなただけのディレクトリからすべてのプラグインをインポートするには、2つの行を記述する必要があり、余分な__init__.py(または追加の他、他の必要はありませんファイル):[Pythonでフォルダ内のすべてのモジュールをロード]の

import importdir 
importdir.do("plugins/", globals()) 
+0

これはLinuxのパスでのみ動作しますか? – Sajuuk

関連する問題