2010-12-29 3 views
8

Gibt es eine Möglichkeit, Python-Skript in Binärdatei zu kompilieren? Ich habe ein Datei-Python-Skript, das viele Module verwendet. Was ich möchte ist seine Kopie auf anderen Maschinen (freebsd), aber ohne alle benötigten Module auf jedem Host zu installieren.Wie mache ich mein Python-Skript einfach portabel? oder wie man mit allen Modulabhängigkeiten in binäre kompilieren?

Was sind mögliche Lösungen in solchen Fällen?

Vielen Dank im Voraus!

+0

möglich duplicate von [py2exe - einzelne ausführbare Datei erzeugen] (http://stackoverflow.com/questions/112698/py2exe-generate-single-executable-file) –

+2

Wie kann ich exe unter freebsd ausführen? – Andriy

+1

Die * Antwort * auf die doppelte Frage verweist eindeutig auf ** Pyinstaller **, der ausführbare Dateien für Windows, Linux und OS X macht. –

Antwort

15

Programme, die tun kann, was man sich wünschen, sind:

Aber als mentio Sie können auch ein Paket mit Verteilen erstellen und die anderen Pakete als Abhängigkeiten haben. Sie können dann pip verwenden, um dieses Paket zu installieren, und es wird alle Pakete installieren. Sie müssen jedoch immer noch Python und Pip installieren.

2

Python sucht auch nach import Modulen im aktuellen Verzeichnis, so dass Sie sie nicht im Python-Verzeichnis installieren müssen. Ihre Verteilung Dateistruktur könnte wie folgt aussehen:

main.py 
module1/ 
    __init__.py, ... 
module2/ 
    __init__.py, ... 

Wo main.py import module1, module2 hat

2

Sie wahrscheinlich ein Python-Paket von Ihrem Skript erstellen möchten. Am Ende werden Sie in der Lage sein, pip install mypackage auf jedem Host zu tun und alle erforderlichen Module werden automatisch heruntergeladen und installiert.

See this question on how to create such a package.

3

cx_freeze wird Ihre Python-Skripts an einen eigenständigen Python-Loader anhängen und ein Verzeichnis erstellen, das das Programm und die Abhängigkeiten der gemeinsamen Bibliothek enthält. Sie können dann die resultierende Verteilung auf andere Maschinen unabhängig von Python oder Ihren Modulen kopieren.

$ cat hello.py 
print "Hello, World!" 
$ ls dist/ 
datetime.so _heapq.so hello libpython2.6.so.1.0 readline.so 
$ cat hello.py 
print "Hello, World!" 
$ cxfreeze hello.py 
... <snip> ... 
$ ls dist/ 
datetime.so _heapq.so hello libpython2.6.so.1.0 readline.so 
$ ./dist/hello 
Hello, World! 

Eine bessere Antwort kann ein PIP-Paket erstellen, die diese dritte Module als Abhängigkeiten identifiziert, so kann die Installation so einfach sein wie „mypackage installieren pip; ./package“

+0

Kompiliert es tatsächlich zu C? Ich dachte, dass es wie py2exe funktioniert: Setze alle Python-Dateien in eine .zip-Datei und fuge sie mit einer kleinen ausführbaren Datei, die sie entpackt und der Python-Laufzeit zuführt. – delnan

+0

Korrekt; habe das mit dem ursprünglichen Python Freeze verknallt. Das Dienstprogramm cx-freeze verknüpft zip-komprimierte Module mit einem Stubloader. Nicht so schrecklich anders, als ich das gleiche mit MOSREF Compiler erreicht habe. – swdunlop

+0

//, Funktioniert das, wenn diese Version von Python nicht auf dem System installiert ist? –

0

I-Skript, das die Einfuhr habe Diese Module: urllib, urllib2, cookielib, BaseHTTPServer, sys, tempfile, paramiko, Protokollierung, re, OptionParser, lxml.

Wahrscheinlich möchten Sie ein Python Paket aus Ihrem Skript erstellen. Am Ende können Sie pip installieren mypackage auf jedem Host und alle erforderlichen Module werden heruntergeladen und automatisch installiert.

  1. nehme an, dass ich Skript als Python-Paket
  2. kopiert sie auf einen anderen Host
  3. gestartet installieren pip mypackage

Da ich verstanden es für Module aussehen wird, die importiert werden soll, und wird herunterladen und installieren Abhängigkeiten.

Dies ist nicht sehr gute Lösung in meinem Fall. Benutzer auf anderen Hosts (~ 20) sollten Skripts ohne zusätzliche Download-/Installationsprozeduren ausführen können.

Ich hoffe, dass cx_freeze ist, was ich brauche. Danke für Ihre Antworten.