Python und ich

Eher nur als Erinnerung an mich selbst… Speicher dir vor großen Updates des Systems die Paketliste deines virtualenvs ab! Schnell und einfach und trotzdem potentiell frustrierend. Ein Systemupdate ist schnell mal geschehen und auf einmal geht nichts mehr wie es soll…

Als erstes muss ich endlich mal lernen in alle python module, welche zum Deployment entwickelt werden einfach immer die Zeile einzufügen.

1
# -*- coding: utf-8 -*-

oder ich teste mal

1
from __future__ import unicode_literals

wonach sich die Unicode Strings in Python2, wie in Python3 verhalten sollen.

Das könnte mich in Zukunft eventuell vor Schmerzen bewahren…

Als zweites haben wir das Problem von durch Systemupdates unbrauchbar gemachten Virtualenvs. Auf einmal gehen diese ganzen Symlinks nicht mehr, es kommen verschiedenste Fehlermeldungen zu fehlenden locales oder ähnlichem.

Bei SO wird auch gesagt, ein neues Virtualenv zu erstellen ist einfacher, als ein großes Update zu machen.

Nur zur Dokumentation:

1
2
3
4
5
6
7
8
9
10
11
# preserve installed packages
source /path/to/venv/bin/activate
pip freeze > requirements.txt
deactivate
# careful now, this destroys all
mv /path/to/venv /path/to/env_backup
# apply base changes
virtualenv --system-site-packages /path/to/venv
source /path/to/venv/bin/activate
pip install -r requirements.txt

Da ich leider bei einem Hoster erst zu spät auf die Idee kam, mir die Paketliste zu erzeugen, schreibe ich diesen Beitrag überhaupt. Hier war die Lösung, das alte env zu verschieben, statt es sofort zu löschen. Aber so konnte ich unter /path/to/env/lib/python3.4/site-packages/ alle installierten Pakete sehen und mit pip install package-name==VERSION im neuen Virtualenv installieren.