Frage mich gerade wie man am einfachsten ein erstelltes virtualenv up-to-date hält?
Es gibt natürlich pip install --upgrade SomePackage aber nicht sowas, wie ein apt-get dist-upgrade
Also etwas was jedes installierte Paket aktualisiert und gleich die --editable dazu...
Oder hab ich was übersehen?
In PyLucid liefer ich zwar eine fast_update.py script mit, um die editables zu updaten, aber das ist nicht so schön: https://github.com/jedie/PyLucid/blob/m ... _update.py
Im Grunde wird ein git pull origin bzw. svn update für alle editables in /src/ gemacht. Allerdings wird dabei z.b. die Versionnummer nicht angepasst.
Wie kann man also ein virtualenv am einfachsten aktuell halten?
Wie ein virtualenv aktuell halten?
@jens: So ohne weiteres kann man die in einem virtualenv installierten Pakete nicht aktuell halten, schon weil man per se nicht einfach zwischen Pakete innerhalb und außerhalb der Umgebung unterscheiden kann. Deswegen reicht es nicht, mithilfe der setuptools-API über alle installierten "Distribution"s zu iterieren.
Meine Empfehlung wäre einfach, alle Abhängigkeiten in einer "requirements"-Datei zusammenzufassen. Dann reicht zur Aktualisierung ein periodisches "pip install -U -r requirements.txt".
Das schließt natürlich "editables" aus (ich nehme an, dass Du damit "pip install -e" meinst). Wie man die „aktualisieren“ sollte, erschließt sich mir allerdings nicht so ganz. Solche Pakete sind ja immer aktuell, dass ist ja gerade der Sinn von "-e".
Meine Empfehlung wäre einfach, alle Abhängigkeiten in einer "requirements"-Datei zusammenzufassen. Dann reicht zur Aktualisierung ein periodisches "pip install -U -r requirements.txt".
Das schließt natürlich "editables" aus (ich nehme an, dass Du damit "pip install -e" meinst). Wie man die „aktualisieren“ sollte, erschließt sich mir allerdings nicht so ganz. Solche Pakete sind ja immer aktuell, dass ist ja gerade der Sinn von "-e".
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Wieso das? Läuft bei dir ein Deamon der die git/svn repos aktualisiertlunar hat geschrieben:Solche Pakete sind ja immer aktuell, dass ist ja gerade der Sinn von "-e".
Aber das Stichwort mit der requirements.txt Datei ist ganz gut. Hatte mir auch schon mal überlegt so eine Datei anzulegen...
z.Z. liegen die "requirements"-Daten in einem virtualenv bootstrap script: https://github.com/jedie/PyLucid-boot/b ... id-boot.py
Das ist aus dem Grunde, weil man bei meinem bootstrap script wählen kann, wie die editables ("pip install -e") installieren sollen:
- * über SVN (github svn gateway)
* über git readonly clone
* über git mit push access
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Ein andere Idee: Kann man in einem bestehenden virtualenv nicht eine Liste der mit pip installieren Dinge herraus bekommen?
Das wäre nett, dann könnte man mit einem allgemeinen Skript ein update ausführen. Noch netter wäre es, wenn pip das direkt kann... Also ein "pip install -U" ohne das man ein "-r requirements.txt" anhängen müßte...
EDIT: Ah, wird schon schon dran gearbeitet: https://github.com/pypa/pip/issues/59 bzw.: https://bitbucket.org/khightower/pip/sr ... upgrade.py
EDIT2: pip freeze --local macht schon mal was in die richtige Richtung... Man erhält eine Liste aller installierten Pakete im virtualenv... Auch die editables, mit url...
Dieses upgrade.py Skript, spukt bei meinem Tests alle Pakete die installiert sind, also auch die globalen (so wie eine freeze ohne --local)
Das wäre nett, dann könnte man mit einem allgemeinen Skript ein update ausführen. Noch netter wäre es, wenn pip das direkt kann... Also ein "pip install -U" ohne das man ein "-r requirements.txt" anhängen müßte...
EDIT: Ah, wird schon schon dran gearbeitet: https://github.com/pypa/pip/issues/59 bzw.: https://bitbucket.org/khightower/pip/sr ... upgrade.py
EDIT2: pip freeze --local macht schon mal was in die richtige Richtung... Man erhält eine Liste aller installierten Pakete im virtualenv... Auch die editables, mit url...
Dieses upgrade.py Skript, spukt bei meinem Tests alle Pakete die installiert sind, also auch die globalen (so wie eine freeze ohne --local)
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Hab ein fork von pip gemacht und ein "Upgrade all local installed packages" gemacht:
https://github.com/jedie/pip/commit/7a3 ... 7ccf420dd5
bzw.:
https://github.com/pypa/pip/pull/313
ich glaube ich bastle noch ein standalone skript, was man direkt nutzten kann, bis es im offiziellen pip angekommen ist...
https://github.com/jedie/pip/commit/7a3 ... 7ccf420dd5
bzw.:
https://github.com/pypa/pip/pull/313
ich glaube ich bastle noch ein standalone skript, was man direkt nutzten kann, bis es im offiziellen pip angekommen ist...
Nein, mir ist nur der Unterschied zwischen Paketverwaltung und Versionskontrolle bewusstjens hat geschrieben:Wieso das? Läuft bei dir ein Deamon der die git/svn repos aktualisiertlunar hat geschrieben:Solche Pakete sind ja immer aktuell, dass ist ja gerade der Sinn von "-e".
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
So... Hab in django-tools das Skript upgrade_virtualenv.py
Das ruft im Grunde nur pip install --upgrade mit allen lokal im virtualenv installieren Paketen und editables...
Mehr Informationen: http://www.pylucid.org/de/blog/221/scri ... irtualenv/
Doch bei den editables macht pip eigentlich:
Wenn ich aber danach nochmal ein git pull origin master mache, sehe ich das erst dann Änderungen eingespielt werden... Warum?
EDIT: Es soll wohl an einer zu alten Version von pip liegen...
Das ruft im Grunde nur pip install --upgrade mit allen lokal im virtualenv installieren Paketen und editables...
Mehr Informationen: http://www.pylucid.org/de/blog/221/scri ... irtualenv/
Doch bei den editables macht pip eigentlich:
Code: Alles auswählen
git fetch -q
git checkout -q -f master
EDIT: Es soll wohl an einer zu alten Version von pip liegen...
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Mein Skript funktioniert dennoch nicht richtig... Denn die Informationen die hier raus kommen, sind falsch:
Normalerweise sollten die "-e" pakete == req.editable == true sein... Ist es aber komischerweise nicht... bzw. nicht immer.
Obwohl pip freeze --local immer das richtige Anzeigt.
Code: Alles auswählen
for dist in get_installed_distributions(local_only=True):
req = pip.FrozenRequirement.from_dist(dist, dependency_links=dependency_links)
if not req.editable:
packages.append(req.name)
Obwohl pip freeze --local immer das richtige Anzeigt.
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Hab dazu mal https://github.com/pypa/pip/issues/319 eröffnet...
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Also in PyLucid bin ich doch wieder weg, vom "Automatischen" Update...
Nun nutzte ich wieder normale "pip requirements files".
Diese Dateien nutzte ich an mehreren Stellen, z.B. beim erzeugen des bootstrap skriptes oder in der setup.py
Ich hab auch ein eigenes kleines CLI Skript zum updaten gemacht.
Der Vorteil: Mann kann bequem ein, mehrere oder alle Pakete per "pip install --upgrade" behandeln:
(Siehe auch http://www.pylucid.org/permalink/141/bl ... irtualenv/ )
Nun nutzte ich wieder normale "pip requirements files".
Diese Dateien nutzte ich an mehreren Stellen, z.B. beim erzeugen des bootstrap skriptes oder in der setup.py
Ich hab auch ein eigenes kleines CLI Skript zum updaten gemacht.
Der Vorteil: Mann kann bequem ein, mehrere oder alle Pakete per "pip install --upgrade" behandeln:
Die Informationen dazu kommen auch aus den zentralen requirements filesWhich package should be upgraded?
(0) feedparser>=5.0.1,<5.1
(1) Pygments>=1.4,<1.5
(2) django-reversion>=1.4,<1.5
(3) django-dbtemplates>=1.1.1,<1.2
(4) django-tagging>=0.3.1,<0.4
(5) South>=0.7.3,<0.8
(6) Django>=1.3,<1.4
(7) python-creole==0.6
(8) django-dbpreferences>=0.4.2,<0.5
(9) django-tools>=0.18.1,<0.19
(10) --editable=git+git://github.com/jedie/PyLucid.git#egg=pylucid
(a) upgrade all packages
Please select (one entry or comma seperated):
(Siehe auch http://www.pylucid.org/permalink/141/bl ... irtualenv/ )