Skip to content

Flask Projekt auf einem anderen Rechner installieren

Python3
  • 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.

  • 0 Stimmen
    2 Beiträge
    349 Aufrufe
    FrankMF
    Ich habe den Sonntag mal genutzt um ein wenig was einzubauen. Einmal habe ich mit datatables.net die Tabelle etwas funktionaler gestaltet. [image: 1736705735786-00a95363-1f41-4bbf-884a-34f21aea81e4-grafik.png] Man kann nun suchen, sortieren und wenn man mehr als 10 Datenpunkte hat, hat die Tabelle auch Pagination. Ein nettes Projekt, macht einiges einfacher Das nächste, ich hatte es im Video ja kurz erwähnt, mir fehlte ja noch die Restore Funktion von Restic. Ok, ist jetzt auch drin. Da die Benutzerverwaltung mittlerweile komplett eingebaut ist, werde ich demnächst meine Test Datenbanken und alles was damit zu tuen hat, aus dem Code entfernen. Brauch ich jetzt nicht mehr. Habe jetzt zwei Benutzer, einen Produktiven und einen zum Testen. Langfristig steht auch noch eine zweite Sprache auf dem Zettel. Aber, dafür muss ich Lust haben, das Thema juckt nicht so richtig
  • Pycharm - Interpreter Settings

    Python3
    1
    2
    0 Stimmen
    1 Beiträge
    134 Aufrufe
    Niemand hat geantwortet
  • Redis Stack?

    Redis
    1
    1
    0 Stimmen
    1 Beiträge
    142 Aufrufe
    Niemand hat geantwortet
  • NodeBB - v3.7.0

    NodeBB
    1
    0 Stimmen
    1 Beiträge
    110 Aufrufe
    Niemand hat geantwortet
  • Flatpak - Signal

    Linux
    1
    0 Stimmen
    1 Beiträge
    110 Aufrufe
    Niemand hat geantwortet
  • FrOSCon 18 - Bericht

    Linux
    2
    1
    0 Stimmen
    2 Beiträge
    571 Aufrufe
    FrankMF
    Und man soll ja auch was mitnehmen.... [image: 1691603320257-screenshot_20230809_194620.png] Das ist Semaphore, installiert in einer VM auf meinem Proxmox.
  • PyWebIO - put_buttons

    PyWebIO
    2
    1
    0 Stimmen
    2 Beiträge
    189 Aufrufe
    FrankMF
    Und noch eine kleine Übung, wie man den Buttton abhängig von einem Value enabled/disabled # we build header and tdata for table tab_mount = [] for count, value in enumerate(backups): if count == 0: tab_mount.append(['No.', 'Backup name of the restic data backup', 'Actions']) if backups[value].init == "0": tab_mount.append([count + 1, backups[count].name, put_buttons([ dict(label='Mount', value='Mount', color='primary', disabled=True), dict(label='UMount', value='UMount', color='primary', disabled=True), dict(label='Restore', value='Restore', color='primary', disabled=True), ] , onclick=partial(actions, count + 1)) ]) else: tab_mount.append([count + 1, backups[count].name, put_buttons([ dict(label='Mount', value='Mount', color='primary'), dict(label='UMount', value='UMount', color='primary'), dict(label='Restore', value='Restore', color='primary'), ], onclick=partial(actions, count + 1)) ])
  • FAN control OMV Auyfan 0.10.12: gitlab-ci-linux-build-184, Kernel 5.6

    Linux
    12
    1 Stimmen
    12 Beiträge
    1k Aufrufe
    M
    Hi, since I'm currently change my rockpro64 setup I came across this. With the kernel from ayufan you need to set PWM_CTL to /sys/devices/platform/pwm-fan/hwmon/hwmon3/pwm1 for my self compiled one I need /sys/devices/platform/pwm-fan/hwmon/hwmon0/pwm1 But I got it only working with one entry for PWM_CTL e.g. PWM_CTL = "/sys/devices/platform/pwm-fan/hwmon/hwmon0/pwm1", after that you need to start ats again sudo systemctl stop ats sudo systemctl start ats initially the fan should start immediately for a short period of time. In case it is even a different one on your kernel you can find the right one using this command. sudo find /sys -name pwm1 | grep hwmon So far I'm not sure which kernel parameter or modul changes this. Martin