2012-07-06 7 views
13

Ich habe angefangen, an einer kommerziellen Anwendung in Python zu arbeiten, und ich wäge meine Optionen ab, wie man die Anwendung verteilt.Welche Einschränkungen gibt es beim Verteilen von .pyc-Dateien?

Abgesehen von den offensichtlichen (Quellen mit einer entsprechenden kommerziellen Lizenz zu verteilen), überlege ich, nur die .pyc Dateien ohne ihre entsprechenden .py Quellen zu verteilen. Aber ich kenne Pythons Kompatibilitätsgarantien nicht genug, um zu wissen, ob das überhaupt machbar ist, geschweige denn, ob es eine gute Idee ist oder nicht.

Sind .pyc Dateien unabhängig vom zugrunde liegenden Betriebssystem? Würde beispielsweise eine Datei .pyc, die auf einem 64-Bit-Linux-Computer erstellt wurde, auf einem 32-Bit-Windows-Computer ausgeführt werden?

Ich habe festgestellt, dass .pyc Datei should be compatible across bugfix releases, aber was ist mit Major und Minor Releases? Zum Beispiel wäre eine mit Python 3.1.5 generierte Datei kompatibel zu Python 3.2.x? Oder wäre eine .pyc Datei, die mit Python 2.7.3 generiert wurde, mit einer Python 3.x Version kompatibel?

Edit:

In erster Linie kann ich Interessengruppen beschwichtigen, die unbequem zu verteilen Quellen sind. Das Verteilen von .pyc ohne Quellen kann ihnen ein gewisses Maß an Komfort geben, da es den zusätzlichen Schritt des Dekompilierens erfordern würde, um an die Quellen zu kommen, selbst wenn dieser Schritt etwas trivial ist. Gerade genug von einer Barriere, um ehrliche Leute ehrlich zu halten.

Antwort

16

Zum Beispiel wäre eine mit Python 3.1.5 generierte Datei kompatibel mit Python 3.2.x?

Nr

Oder wäre eine .pyc Datei mit Python erzeugt 2.7.3 mit einer Python 3.x-Version kompatibel sein?

Doppelt nicht.

Ich überlege mir, nur die .pyc-Dateien ohne ihre entsprechenden .py-Quellen zu verteilen.

Python-Bytecode ist High-Level und trivial dekompilierbar.

+0

Hat mich neugierig gemacht, gibt es eine (empfohlene oder irgendeine) Möglichkeit, Python-Code irgendwie zu verschleiern und zu verteilen? – Levon

+6

@Levon: Ich weiß nicht, ich mache solche dummen Sachen nicht. –

+3

Und trotzdem habe ich dich noch upvoted :-) – Levon

4

Sie könnten die .pyc-Dateien nur verteilen. Wie Cat erwähnt hat, wäre es nicht mit verschiedenen Hauptversionen von Python kompatibel. Es könnte einige Leute daran hindern, den Quellcode anzusehen, aber die .pyc-Dateien sind sehr leicht zu dekompilieren. Grundsätzlich, wenn Sie es kompilieren können, können Sie es dekompilieren.

Sie könnten einen Binärpacker wie py2exe/py2app/freeze verwenden. Ich habe sie nie ausprobiert, aber jemand könnte sie immer noch dekompilieren, wenn sie es wollten.

1

Wie Cat sagte, Pyc-Dateien sind nicht Cross-Version sicher. Was Sie jedoch vor den Benutzern verbergen wollen, bestimmt, was Sie tun müssen.

Wie für Quellcode gibt es keine gute Möglichkeit, Python-Quellcode in einer verteilten Anwendung zu verbergen. Wenn Sie nur versuchen, bestimmte Details zu verbergen, können Sie diese in eine C-Erweiterung packen - was viel schwerer zu dekompilieren wäre.

Wenn Sie sich also Gedanken über die Verwendung von Code machen, legen Sie eine Lizenz für den Code, der nicht verwendet wird, oder übersetzen Sie die Abschnitte, die nicht gestohlen werden sollen, in eine kompilierte Sprache. Wenn Sie möchten, dass Code nicht offensichtlich Python ist, können Sie eine ausführbare Binärdatei erstellen, die den Python-Code umschließt (die eigentlichen Details werden jedoch nicht ausgeblendet, wenn jemand sie aus der Datei extrahiert).