75 votes

D'où le module est-il importé ?

En supposant que j'ai deux modules Python et que path_b se trouve dans le chemin d'importation :

 # file: path_b/my_module.py
print "I was imported from ???"

#file: path_a/app.py
import my_module

Est-il possible de voir d'où le module est importé ? Je veux une sortie comme "J'ai été importé de path_a/app.py", si je démarre app.py (car j'ai besoin du nom de fichier).

Éditer: Pour une meilleure compréhension ; je pourrais écrire :

 # file: path_b/my_module.py
def foo(file):
    print "I was imported from %s" % file

#file: path_a/app.py
import my_module
my_module.foo(__file__)

La sortie serait donc :

 $> python path_app.py
I was imported from path_a/app.py

111voto

Johannes Points 514

Essaye ça:

 >>> import my_module
>>> my_module.__file__
'/Users/myUser/.virtualenvs/foobar/lib/python2.7/site-packages/my_module/__init__.pyc'

Éditer

Dans ce cas, écrivez dans le __init__.py de votre module :

 print("%s: I was imported from %s" %(__name__, __file__))

17voto

Wooble Points 35620

Il existe peut-être un moyen plus simple de procéder, mais cela fonctionne :

 import inspect

print inspect.getframeinfo(inspect.getouterframes(inspect.currentframe())[1][0])[0]

Notez que le chemin sera affiché par rapport au répertoire de travail courant s'il s'agit d'un répertoire parent de l'emplacement du script.

16voto

Noctis Skytower Points 5137

Essayez my_module.__file__ pour savoir d'où il vient. Si vous obtenez un AttributeError , ce n'est probablement pas un fichier source Python (.py).

10voto

Fábio Diniz Points 4110

Aussi, si vous avez une fonction/classe f d'un module m vous pouvez obtenir le chemin du module en utilisant le module inspect

 import inspect
from m import f

print inspect.getmodule(f)

9voto

Joshua Burkhow Points 81

Voici comment je procède :

 print(module_name.__path__)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X