Pour un module pur python, vous pouvez trouver la source en regardant themodule.__file__
. Le module datetime, cependant, est écrit en C, et datetime.__file__
pointe donc vers un fichier .so (il n'y en a pas datetime.__file__
sous Windows), et par conséquent, vous ne pouvez pas voir la source.
Si vous téléchargez une archive tar source python et que vous l'extrayez, le code des modules se trouve dans le sous-répertoire Modules .
Par exemple, si vous voulez trouver le code datetime pour python 2.6, vous pouvez regarder
Python-2.6/Modules/datetimemodule.c
Vous pouvez également trouver la dernière version de Mercurial sur le Web à l'
adresse https://hg.python.org/cpython/file/tip/Modules/_datetimemodule.c
L'exécution à
python -v
partir de la ligne de commande devrait vous indiquer ce qui est importé et d'où. Cela fonctionne pour moi sur Windows et Mac OS X.Je ne sais pas quels sont ces mauvais mtime sur mon installation!
la source
built-in
modules?Je me rends compte que cette réponse a 4 ans de retard, mais les réponses existantes trompent les gens.
La bonne façon de le faire n'est jamais
__file__
, ou d'essayer de se promenersys.path
et de se rechercher, etc. (sauf si vous devez être rétrocompatible au-delà de 2.1).C'est le
inspect
module, en particulier,getfile
ougetsourcefile
.À moins que vous ne vouliez apprendre et implémenter les règles (qui sont documentées, mais pénibles, pour CPython 2.x, et pas du tout documentées pour les autres implémentations, ou 3.x) pour le mappage
.pyc
aux.py
fichiers; gérer les archives .zip, les œufs et les packages de modules; essayer différentes façons d'obtenir le chemin d'accès aux fichiers.so
/.pyd
qui ne sont pas pris en charge__file__
; comprendre ce que font Jython / IronPython / PyPy; etc. Dans ce cas, allez-y.Pendant ce temps, la source de chaque version Python de 2.0+ est disponible en ligne à
http://hg.python.org/cpython/file/X.Y/
(par exemple, 2.7 ou 3.3 ). Ainsi, une fois que vous découvrez qu'ilinspect.getfile(datetime)
s'agit d'un fichier.so
ou , vous pouvez le rechercher dans le répertoire Modules. À strictement parler, il n'y a aucun moyen de savoir quel fichier définit quel module, mais presque tous sont soit ou , donc il ne devrait pas être difficile de deviner que datetimemodule.c est ce que vous voulez..pyd
/usr/local/lib/python2.7/lib-dynload/datetime.so
foo.c
foomodule.c
la source
__file__
pas applicable pour les non-intégrés? Je comprends où l'exploration de sys.path peut être douloureuse (en particulier sans connaître meta_path), mais est-ce que vous vous inquiétez de l'espace de noms entre les__file__
définitions et les binaires?__file__
marche, çainspect.getfile
marche; il n'y a aucune situation où deviner s'il faut utiliser__file__
sera mieux que d'utiliser simplement le module d'inspection.La
sys.path
liste contient la liste des répertoires qui seront recherchés pour les modules lors de l'exécution:la source
python -c 'import sys; print "\n".join(sys.path)'
vous permettra de le visualiser sans avoir à passer en python interactif.python -c 'import sys; print("\n".join(sys.path))'
Si vous utilisez pip pour installer vos modules, seul
pip show $module
l'emplacement est retourné.la source
$module
a été conçue comme une variable d'espace réservé, pas littéralement ce que l' on taperait par exemple.m=numpy; pip show $m
... etc, pour toutm
)à partir de la bibliothèque standard, essayez imp.find_module
la source
apt-get remove
DataDog et je pourrais encore l'importer. Cela m'a aidé à trouver où se trouvaient les fichiers (afin que je puisse les supprimer) lorsque les autres solutions n'ont pas aidé.imp
paquet est déconseillé (depuis la version 3.4) en faveur deimportlib
(depuis 3.1) docs.python.org/3.6/library/imp.htmlimport importlib
puisimportlib.util.find_spec('fontTools')
datetime
est un module intégré, il n'y a donc pas de fichier source (Python).Pour les modules provenant de
.py
(ou.pyc
) fichiers, vous pouvez utilisermymodule.__file__
, par exemplela source
Dans l'interpréteur python, vous pouvez importer le module particulier, puis taper help (module). Cela donne des détails tels que le nom, le fichier, la documentation du module, la description et al.
Ex:
et al
la source
Voici une ligne pour obtenir le nom de fichier d'un module, adapté à l'alias de shell:
Configuré comme alias:
Utiliser:
la source
Nouveau dans Python 3.2, vous pouvez maintenant utiliser par exemple
code_info()
le module dis: http://docs.python.org/dev/whatsnew/3.2.html#disla source
Consultez cette astucieuse commande "cdp" pour accéder au répertoire contenant la source du module Python indiqué:
la source
Sur les fenêtres, vous pouvez trouver l'emplacement du module python comme indiqué ci-dessous: ie trouver le module rest_framework
la source
Sur Ubuntu 12.04, par exemple le paquet numpy pour python2, peut être trouvé à:
Bien sûr, ce n'est pas une réponse générique
la source
Tous les modules python ne sont pas écrits en python. Datetime se trouve être l'un d'entre eux qui ne l'est pas, et (sous Linux) est datetime.so.
Vous devriez télécharger le code source dans la bibliothèque standard de python pour y accéder.
la source
Pour ceux qui préfèrent une solution graphique: si vous utilisez une interface graphique telle que Spyder (faisant partie de l'installation d'Anaconda), vous pouvez simplement cliquer avec le bouton droit sur le nom du module (tel que "csv" dans "import csv") et sélectionner "aller to definition "- cela ouvrira le fichier, mais aussi en haut vous pouvez voir l'emplacement exact du fichier (" C: .... csv.py ")
la source
Si vous n'utilisez pas d'interpréteur, vous pouvez exécuter le code ci-dessous:
Production:
Le deuxième élément dans Array sera l'emplacement de votre package. Dans ce cas:
la source
Une autre façon de vérifier si plusieurs versions de python sont installées depuis le terminal.
-MBP: ~ python3 -m pip afficher pyperclip
Emplacement: /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-
MBP: ~ python -m pip afficher pyperclip
Emplacement: /Users/umeshvuyyuru/Library/Python/2.7/lib/python/site-packages
la source
Dans un IDE comme Spyder, importez le module, puis exécutez le module individuellement. entrez la description de l'image ici
la source
str()
modèle est une description plus précise de ce que vous faites dans la capture d'écran, plus l'EDI ne semble pas pertinent pour cette solution