Path: csiph.com!fu-berlin.de!uni-berlin.de!not-for-mail From: Christopher Arndt Newsgroups: de.comp.lang.python Subject: Re: [Python-de] CI: req.txt und PIP_INDEX_URL Date: Wed, 22 Mar 2017 18:48:36 +0100 Lines: 68 Message-ID: References: <798DC71B-CD5E-4720-BACB-FAC6DBCB518A@chrisarndt.de> <3a67a3cf-31a2-1bb4-ef78-52af5373bdfc@thomas-guettler.de> <6CB36F7C-1DBD-4BB6-BF7B-AD1A83F133E6@chrisarndt.de> Mime-Version: 1.0 (1.0) Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Trace: news.uni-berlin.de NLOvtsSz06PII2nXnVxBTA5ia9sXaPRlUo6g/fa/qvFw== Return-Path: X-Original-To: python-de@python.org Delivered-To: python-de@mail.python.org X-Virus-Scanned: Debian amavisd-new at mx1.0x20.eu X-Mailer: iPad Mail (13G36) In-Reply-To: X-BeenThere: python-de@python.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Die Deutsche Python Mailingliste List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Mailman-Original-Message-ID: <6CB36F7C-1DBD-4BB6-BF7B-AD1A83F133E6@chrisarndt.de> X-Mailman-Original-References: <798DC71B-CD5E-4720-BACB-FAC6DBCB518A@chrisarndt.de> <3a67a3cf-31a2-1bb4-ef78-52af5373bdfc@thomas-guettler.de> Xref: csiph.com de.comp.lang.python:4717 > Am 22.03.2017 um 17:44 schrieb Thomas G=C3=BCttler : >=20 > Per PIP_INDEX_URL habt f=C3=BCr verschiedene pypi-Server, und einen andere= n Paket-Stand. OK, interessant. >=20 > Macht das nicht viel Aufwand diese verschiedenen pypi-Server mit den passe= nden Paketen zu versorgen? Mit Devpi kann man auf einem Server verschiedene Paketindexe haben, die von e= inander ableiten. Wir haben eine Paketindex f=C3=BCr die Pakete der Produkti= onsumgebung (der auch aus der DMZ erreichbar ist) und einen Paketindex f=C3= =BCr die Development/Integration/Staging-Umgebung, der nur im lokalen Netz e= rreichbar ist. Der Dev-Index leitet vom Prod-Index ab, d.h. Er ist sozusagen= ein Proxy: wenn Pakete nicht im Dev-Index sind, werden sie vom Prod-Index g= eholt. Aber man kann auf den Dev-Index neuere Paketversionen hochladen, die i= m Prod-Index nicht sichtbar sind. Au=C3=9Ferdem k=C3=B6nnen auf dem Dev-Inde= x Paketversionen und deren Files =C3=BCberschrieben werden, w=C3=A4hrend auf= dem Prod-Index bei jeder =C3=84nderung eine neue Paketversion hochgeladen w= erden muss, er ist also nicht-volatil (Stichwort: Rollback). In der Praxis wird also einfach eine neue Version eines Paktes zuerst auf de= n Dev-Index hochgeladen und - wenn alles funktioniert - mit einem Befehl auf= den Prod-Index gepusht. Zus=C3=A4tzlich kann jeder Entwickler noch einen eigenen Paketindex haben, a= ber das nur nebenbei. > Eine Frage zu "-r{toxinidir}/requirements/dev.txt": Sind die Paketversione= n in dieser Datei gepinnt (also mit exakter Version zB =3D=3Da.b.c)? In einer idealen Welt: ja ;) In der Praxis sind wir leider erst dabei, das in allen Projekten Schritt f=C3= =BCr Schritt wirklich streng durchzusetzen. Momentan haben wir leider in vie= len Projekten noch nur Versionsbeschr=C3=A4nkungen (>=3Da.b, > Falls ja, wie wird diese Datei aktualisiert? Ich bin gerade dabei in unserem gr=C3=B6=C3=9Ften Projekt die Erzeugung der R= equirements-Dateien aus Vorlagen mit pip-compile (pip-tools) einzuf=C3=BChre= n. Allein durch diesen Prozess sind schon etliche Dependency-Konflikte aufge= fallen, die vorher unbemerkt blieben. Insbesondere in die Requirements f=C3=BC= rs Development (Tests, Doc-Erzeugung usw.) schleichen sich schnell Dependenc= ies ein, die wiederum andere Dependencies nach sich ziehen, die mit den Pake= tversionen, die f=C3=BCr Produktionsumgebung gepinnt sind, im Konflikt stehe= n. Es muss sich noch zeigen, ob der Weg mit pip-tools praktikabel ist, leider g= ibt es immer noch zu viele Pakete, die in ihrer setup.py irgendwelche Depend= encies fest auf eine Version pinnen, obwohl dies eigentlich gar nicht n=C3=B6= tig w=C3=A4re, oder gar einfach ihre requirements.txt unver=C3=A4ndert in di= e install_requires in der setup.py =C3=BCbernehmen. Die meisten Paketautoren= sind sich wahrscheinlich gar nicht bewusst, dass sie damit bei Anwendungen,= die ihre Pakete und noch andere Dependencies verwenden, die dies genauso ma= chen, Versions-Konflikte heraufbeschw=C3=B6ren. Aber wenn man einmal eine Vorlage f=C3=BCr die Requirements hat, aus der sic= h eine funktionierende Requirements-Datei erstellen l=C3=A4sst, kann man die= se mit pip-compile leicht aktualisieren und merkt dann sofort, wenn eine neu= e Version eines Pakets Versionskonflikte mit einer anderen Dependency mit si= ch bringt. --=20 Christopher Arndt