Was bedeutet "i" in der Python .pyi-Erweiterung?

76

Was bedeutet "i" in Python in der Erweiterung .pyi?

In PEP-484 wird erwähnt, dass .pyi "eine Stub-Datei" ist, aber keine mnemonische Hilfe für die Erweiterung. Bedeutet das "i" also "Include"? "Implementierung"? "Schnittstelle"?

ChrisFreeman
quelle
Demnach wird die pyiErweiterung für Cognos-Modelldateien verwendet. Möglicherweise sehen Sie sich eine pycDatei mit einer anderen Erweiterung an, nämlich Python Script Compiled. Versuchen Sie, die Prüfsummen mit einer tatsächlichen pycDatei zu vergleichen, und Sie wissen, dass es sich mindestens um eine Binärdatei handelt.
Preston Hager
Laut der Dokumentation zum Python-Paket scheint dies zu bedeuten: [PYthon Information] [1] [1]: pypi.python.org/pypi/pyi/0.1.0
NationWidePants
1
@NationWidePants Ich denke, das ist anders pyi.
tobias_k

Antworten:

62

Ich denke das iin .pyisteht für "Interface"

Definition für Schnittstelle in Java :

Eine Schnittstelle in der Programmiersprache Java ist ein abstrakter Typ, mit dem ein Verhalten angegeben wird, das Klassen implementieren müssen

Jedes Python-Modul wird durch einen .pyi"Stub" dargestellt. Dies ist eine normale Python-Datei (dh sie kann von Python 3 interpretiert werden), außer dass alle Methoden leer sind .

  • Im 'Mypy'- Repository werden "Stub" -Dateien ausdrücklich als öffentliche Schnittstellen erwähnt:

Eine Stubs-Datei enthält nur eine Beschreibung der öffentlichen Schnittstelle des Moduls ohne Implementierungen.

Da "Interfaces" in Python nicht existieren (siehe diese SO-Frage zwischen Abstract-Klasse und Interface ), wollten die Designer meiner Meinung nach eine spezielle Erweiterung dafür reservieren.

pyiimplementiert "stub" -Datei (Definition von Martin Fowler )

Stubs : Geben Sie vordefinierte Antworten auf Anrufe, die während des Tests getätigt wurden, und reagieren Sie normalerweise überhaupt nicht auf etwas außerhalb der für den Test programmierten.

Die Benutzer sind jedoch mit Schnittstellen besser vertraut als mit "Stub" -Dateien. Daher war es einfacher, eine Auswahl zu .pyitreffen, als .pysunnötige Verwirrung zu vermeiden.

Kruupös
quelle
3
Außerdem würden Python-Programmierer kichern, wenn Sie sie bitten würden, Pys zu machen, wo ihre Pys waren, wenn sie sich die Pys angesehen hätten, so etwas.
Ion Freeman
Müssen die Methoden leer sein? oder kann das eine Referenzimplementierung sein?
Robert McPythons
21

Anscheinend erstellt PyCharm eine .pyi-Datei für eigene Zwecke:

Die * .pyi-Dateien werden von PyCharm und anderen Entwicklungstools verwendet, um mehr Informationen bereitzustellen, z. B. Hinweise zum Typ PEP 484, als durch die Selbstbeobachtung von Erweiterungstypen und -methoden gewonnen werden können. Sie dürfen nicht importiert, ausgeführt oder für andere Zwecke als die Bereitstellung von Informationen für die Tools verwendet werden. Wenn Sie kein Tool verwenden, das .pyi-Dateien verwendet, können Sie diese Datei ignorieren.

Siehe: https://www.python.org/dev/peps/pep-0484/ https://www.jetbrains.com/help/pycharm/2016.1/type-hinting-in-pycharm.html

Dieser Kommentar wurde gefunden in: python27/Lib/site-packages/wx/core.pyi

Ribo
quelle
3
Tolle Infos. Gibt es eine endgültige Antwort auf das, wofür das „i“ in „pyi“ steht?
ChrisFreeman
Ich habe keinen gesehen. Wie wäre es mit "Selbstbeobachtung"? (Ich habe nur versucht zu verstehen, was die Datei war)
Ribo
2

Das iin .pyisteht für 'interface'.

Die .pyiErweiterung wurde erstmals in diesem GitHub-Thread erwähnt, in dem JukkaL sagt:

Ich würde wahrscheinlich eine Erweiterung mit nur einem Punkt bevorzugen. Es muss auch etwas sein, das nicht verwendet wird (es sollte nicht von Cython usw. verwendet werden). .pys scheint in Windows verwendet zu werden (oder war). Vielleicht .pyi, wo ich für eine Schnittstellendefinition stehe?

Pyprohly
quelle