web-dev-qa-db-ja.com

Pythonで複数のインポートを行う方法

Rubyでは、「require」(Pythonの「import」)Wordを何度も繰り返すのではなく、

%w{lib1 lib2 lib3 lib4 lib5}.each { |x| require x }

そのため、「lib」のセットを反復処理し、それぞれを「必要」(インポート)にします。今私はPythonスクリプトを書いています。私はそのようなことをしたいと思っています。すべてのそれらに「インポート」を書く方法はありますか、それとも必要です。

簡単な「誘導」は、次のコードのようなものになります。とにかく、Pythonは文字列として指定されたライブラリをインポートしないため、機能しません。

requirements = [lib1, lib2, lib3, lib4, lib5]
for lib in requirements:
    import lib

前もって感謝します

26
Eduardo

既知のモジュールの場合は、カンマで区切ってください:

import lib1, lib2, lib3, lib4, lib5

動的変数に基づいてプログラムでインポートする必要がある場合、Rubyのリテラル変換は次のようになります。

modnames = "lib1 lib2 lib3 lib4 lib5".split()
for lib in modnames:
    globals()[lib] = __import__(lib)

あなたの例ではこれは必要ありませんが。

45
Brian

これを試して:

import lib1, lib2, lib3, lib4, lib5

次のように、この方法でインポートされる名前を変更することもできます。

import lib1 as l1, lib2 as l2, lib3, lib4 as l4, lib5
17
John Howard

import lib1, lib2, lib3, lib4, lib5

8
ykaganovich

__import__ 関数を使用して、モジュール名を含む文字列からインポートできます。

requirements = [lib1, lib2, lib3, lib4, lib5]
for lib in requirements:
    x = __import__(lib)
4
txwikinger

モジュールを表す文字列のリストがある場合は__import__を使用できますが、ドキュメントのヒントに従ってimportlib.import_moduleを直接使用すると、おそらくよりクリーンになります。

import importlib
requirements = [lib1, lib2, lib3, lib4, lib5]
imported_libs = {lib: importlib.import_module(lib) for lib in requirements}

インポートされたライブラリを変数としてこの方法で使用することはできませんが、imported_libs辞書を介してアクセスできます。

>>> requirements = ['sys', 'itertools', 'collections', 'pickle']
>>> imported_libs = {lib: importlib.import_module(lib) for lib in requirements}
>>> imported_libs
{'collections': <module 'collections' from 'lib\\collections\\__init__.py'>,
 'itertools': <module 'itertools' (built-in)>,
 'pickle': <module 'pickle' from 'lib\\pickle.py'>,
 'sys': <module 'sys' (built-in)>}

>>> imported_libs['sys'].hexversion
50660592

globalsを更新して、「通常」インポートされたように使用することもできます。

>>> globals().update(imported_libs)
>>> sys
<module 'sys' (built-in)>
1
MSeifert