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
前もって感謝します
既知のモジュールの場合は、カンマで区切ってください:
import lib1, lib2, lib3, lib4, lib5
動的変数に基づいてプログラムでインポートする必要がある場合、Rubyのリテラル変換は次のようになります。
modnames = "lib1 lib2 lib3 lib4 lib5".split()
for lib in modnames:
globals()[lib] = __import__(lib)
あなたの例ではこれは必要ありませんが。
これを試して:
import lib1, lib2, lib3, lib4, lib5
次のように、この方法でインポートされる名前を変更することもできます。
import lib1 as l1, lib2 as l2, lib3, lib4 as l4, lib5
import lib1, lib2, lib3, lib4, lib5
__import__
関数を使用して、モジュール名を含む文字列からインポートできます。
requirements = [lib1, lib2, lib3, lib4, lib5]
for lib in requirements:
x = __import__(lib)
モジュールを表す文字列のリストがある場合は__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)>