2013-04-17 6 views
5

Wenn ich richtig verstanden habe, sind Python-Kompilierungsdateien plattformübergreifend. Warum werden die meisten Bibliotheken veröffentlicht, die einen Build und eine Installation erfordern?Warum werden Python-Bibliotheken nicht als Pyc bereitgestellt?

Ist es Faulheit seitens des Verteilers, oder bin ich falsch darin zu sagen, sie könnten einfach die Pyc-Dateien verteilen? Wenn dies nicht der Fall ist, wie verteile ich eine Python-Skriptdatei mit Bibliotheken als Vorquist, ohne dass der Benutzer die Bibliotheken erstellen und installieren muss?

+5

Und ich denke, es ist die einzige Leistungssteigerung Sie bekommen durch "Kompilieren" ist in der ersten "Import". Ansonsten läuft alles exakt mit der gleichen Geschwindigkeit AFAIK. Mit anderen Worten, Sie werden keinen Leistungsunterschied feststellen, der von einem "pyc" oder "py" ausgeht. – mgilson

Antwort

7

Da das Format des enthaltenen Codes mit jedem (Haupt) Python-Release ändern kann, während Quellcode mindestens kompatibel sein kann. Das Format kann auch zwischen Implementierungen unterscheiden (von denen es mehrere sind, die beiden bekanntesten CPython and PyPy sind.

this article finden Sie weitere Informationen über die innere Struktur von .pyc Dateien.

4

Sie sind Cross-Plattform, aber nicht Cross-Version und nicht Cross-Implementierung.Mit anderen Worten, verschiedene CPython-Versionen könnten Probleme mit ein und derselben .pyc-Datei haben.

Und wenn Sie sich andere Implementierungen wie PyPy, IronPython, Jython etc. ansehen Sie haben überhaupt kein Glück mit .pyc Dateien

Außerdem entsprechen .pyc-Dateien einer .py-Datei. Was Sie (wahrscheinlich) im Sinn haben, sind Bibliotheken, die einen in C geschriebenen Teil enthalten. Sie müssen in plattformabhängige Dateien (.pyd, .dll, .so usw.) kompiliert werden, damit sie funktionieren. Da nicht viele Entwickler alle unterstützten Plattformen zur Verfügung haben, stellen sie sie als Quelle zur Verfügung und überlassen sie dem System des Benutzers, um sie zu kompilieren.

+0

Anmerkung zum letzten Teil: Binäre Verteilung von Erweiterungsmodulen ist die Norm unter Windows, wo selten jemand einen Compiler hat. – delnan

0

Das Erstellen einer .pyc-Datei aus einer .py-Datei erfolgt transparent durch den Interpreter. Der Grund dafür, dass einige Installer sie zum Zeitpunkt der Installation generieren, besteht lediglich darin, zu vermeiden, dass sie bei der ersten Ausführung des Skripts generiert werden müssen - normalerweise aus Gründen der Geschwindigkeit, aber auch, damit die .pyc systemweit (Nicht-Benutzer) enden kann Schreibbares) Verzeichnis. Im Gegensatz zu kompilierten Sprachen oder sogar Python-Modulen, die in C geschrieben sind, ist es nicht eine technische Voraussetzung, dass diese Dateien an erster Stelle existieren - wenn es wäre, könnten Sie Ihre eigenen Skripte nicht direkt in python setzen und haben ohne einen Kompilierungsschritt ausführen.

Jede Bibliothek, die unbedingt einen Build-Schritt erfordert, bevor sie installiert wird, hat sicherlich eine Komponente, die auf nativen Code kompiliert - die ist nicht plattformübergreifend. Für jede pure-python-Bibliothek reicht es immer aus, die Quellenverzeichnisstruktur des Moduls irgendwo in Ihrem PYTHONPATH zu platzieren, nachdem Sie sie direkt aus dem Archiv kopiert haben.

Verwandte Themen