Comment puis-je trouver l'emplacement de module Python sources?
Comment puis-je savoir où le fichier source pour un module Python est installé? La méthode est différente sur Windows que sur Linux?
Je suis en train de chercher la source de la datetime
module en particulier, mais je suis intéressé dans un cadre plus général de répondre ainsi.
Vous devez vous connecter pour publier un commentaire.
Pour un pur python module, vous pouvez trouver la source en regardant
themodule.__file__
.Le module datetime, cependant, est écrit en C, et donc
datetime.__file__
points à un .si le fichier (il n'y a pas dedatetime.__file__
sur Windows), et, par conséquent, vous ne pouvez pas voir la source.Si vous téléchargez une source python archive et l'extraire, des modules, le code peut être trouvé dans la Modules sous-répertoire.
Par exemple, si vous souhaitez trouver le datetime code pour la version 2.6 de python, vous pouvez regarder
Vous pouvez également trouver les dernières Mercurial la version sur le web à
https://hg.python.org/cpython/file/tip/Modules/_datetimemodule.c
De course
python -v
à partir de la ligne de commande devrait vous dire ce qui est importé et à partir d'où. Cela fonctionne pour moi sur Windows et Mac OS X.Je ne suis pas sûr de ce que ces mauvais mtime sont sur mon installation!
built-in
modules?Je me rends compte que cette réponse est de 4 ans en retard, mais les réponses existantes sont tromper les gens.
La bonne façon de le faire est de ne jamais
__file__
, ou d'essayer de marcher à traverssys.path
et de recherche pour vous-même, etc. (sauf si vous avez besoin d'être rétro-compatible-delà 2.1).C'est le
inspecter
module en particulier,getfile
ougetsourcefile
.Sauf si vous voulez apprendre et de mettre en œuvre les règles (qui sont documentées, mais douloureuse, pour Disponible 2.x, et non documenté pour les autres implémentations, ou 3.x) pour la cartographie des
.pyc
à.py
fichiers; traiter avec .les archives zip, les œufs, et les modules d'essayer différentes façons d'obtenir le chemin d'accès à.so
/.pyd
fichiers qui ne supportent pas__file__
, identifier ce Jython/IronPython/PyPy faire; etc. Dans ce cas, allez-y.Pendant ce temps, chaque version de Python est source de 2,0+ est disponible en ligne à
http://hg.python.org/cpython/file/X.Y/
(par exemple, 2.7 ou 3.3). Donc, une fois que vous découvrez queinspect.getfile(datetime)
est un.so
ou.pyd
fichier comme/usr/local/lib/python2.7/lib-dynload/datetime.so
, vous pouvez le rechercher à l'intérieur du répertoire de Modules. Strictement parlant, il n'y a aucun moyen d'être sûr de ce qui est défini dans le fichier du module, mais presque tous d'entre eux sontfoo.c
oufoomodule.c
, donc il ne devrait pas être difficile de deviner que datetimemodule.c est ce que vous voulez.__file__
pas applicable pour les non-objets internes? Je comprends d'où ramper sys.chemin d'accès peut être douloureux (surtout sans savoir à propos de meta_path), mais c'est votre préoccupation au sujet de namespacing entre__file__
les définitions et les binaires?__file__
œuvres,inspect.getfile
œuvres; il n'y a pas de situation où deviner si l'utilisation de__file__
sera mieux que de simplement à l'aide de l'inspecter module.__file__
ou de faire un peu de recherche.La
sys.path
liste contient la liste des répertoires qui seront recherchés pour les modules au moment de l'exécution:python -c 'import sys; print "\n".join(sys.path)'
vous permettra de visualiser sans avoir à tomber dans interactif de python.python -c 'import sys; print("\n".join(sys.path))'
Si vous êtes à l'aide du pep à installer vos modules, juste
pip show $module
l'emplacement est retourné.pip show numpy
$module
a été conçu comme un espace réservé variable, pas littéralement de ce type. E. g.,m=numpy; pip show $m
...etc, pour toutm
)de la bibliothèque standard essayer imp.find_module
apt-get remove
'd DataDog et pourrait encore l'importer. Cela m'a aidé à trouver l'endroit où les fichiers ont été (afin que je puisse les supprimer) lorsque les autres solutions n'ont pas les aider.imp
paquet est obsolète (depuis la version 3.4) en faveur deimportlib
(depuis 3.1) docs.python.org/3.6/library/imp.htmldatetime
est un builtin module, donc il n'est pas (Python) fichier source.Pour les modules provenant de
.py
(ou.pyc
) des fichiers, vous pouvez utilisermymodule.__file__
, par exempleDans l'interpréteur python, vous pouvez importer le module en particulier, puis le type d'aide(module). Cela donne des détails tels que le Nom, le Fichier, le Module de Docs, de Description et coll.
Ex:
et al
Nouveau en Python 3.2, vous pouvez maintenant utiliser, par exemple,
code_info()
du dis module:http://docs.python.org/dev/whatsnew/3.2.html#dis
Voici un one-liner pour récupérer le nom d'un module adapté pour la coquille de l'aliasing:
Mis en place comme un alias:
À utiliser:
Découvrez ce chic "cdp" commande de cd dans le répertoire contenant les sources de constater que le module Python:
Sur windows, vous pouvez trouver l'emplacement du module python comme indiqué ci-dessous:je.e trouver rest_framework module
Sur Ubuntu 12.04, par exemple numpy paquet pour python2, peut être trouvé à:
Bien sûr, ce n'est pas de réponse générique
Pas tous les modules python sont écrits en python. Datetime se trouve être l'un d'entre eux qui ne l'est pas, et (sur linux) est de type datetime.donc.
Vous devez télécharger le code source pour le python standard library pour obtenir à elle.
Pour ceux qui préfèrent une interface graphique solution: si vous utilisez une interface graphique, comme le Spyder (partie de l'installation Anaconda) il vous suffit de cliquez-droit sur le nom du module (tels que "csv" dans "import csv") et sélectionnez "aller à la définition de" - cela va ouvrir le fichier, mais aussi sur le haut, vous pouvez voir l'exact emplacement du fichier ("C:....csv.py")