14 Stimmen

Verteilen von Python-Code mit virtualenv?

Ich möchte einige Python-Code zu verteilen, mit ein paar externen Abhängigkeiten, auf Maschinen mit nur Kern-Python installiert (und Benutzer, die nicht vertraut mit easy_install usw.).

Ich habe mich gefragt, ob virtualenv vielleicht für diesen Zweck verwendet werden kann? Ich sollte in der Lage sein, einige Bash-Skripte zu schreiben, die virtualenv (mit den passenden Paketen) auslösen und dann meinen Code ausführen aber das scheint etwas chaotisch zu sein, und ich frage mich, ob ich das Rad neu erfinden würde?

Gibt es irgendwelche einfachen Lösungen für die Verteilung von Python-Code mit Abhängigkeiten, die im Idealfall nicht erfordern sudo auf Client-Rechnern?

7voto

Vinay Sajip Punkte 89444

Sie können ein Tool wie PyInstaller zu diesem Zweck. Ihre Anwendung wird als eine einzige ausführbare Datei auf allen Plattformen erscheinen und Abhängigkeiten enthalten. Der Benutzer braucht nicht einmal Python zu installieren!

Siehe zum Beispiel meine Logbuchansicht Paket, das Abhängigkeiten von PyQt4 und ZeroMQ hat und Distributionen für Linux, Mac OSX und Windows enthält, die alle mit PyInstaller erstellt wurden.

6voto

JackLeo Punkte 4375

Aufbau - http:/
Als Beispiel sehen Sie sich mein sauberes Projekt an: http://hg.jackleo.info/hyde-0.5.3-buildout-enviroment/src Es sind nur 2 Dateien, die die Magie tun, mehr als Makefile ist optional, aber dann brauchen Sie bootstrap.py (Make-Datei lädt es, aber es läuft nur auf Linux). buildout.cfg ist die wichtigste Datei, wo Sie Abhängigkeiten und Konfiguration schreiben, wie Projekt angelegt ist.
Um bootstrap.py zu erhalten, laden Sie einfach von http://svn.zope.org/repos/main/zc.buildout/trunk/bootstrap/bootstrap.py
Dann laufen python bootstap.py y bin/buildout . Ich empfehle nicht, Buildout lokal zu installieren, obwohl es möglich ist, verwenden Sie einfach die eine Bootstrap Downloads.

Ich muss zugeben, dass Buildout nicht die einfachste Lösung ist, aber sie ist wirklich leistungsstark. Das Lernen ist also die Zeit wert.

UPDATE 2014-05-30
Da es kürzlich hochgestuft und als Antwort verwendet wurde (wahrscheinlich), möchte ich einige Änderungen mitteilen.

Erstens - Buildout wird jetzt von Github heruntergeladen https://raw.githubusercontent.com/buildout/buildout/master/bootstrap/bootstrap.py

Das Hyde-Projekt würde wahrscheinlich an den Änderungen von Buildout 2 scheitern.

Hier finden Sie bessere Beispiele http://www.buildout.org/en/latest/docs/index.html Außerdem möchte ich vorschlagen, sich den Teil "Linksammlung zu Buildout" anzusehen, er könnte Informationen für Ihr Projekt enthalten.

Zweitens bin ich persönlich mehr für das setup.py-Skript, das mit Python installiert werden kann. Mehr über die Ei-Struktur kann hier gefunden werden http://peak.telecommunity.com/DevCenter/PythonEggs und wenn Ihnen das zu unheimlich ist, schauen Sie bei Google nach (Suche nach python egg ). Meiner Meinung nach ist es einfacher als Buildout (definitiv einfacher zu debuggen) und wahrscheinlich auch nützlicher, da es einfacher verteilt und überall mit Hilfe von virtualenv oder global installiert werden kann, während man bei Buildout immer alle Skripte mit dem Quellcode bereitstellen muss.

4voto

Daniel Roseman Punkte 565786

Sie wollen Ihre virtualenv nicht weitergeben, wenn Sie das wollen. Aber Sie können verwenden pip um eine Anforderungsdatei zu erstellen - in der Regel mit dem Namen requirements.txt - und sagen Sie Ihren Benutzern, dass sie eine Virtualenv erstellen sollen, und führen Sie dann pip install -r requirements.txt , die alle Abhängigkeiten für sie installiert.

Siehe die pip-Dokumente für eine Beschreibung von das Format der Anforderungsdatei y das Pinax-Projekt ein Beispiel für ein Projekt, das dies sehr gut umsetzt.

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