wake-up-neo.com

Wie finde ich den Speicherort von Python Modulquellen?

Wie erfahre ich, wo die Quelldatei für ein bestimmtes Python Modul installiert ist? Unterscheidet sich die Methode unter Windows von der unter Linux?

Ich versuche, nach der Quelle des Moduls datetime zu suchen, bin aber auch an einer allgemeineren Antwort interessiert.

443
Daryl Spitzer

Für ein reines python Modul finden Sie die Quelle unter themodule.__file__. Das datetime-Modul ist jedoch in C geschrieben, und daher zeigt datetime.__file__ auf eine .so-Datei (unter Windows gibt es keinen datetime.__file__), und daher können Sie den Quellcode nicht sehen.

Wenn Sie einen Quell-Tarball python herunterladen und extrahieren, finden Sie den Code der Module im Unterverzeichnis Modules .

Wenn Sie beispielsweise den Datums-/Uhrzeitcode für python 2.6 suchen möchten, können Sie dies überprüfen

Python-2.6/Modules/datetimemodule.c

Sie finden die neueste Mercurial-Version auch im Internet unter https://hg.python.org/cpython/file/tip/Modules/_datetimemodule.c

347
Moe

Wenn Sie python -v über die Befehlszeile ausführen, sollten Sie wissen, was von wo importiert wird. Dies funktioniert für mich unter Windows und Mac OS X.

C:\>python -v
# installing zipimport hook
import zipimport # builtin
# installed zipimport hook
# C:\Python24\lib\site.pyc has bad mtime
import site # from C:\Python24\lib\site.py
# wrote C:\Python24\lib\site.pyc
# C:\Python24\lib\os.pyc has bad mtime
import os # from C:\Python24\lib\os.py
# wrote C:\Python24\lib\os.pyc
import nt # builtin
# C:\Python24\lib\ntpath.pyc has bad mtime
...

Ich bin nicht sicher, was diese schlechten Zeiten auf meiner Installation sind!

209
jblocksom

Mir ist klar, dass diese Antwort 4 Jahre zu spät ist, aber die vorhandenen Antworten irreführend sind.

Der richtige Weg, dies zu tun, ist niemals __file__ oder der Versuch, durch sys.path zu gehen und nach sich selbst usw. zu suchen (es sei denn, Sie müssen über 2.1 hinaus abwärtskompatibel sein).

Es ist das Modul inspect , insbesondere getfile oder getsourcefile.

Es sei denn, Sie möchten die Regeln für die Zuordnung von .pyc zu .py kennenlernen und implementieren (die für CPython 2.x dokumentiert sind, für andere Implementierungen jedoch schmerzhaft sind). Dateien; Umgang mit ZIP-Archiven, Eiern und Modulpaketen; Probieren Sie verschiedene Methoden aus, um den Pfad zu .so/.pyd -Dateien zu ermitteln, die __file__ nicht unterstützen. herauszufinden, was Jython/IronPython/PyPy tun; usw. In diesem Fall machen Sie es.

Inzwischen ist die Quelle jeder Python -Version von 2.0+ online unter http://hg.python.org/cpython/file/X.Y/ verfügbar (z. B. 2.7 oder . ). Wenn Sie also feststellen, dass inspect.getfile(datetime) eine .so- oder .pyd -Datei wie /usr/local/lib/python2.7/lib-dynload/datetime.so ist, können Sie sie im Modulverzeichnis nachschlagen. Genau genommen gibt es keine Möglichkeit, sicher zu sein, welche Datei welches Modul definiert, aber fast alle sind entweder foo.c oder foomodule.c, daher sollte es nicht schwer sein, das zu erraten datetimemodule) .c ist was Sie wollen.

113
abarnert

Die Liste sys.path enthält die Liste der Verzeichnisse, die zur Laufzeit nach Modulen durchsucht werden:

python -v
>>> import sys
>>> sys.path
['', '/usr/local/lib/python25.Zip', '/usr/local/lib/python2.5', ... ]
63
Greg Hewgill

Wenn Sie Ihre Module mit pip installieren, wird nur pip show $module der Speicherort zurückgegeben.

50

aus der Standardbibliothek versuchen imp.find_module

>>> import imp
>>> imp.find_module('fontTools')
(None, 'C:\\Python27\\lib\\site-packages\\FontTools\\fontTools', ('', '', 5))
>>> imp.find_module('datetime')
(None, 'datetime', ('', '', 6))
31
Codespaced

datetime ist ein eingebautes Modul, daher gibt es keine (Python-) Quelldatei.

Für Module, die aus .py- (oder .pyc-) Dateien stammen, können Sie mymodule.__file__ verwenden, z.

> import random
> random.__file__
'C:\\Python25\\lib\\random.pyc'
29
Bjarke Ebert

Im python -Interpreter können Sie das jeweilige Modul importieren und dann help (module) eingeben. Dies enthält Details wie Name, Datei, Moduldokumentation, Beschreibung et al.

Ex:

import os

help(os)


Help on module os:

NAME

os - OS routines for Mac, NT, or Posix depending on what system we're on.

FILE

/usr/lib/python2.6/os.py

MODULE DOCS

http://docs.python.org/library/os

DESCRIPTION

This exports:

- all functions from posix, nt, os2, or ce, e.g. unlink, stat, etc.

- os.path is one of the modules posixpath, or ntpath

- os.name is 'posix', 'nt', 'os2', 'ce' or 'riscos'

et al

12
Vijay

Hier ist ein Einzeiler, um den Dateinamen für ein Modul abzurufen, das für Shell-Aliasing geeignet ist:

echo 'import sys; t=__import__(sys.argv[1],fromlist=[\".\"]); print(t.__file__)'  | python - 

Als Alias ​​einrichten:

alias getpmpath="echo 'import sys; t=__import__(sys.argv[1],fromlist=[\".\"]); print(t.__file__)'  | python - "

Benutzen:

$ getpmpath twisted
/usr/lib64/python2.6/site-packages/twisted/__init__.pyc
$ getpmpath twisted.web
/usr/lib64/python2.6/site-packages/twisted/web/__init__.pyc
10
Ernest

Neu in Python 3.2 können Sie jetzt z. code_info() aus dem dis-Modul: http://docs.python.org/dev/whatsnew/3.2.html#dis

10
Tom

Check out this geschickter "cdp" -Befehl to cd to the directory, das die Quelle für das angegebene Python -Modul enthält:

cdp () {
  cd "$(python -c "import os.path as _, ${1}; \
    print _.dirname(_.realpath(${1}.__file__[:-1]))"
  )"
}
9
Daryl Spitzer

Unter Windows können Sie den Speicherort des Moduls python wie folgt ermitteln: d. H. Rest_framework-Modul suchen enter image description here

7
Dun0523

Unter Ubuntu 12.04 finden Sie beispielsweise das Paket numpy für python2 unter:

/usr/lib/python2.7/dist-packages/numpy

Dies ist natürlich keine generische Antwort

4
nexayq

Für diejenigen, die eine GUI-Lösung bevorzugen: Wenn Sie eine GUI wie Spyder (Teil der Anaconda-Installation) verwenden, können Sie einfach mit der rechten Maustaste auf den Modulnamen klicken (z. B. "csv" in "csv importieren") und "go" auswählen zur Definition "- dies öffnet die Datei, aber auch oben können Sie den genauen Speicherort der Datei sehen (" C: .... csv.py ")

0
Alona

Nicht alle python Module sind in Python geschrieben. Datetime ist zufällig eine davon und (unter Linux) datetime.so.

Sie müssten den Quellcode in die Standardbibliothek python herunterladen, um darauf zuzugreifen.

0
JimB