606 Stimmen

Wie finde ich die Quellen der Python-Module?

Wie kann ich herausfinden, wo die Quelldatei für ein bestimmtes Python-Modul installiert ist? Ist die Methode unter Windows anders als unter Linux?

Ich versuche, die Quelle der datetime Modul im Speziellen, aber ich bin auch an einer allgemeineren Antwort interessiert.

455voto

Moe Punkte 26523

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

Wenn Sie einen Python-Quell-Tarball herunterladen und entpacken, finden Sie den Code der Module in der Datei Module Unterverzeichnis.

Wenn Sie zum Beispiel den datetime-Code für Python 2.6 finden möchten, können Sie unter

Python-2.6/Modules/datetimemodule.c

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

269voto

jblocksom Punkte 13199

Laufen python -v in der Befehlszeile sollte Ihnen sagen, was importiert wird und woher. Das funktioniert bei mir 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 mir nicht sicher, was diese schlechten mtime's auf meiner Installation sind!

150voto

abarnert Punkte 332066

Ich weiß, dass diese Antwort 4 Jahre zu spät kommt, aber die vorhandenen Antworten führen die Menschen in die Irre.

Der richtige Weg ist, niemals __file__ oder den Versuch, durch sys.path und suchen Sie nach sich selbst usw. (es sei denn, Sie brauchen Abwärtskompatibilität über 2.1 hinaus).

Es ist die inspect Modul - insbesondere, getfile ou getsourcefile .

Es sei denn, Sie wollen die Regeln (die für CPython 2.x dokumentiert, aber mühsam sind, und für andere Implementierungen oder 3.x überhaupt nicht dokumentiert sind) für das Mapping lernen und implementieren .pyc à .py Dateien; Umgang mit .zip-Archiven, Eiern und Modulpaketen; Ausprobieren verschiedener Möglichkeiten, den Pfad zu .so / .pyd Dateien, die nicht unterstützt werden __file__ herauszufinden, was Jython/IronPython/PyPy tut; usw. In diesem Fall, machen Sie es.

Inzwischen ist der Quellcode jeder Python-Version ab 2.0 online verfügbar unter http://hg.python.org/cpython/file/X.Y/ (z.B., 2.7 ou 3.3 ). Sobald Sie also feststellen, dass inspect.getfile(datetime) ist eine .so ou .pyd Datei wie /usr/local/lib/python2.7/lib-dynload/datetime.so können Sie im Verzeichnis Modules nachsehen. Streng genommen gibt es keine Möglichkeit, sicher zu sein, welche Datei welches Modul definiert, aber fast alle von ihnen sind entweder foo.c ou foomodule.c Es sollte also nicht schwer sein zu erraten, dass datetimemodule.c ist das, was Sie wollen.

133voto

Wenn Sie pip zur Installation Ihrer Module verwenden, brauchen Sie nur pip show $module wird der Ort zurückgegeben.

81voto

Greg Hewgill Punkte 882617

El sys.path list 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', ... ]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X