easy_install / pip oder apt-get

30

Wie in der Ubuntu- Wiki-Seite auf Rails erwähnt , wird empfohlen, dass Gems Ihre Rails / Ruby-Abhängigkeiten verwaltet.

Was ist die beste Vorgehensweise bei Python-Paketen wie Django? Soll ich sie über apt-get installieren oder easy_install / pip sie von PyPi holen lassen?

Leonard Ehrenfried
quelle

Antworten:

29

Es gibt mehrere Argumente:

  1. Verwenden Sie Repositorys / PPAs, da diese Sie mit Sicherheitskorrekturen sowohl stabil als auch auf dem neuesten Stand halten.

    Dies ist meistens wahr. Wenn Sie beispielsweise python-djangowie bisher installieren , erhalten Sie Sicherheitsupdates. Dies ist gut, da Sie nur den Überblick über apt behalten müssen, die Dinge aber noch testen müssen, bevor Sie Aktualisierungen vornehmen (obwohl das Testen jedes Mal in Ordnung sein sollte).

    Sie könnten argumentieren, dass Sie in diesem pipFall möglicherweise nie nach Updates suchen.

  2. Verwenden pipSie diese Option, um die richtigen "stabilen" Versionen zu verwenden.

    Daran besteht kein Zweifel: Die Repos hinken der realen Welt hinterher. Django ist 2.0, aber die Repos für die LTS-Version von Ubuntu (bei der viele Leute bei Servern bleiben) erhalten unter Ubuntu 16.4 lts mit Python 2 nur 1.8, aber immer noch Sicherheitsupdates.

    pipgibt Ihnen die ganze Zeit die neuesten. Sie müssen sie nur selbst aktualisieren.

  3. Ein Upgrade einer wiederverwendeten Python-Installation kann ein Albtraum sein

    Wenn Sie Ubuntu auf die nächste Version aktualisieren, werden viele Pakete aktualisiert. Vieles ändert sich. Ich weiß, in Django bedeutet dies, dass Sie auf Code-Inkompatibilitäten und Verringerungen achten müssen. Dies gilt jedoch auch für alle anderen Python-Codes.

    Das Gleiche gilt, pipaber mit pipIhnen können Sie immer nur eine Sache gleichzeitig tun. Sie wissen, was die Probleme verursacht, sodass Sie wissen, wo Sie nach dem Fix suchen müssen.

  4. pip+ virtualenvkönnen Sie die Dinge getrennt halten

    virtualenvErmöglicht tragbare, kleine Python-Umgebungen. Auf diese Weise können Sie mehrere verschiedene Python-Umgebungen nebeneinander auf demselben Computer ausführen.

    Der offensichtliche Segen scheint in der Wartung zu liegen, da Sie die Umgebung genauso wie den Code verwalten können. Auch speichern Sie die Umwelt in der zu VCS ... aber Sie sollten bedenken , dass zwölf verschiedene mit virtualenvs Mittel zwölf Umgebungen Sie auf und Aktualisierung überprüfen müssen.


Bearbeiten: Nach einer schrecklichen Reihe von Upgrades auf einem Server, um von Lucid zu Precise zu gelangen, habe ich von einer gemischten Apt + Pip-Situation (Nr. 1 und 2) auf eine reine Pip + Virtualenv-Situation (Nr. 4) umgestellt. Anstatt ein virtuelles Env pro Site zu haben, habe ich eines für ungefähr ein Dutzend Sites freigegeben. Das funktioniert erstmal.

Ich musste auch ein kleines Skript schreiben, das den Status der mit pip installierten Pakete überprüft. Wenn es Updates gibt, muss ich sie manuell anwenden (was gut ist, weil ich sie lokal teste, in einer lokalen virtuellen Umgebung). Das alles ist immer noch ein bisschen schmerzhafter als ursprünglich, aber auf lange Sicht viel besser.

Oli
quelle
10
  • Pakete aus den Repositories

    Diese sollten immer dann installiert werden, wenn Ihre Anwendung Ubuntu-spezifisch ist . Sie garantieren Ihnen eine stabile Version, die Sie auf allen Ubuntu-Rechnern installieren können. Sie werden unterstützt und sind manchmal ausgereifter als die, die Sie über pip erhalten. Wenn Sie eine Reihe von Ubuntu-Servern bereitstellen oder Ubuntu-Anwendungen schreiben, verwenden Sie diese, sofern verfügbar .

    Sie enthalten auch manchmal Ubuntu-spezifische Modifikationen.

  • pip vs easy_install

    Es gibt nicht viel darüber zu sagen, wie Django-Hacker James Bennett es ausdrückte:

    Bitte, aus Liebe zu Guido, hören Sie auf, setuptools und easy_install zu verwenden, und verwenden Sie stattdessen distutils und pip.

    Ausführliche Informationen zu den Unterschieden finden Sie unter Über das Verpacken von James Bennett (von Django) und Ein paar Korrekturen zu „Über das Verpacken“ von Ian Bicking (von Mozilla).

Wenn Sie sicher sein möchten, probieren Sie Ihre Pip-Bereitstellungen mit virtualenv aus . Auf diese Weise erhalten Sie eine isolierte Python-Umgebung, sodass Sie sicher sein können, dass Ihre App auf jedem Computer ausgeführt wird.

Warten Sie ein bisschen, ich vertraue darauf, dass einige Leute mit mir nicht einverstanden sind.

Stefano Palazzo
quelle