[Python-de] requirements.txt (Was: Django Portierungstrategy???)

Thomas Güttler guettliml at thomas-guettler.de
Di Apr 26 07:32:06 EDT 2016



Am 25.04.2016 um 15:39 schrieb Christopher Arndt:
> Am 25.04.2016 um 11:45 schrieb Thomas Güttler:
>> Abhängigkeiten werden in Python so weit ich weiß über install_requires
>> in setup.py definiert.
>
> Jein. install_requires setup.py definiert "abstrakte" Abhängigkeiten.
> Feste Versionsnummern sind dort nach Möglichkeit zu vermeiden, wenn
> nötig sollte man darin höchstens Minimal- oder Maximalversionsnummern
> und direkte Abhängigkeiten festlegen.
>
> Die setup,py ist m.E. vorrangig für Python-*Pakete* gedacht. Deswegen
> sollte man davon ausgehen, dass sie in unterschiedlichen Umgebungen und
> Nutzungsszenarien ausgeführt wird (z.B. beim Paketbau für
> Distributionen; beim Entwickler, wenn er sein virtualenv für ein Projekt
> füllt; beim Testen mit tox usw.)
>
> Die requirements.txt ist auf der Projekt bzw. Applikationsebene
> angesiedelt. In ihr kann man Versionen pinnen und definiert sozusagen
> die genaue Ausführungsumgebung für die Anwendung. Es sind dort i.d.R.
> alle notwendigen Pakete, also auch die Abhängigkeiten von Abhängigkeiten
> (rekursiv) aufgeführt.
>
> Es gibt Tools, mit denen man die abstrakten Abhängigkeiten aus der
> requirements.txt (halb-)automatisch extrahieren kann. Eine naive
> Implementierung zum Einbinden in die setup.py, die für einfache Fälle
> ausreicht, habe ich zum Beispiel hier notiert:
> https://gist.github.com/SpotlightKid/486c711a3c14c70edb1a

Ich habe das früher auch gemacht. Ich bin bei einer Diskussion auf python-distuils auf
das gestoßen:

   requirements.txt and setup.py serve different purposes, requirements.txt is for an environment, setup.py is for a
   package. It doesn't make sense for a setup.py to read from a requirement.txt just like it wouldn't make sense for a
   deb package to read from a Chef cookbook.


... und es stimmt. In setup.py die req.txt einzulesen ist für mich der falsche Weg.

Für was also req.txt nehmen? Aus meiner Sicht es super um das als Ergebnis eines
CI-Laufs festzuhalten: Mit diesem Paket-Stand sind alle Tests ok. Sicherlich
gibt es vieles was damit noch nicht festgezurt ist (Python-Version, Linux, andere
Pakete die per RPM/dpkg da sein müssen und per Subprozess aufgerufen werden ...)

>
> Besser wäre m.E. aber, ein entsprechendes Skript in den Release-Prozess
> zu integrieren, das dann auch indirekte Abhängigkeiten bereinigt usw.

Stimmmt.

Was mir bisher fehlt ist der passende Begriff für das, was die req.txt beinhaltet.

Im Django-Kontext wird manchmal der Begriff "Project" verwendet. Aber so weit ich
weiß gibt es keinen Konsens in der Python-Welt.

Gruß,
   Thomas


-- 
Thomas Guettler http://www.thomas-guettler.de/


Mehr Informationen über die Mailingliste python-de