Disons que j'ai un numéro dans le projet Python et que je veux savoir dans quel package / module une classe particulière est définie (je connais le nom de la classe). Existe-t-il un moyen efficace de le faire?

12
Ivan Mushketyk 10 juil. 2015 à 20:03

3 réponses

Meilleure réponse

Vous pouvez utiliser le module inspect pour obtenir le module emplacement où un module / package est défini.

inspect.getmodule(my_class)

Exemple de sortie:

<module 'module_name' from '/path/to/my/module.py'>

Selon les documents,

inspect.getmodule (objet)
Essayez de deviner dans quel module un objet a été défini.

11
Rahul Gupta 10 juil. 2015 à 17:24

Une façon d'obtenir l'emplacement d'une classe consiste à utiliser une combinaison de l'attribut __module__ d'une classe et du dictionnaire sys.modules.

Exemple:

import sys
from stl import stl

module = sys.modules[stl.BaseStl.__module__]
print module.__file__

Je dois noter que cela ne donne pas toujours le bon module, il donne juste le module d'où vous l'avez obtenu. Une méthode plus approfondie (mais plus lente) utilise le module inspect:

from stl import stl
import inspect

print inspect.getmodule(stl.BaseStl).__file__
0
Wolph 10 juil. 2015 à 17:17

Expliquons par l'exemple

import numpy
print numpy.__file__

Donne

/usr/lib64/python2.7/site-packages/numpy/__init__.pyc

Sur ma machine.

Si vous n'avez qu'une classe, vous pouvez utiliser cette classe avec le module python2-ic imp:

#let unknownclass be looked for

import imp

modulename = unknownclass.__module__
tup = imp.find_module(modulename)
#(None, '/usr/lib64/python2.7/site-packages/numpy', ('', '', 5))
print "path to module", modulename, ":", tup[1]
#path to module numpy : /usr/lib64/python2.7/site-packages/numpy

Comme vous pouvez le voir, la propriété __module__ est probablement ce que vous recherchez.

0
Marcus Müller 10 juil. 2015 à 17:17