web-dev-qa-db-fra.com

Comment faire plusieurs importations en Python?

En Ruby, au lieu de répéter le mot "require" ("importer" en Python) Word souvent, je le fais

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

Il itère donc sur l'ensemble des "libs" et "requiert" (importe) chacun d'eux. Maintenant, j'écris un script Python et je voudrais faire quelque chose comme ça.

La "traduction" simple serait quelque chose comme le code suivant. Quoi qu'il en soit, puisque Python n'importe pas les bibliothèques nommées sous forme de chaînes, cela ne fonctionne pas.

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

Merci d'avance

26
Eduardo

Pour les modules connus, séparez-les simplement par des virgules:

import lib1, lib2, lib3, lib4, lib5

Si vous avez vraiment besoin d'importer par programme sur la base de variables dynamiques, une traduction littérale de votre Ruby serait:

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

Bien que cela ne soit pas nécessaire dans votre exemple.

45
Brian

Essaye ça:

import lib1, lib2, lib3, lib4, lib5

Vous pouvez également changer le nom sous lequel ils sont importés de cette manière, comme ceci:

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

import lib1, lib2, lib3, lib4, lib5

8
ykaganovich

Vous pouvez importer à partir d'une chaîne contenant le nom de votre module en utilisant __import__ fonction.

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

Vous pouvez utiliser __import__ si vous avez une liste de chaînes qui représentent des modules, mais c'est probablement plus propre si vous suivez les conseils dans la documentation et utilisez importlib.import_module directement:

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

Vous n'avez pas les bibliothèques importées comme variables disponibles de cette façon, mais vous pouvez y accéder via le imported_libs dictionnaire:

>>> 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

Vous pouvez également mettre à jour votre globals puis les utiliser comme ils ont été importés "normalement":

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