2012-06-11 12 views
8

Ich tauche in die Welt der Python-Anwendungen ein und gelangte in diesen Zustand der Verwirrung, in dem sich mein Kopf aufgrund all der Konzepte und Optionen dreht, mit denen ich umgehen soll.distutils, distutils2, pip und anforderungen

Frage:

Was muss ich erreichen? Stellen Sie mein Python-Projekt von der Quelle bereit, die sich auf einem Git-Server befindet. Das Deployment Tool sollte alle Abhängigkeiten erhalten und installieren, von denen die meisten über PIP verfügbar sind und über Git geladen und installiert werden müssen. Das Endergebnis sollte über Pip installierbar sein, so kann ich als etwas tun:

[~] git clone git://some/path/project.git 
[~] pip install project/ 

Kontext: Derzeit Ich versuche Distutils2 zu bekommen zu tun, was ich will, aber es scheint, dass setup.py hergestellt unter Verwendung Der Befehl 'generate-setup' spielt nicht mit Pip zusammen.

Ich wollte Distutils2 verwenden, da es für alle zukunftssicher sein soll. Aber verschiedene Dokumentationen über alle Tools sind einfach nur schrecklich (genaue Informationen gemischt mit veralteten und ungenauen Informationen) auf eine Art und Weise, die einen Mann in Frage stellt, seine geistige Gesundheit.

Also was soll ich tun? Bleib bei distutils und setup.py? Oder muss ich etwas sehen, das Buildout ist?

Könnte der Art Beantworter bitte auslegen, was ich mit einem bestimmten Tool tun soll (z. B. den Code mit Distutils2 bereitstellen, Abhängigkeiten mit PIP installieren, für Git-Abhängigkeiten ein Skript schreiben und alles zusammenkleben mit XYZ).

Bearbeiten: Ich verwende Distutils2 1.0a4, die mit den Dokumenten nicht kompatibel scheint.

Edit2: Die Frage neu formatiert, um klarer zu machen, worum es bei meiner Frage eigentlich geht.

Edit3: Dies ist mein vierter Versuch, die Verpackungs- und Distributions-Toolchain von Python zu durchbrechen. Ich versuche nicht, andere Leute dazu zu bringen, meine Arbeit für mich zu machen, aber für einen Anfänger ist es ziemlich unmöglich zu knacken, was ein bestimmtes Werkzeug tun soll, wo es beginnt und wo ein anderes endet. Vor allem wegen der funktionalen Überlappung zwischen den Werkzeugen. Ich bin nicht im Silicon Valley, umgeben von Weisen, die mich in die Geheimnisse einweihen könnten, und die öffentlich verfügbare Dokumentation nützt nichts.

Final Edit: Obwohl ich nicht wirklich darüber nachgedacht habe, virtualenv mit Buildout zu ersetzen, wenn Sie diese Frage starten. Aber während ich recherchierte, realisierte ich etwas, das ich immer wusste, aber ich kam nicht in völliger Klarheit zu mir. Es gibt viele Möglichkeiten, Python zu paketieren und zu implementieren. Es gibt auch viele Tools, mit denen Sie die Dinge erledigen können. Obwohl es zwischen den Tools erhebliche funktionale Überschneidungen gibt, entwickelt sich die Toolchain immer weiter und bisher gibt es keine klare "Standard Best Practice". Das Rüstungsrennen der Distribution Toolchain ist immer noch in vollem Gange und es ist noch kein klarer Sieger herausgekommen. Das könnte für uns Anfänger verwirrend sein, die erwarten, dass der meiste Scheiß in Python einfach funktioniert. Was ich suchte (distutils/setuptools + pip + virtualenv in einer Buildout-Mode oder sogar halbintegriert mit Buildout) ist sicherlich toolable, aber es macht einfach keinen Sinn, nicht weil es nicht möglich ist - aber weil niemand es tut. Wenn Sie dieses Niveau der Raffinesse brauchen, dann müssen Sie sich verpflichten. Persönlich habe ich beschlossen, virtualenv (für dieses Projekt) zu verlassen und Buildout zu unterstützen.

Antwort

7

Werfen Sie einen Blick auf buildout; zusammen mit einem Buildout-Plug-in namens mr.developer können Sie ein Deployment-System zusammenstellen, das alles tun wird, wonach Sie fragen.

Es gibt viele Beispiele und Präsentationen auf buildout Konfigurationen auf dem Netz, hier sind ein paar zum Einstieg:

+0

Auch wenn es nicht wirklich das war, was ich gesucht habe, hat deine Sammlung von Links den Trick gemacht, endlich die leeren Lücken in meinem Kopf in Bezug auf Buildout zu beseitigen. Vielen Dank. – JanezStupar

1

Es muss nicht schwierig sein: installieren Jenkins und Pip verwendet requirements.txt files die Pakete zu definieren, die Ihr Projekt benötigt. Danach können Sie einen Build in Jenkins konfigurieren, um verschiedene Aufgaben auszuführen, einschließlich der Installation der erforderlichen Pakete. Es kann den Quellcode von Ihrem Repository erhalten und + das gesamte Projekt installieren.

+0

Die Tatsache, dass Jenkins ein Projekt installieren kann, ist eine Voraussetzung für sein eigenes Ziel: Tests für fortlaufende Integration bereitzustellen. Aber Jenkins für Deployment-Aufgaben zu verwenden ist eine enorme Menge an Overkill! Dies ist ein ziemlich starkes Paket, wenn bessere Werkzeuge verfügbar sind! –

+0

[Fabric] (http://fabfile.org) könnte für die Bereitstellung verwendet werden – jfs