Mist, jetzt habe ich auch noch Streamlit gefunden. Jetzt geht mir langsam die Zeit aus...
Flask Projekt auf einem anderen Rechner installieren
-
So als Hobby Entwickler hat man manchmal harte Aufgaben
Ich habe eines meiner Flask-Projekte mal auf meinem Testrechner versuchsweise installiert um zu schauen, ob das klappt und wo es überall hakt.
Repo clonen
Mein Projekt liegt auf gitlab.com und ist nicht privat. Somit ist der Zugriff nicht trivial. Man benötigt einen Access Token, den man sich folgendermaßen erstellen kann.
Man klickt auf das Icon und dann auf Preferences. Danach auf Access Tokens. Dort erstellt man sich einen.
Bevor man das Projekt holt, legt man einen Ordner an und wechselt in dieses Verzeichnis. Dann kann man sich das Projekt holen.
git clone <Repo-URL>
Danach wird man nach dem Benutzer und dem Token gefragt. Um diese Abfrage in Zukunft zu verhindern, kann man folgenden Git Befehl benutzen.
git config --global credential.helper store
Ok, nun war das Repo auf meinem Rechner.
Virtuelle Umgebung
Um mit Python und seinen ganzen Paketen vernünftig arbeiten zu können, benötigt man eine virtuelle Umgebung. Stellt Euch das bitte wie einen Container vor, ein installiertes Paket liegt nur dort und ist für das Hauptsystem meines Rechners nicht vorhanden. Es gibt mehrere Möglichkeiten das zu verwalten, ich mache das wie folgt. Wir befinden uns in dem geclonten Verzeichnis.
python3.11 -m venv .venv
Damit wird die virtuelle Umgebung angelegt. Dazu wird automatisch der Ordner .venv erzeugt. Wenn man mal Probleme hat, kann man diesen auch löschen und von vorne beginnen.
Diese Umgebung muss aktiviert werden.
source .venv/bin/activate
Auf der Kommandozeile wird das jetzt angezeigt, das man sich in der virtuellen Umgebung befindet. Das ist sehr unterschiedlich von Distribution zu Distribution und auch abhängig davon welche Konsole man benutzt.
Python Module
Wenn man jetzt die Anwendung mit
python app.py
startet, bekommt man eine Fehlermeldung.
ModulNotFoundError: No module named 'flask'
Ok, da wir uns in einer virtuellen Umgebung befindet, sind dort keinerlei Module installiert. Das heißt, wir müssen das jetzt nachholen. Dazu habe ich auf dem Entwicklungsrechner folgenden Befehl benutzt.
pip freeze > requirements.txt
Dieser Befehl schaut nach, welche Module installiert sind und erzeugt eine Liste. Ein Auszug
amqp==5.2.0 appdirs==1.4.4 argon2==0.1.10 argon2-cffi==23.1.0 argon2-cffi-bindings==21.2.0 asgiref==3.7.2 asttokens==2.4.1 async-timeout==4.0.3
Diese Datei befindet sich jetzt innerhalb des Repositorys. Aufpassen, bei mir war das noch unter 'Unversioned Files' was mir doch ein paar Probleme bereitet hatte.
Ok, wie installieren wir jetzt die Module? Mit
pip install -r requirements.txt
werden die dann alle installiert. Danach sollte das Projekt laufen.
Andere Abhängigkeiten
Mein Projekt nutzt selbst signierte Zertifikate für den Webbrowser, der die Anwendung anzeigt.
############################################### # Main loop ############################################### if __name__ == "__main__": app.run(debug=True, ssl_context=('cert.pem', 'key.pem'))
Die kann man mit folgendem Befehl eben erzeugen.
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes
Danach war das auch erledigt. Ein weitere Abhängigkeit war das Redis Datenbank Passwort. Dieses habe ich in einer .env abgelegt. Inhalt
REDIS_PASSWORD = '<PASSWORD>'
Danach lief die Anwendung. Zu dem Redis Datenbank Problem, was mir dann aufgefallen ist, gibt es einen extra Beitrag.
Vorsicht
Das ist so nicht für den produktiven Einsatz gedacht.
debug=True
Da fehlt noch einiges für, aber das ist hier auch nur ein Entwicklungsrechner.