Seite 1 von 2

flask funktioniert aber mit apache2 kommt ImportError

Verfasst: Freitag 25. September 2020, 15:02
von werdas34
Hallo,

wollte zum ersten mal einen Webserver aufsetzen mit apache2 und flask.
Und es funktioniert nicht so ganz. Die entsprechende Seite zeigt einen 500 Internal Server Error an.
Im log steht, es liegt ein wsgi-Error vor.
Der Fehler lautet:
ModuleNotFoundError: No module named 'flask'

Habe mal nachgeschaut ob flask installiert ist

Code: Alles auswählen

flask --version
Python 3.6.9
Flask 1.1.2
Werkzeug 1.0.1 
flask ist also installiert Auch wenn ich eine kleine Anwendung nur in flask starte, funktioniert die Anwendung. Er kann auch flask ausführen.
Deswegen bin ich erst recht ratlos.
Jemand ne Idee?

Hier mal die entsprechende wsgi Datei

Code: Alles auswählen

#! /usr/bin/python3
import sys
import logging
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0, "/var/www/FlaskApp/")

from FlaskApp import app as application
application.secret_key = 'Add your secret key'

Re: flask funktioniert aber mit apache2 kommt ImportError

Verfasst: Freitag 25. September 2020, 15:20
von __blackjack__
@werdas34: Wie/Wo ist Flask denn installiert und nimmt Apache per WSGI auch das Python für das Flask installiert ist?

Re: flask funktioniert aber mit apache2 kommt ImportError

Verfasst: Freitag 25. September 2020, 16:05
von werdas34
Ich schätze du willst auf Python2 und Python3 hinaus. Sonst weiß ich nicht was du meinst.

Ich habe flask über pip3 install flask installiert. Auch meine Testanwendung läuft unter Python3.6.

Ob Apache die richtige Version nimmt.. Also die wsgi hat die Shebang mit python3. Also normalerweise sollte er python3 nutzen.

Re: flask funktioniert aber mit apache2 kommt ImportError

Verfasst: Freitag 25. September 2020, 16:40
von noisefloor
Hallo,

Code: Alles auswählen

Ich habe flask über pip3 install flask installiert. 
Dann hast du Flask für dich als Nutzer installiert und nicht systemweit. Was auch soweit ok ist - nur läuft der Apache-Server mit anderen Nutzerrechten und "sieht" somit das Flask-Modul nicht.

Du kannst jetzt entweder Flask systemweit installieren oder das IMHO inzwischen gängigere Setup nutzen: deine App wird über den WSGI-Server Gunicorn (welches ebenfalls mit deinen Nutzerechten läuft) ausgeliefert und Apache (oder nginx) sitzt als Reverse-Proxy davor. Klingt kompliziert, ist es aber nicht. Wenn das ganz irgendwo nur intern läuft, kannst du auch den Apache weg lassen und lieferst direkt via Gunicorn aus.

Gruß, noisefloor

Re: flask funktioniert aber mit apache2 kommt ImportError

Verfasst: Freitag 25. September 2020, 17:04
von __blackjack__
@werdas34: Apaches `modwsgi` ist der Shebang vollkommen egal. Dieses Apache-Modul ist gegen eine `libpython*` gelinkt und *genau* für *dieses* Python musst Du auch die Module installiert haben. Neben der Anmerkungen von noisefloor, die da noch mal on top gilt.

Bei Debian sollte es ein `…-mod-wsgi`-Paket für Python 2 und ein `…-mod-wsgi-py3`-Paket für Python 3 geben. Und man kann nur eines von beiden installieren. Die schliessen sich gegenseitig aus. Du solltest also sicherstellen, dass Du das für Python 3 installiert hast.

Re: flask funktioniert aber mit apache2 kommt ImportError

Verfasst: Freitag 25. September 2020, 18:09
von werdas34
Gunicorn hätte ich mal probiert, da so wie ich es mal gesehen hab sehr einfach zu handhaben und zum starten ist.
Quasi installieren und dann mit

Code: Alles auswählen

gunicorn App:app
zu starten. Hat bei mir so nicht funktioniert.

Ich habe mal nachgeschaut und habe "…-mod-wsgi-py3" installiert. Daran kann es nicht liegen.

Oder welcher Dienst wäre am besten für mich geeignet?
Brauche nur einen, um mich mit Webserver vertraut zu machen (vorallem APIs).
Zu Testzwecken eben. Ideal wäre wenn man ihn ohne viel drumherum starten kann. Also Z.B WebserverDienst (xyz), dann

Code: Alles auswählen

 xyz FlaskProjekt
und das Ding ist online. Also wenig extra Konfiguration braucht.

Re: flask funktioniert aber mit apache2 kommt ImportError

Verfasst: Freitag 25. September 2020, 18:13
von __blackjack__
@werdas34: Falls Du einen suchst bei dem Du Dich mit nichts beschäftigen muss und ”online” tatsächlich für jedermann zugänglich meint, dann kann man keinen Empfehlen.

Was willst Du denn genau machen?

Re: flask funktioniert aber mit apache2 kommt ImportError

Verfasst: Samstag 26. September 2020, 12:34
von werdas34
Will mich mal mit APIs und Webserver bisschen vertraut machen. Also kein konkretes Projekt nur einfach zum testen.

Auf einen Laptop würde ich den Webserver installieren und eine API_Schnittstelle (mit flask) schreiben.
Mit einem anderen Laptop (quasi als Client) auf die API zugreifen und die Daten dann auswerten.

Re: flask funktioniert aber mit apache2 kommt ImportError

Verfasst: Samstag 26. September 2020, 20:28
von __blackjack__
Bin mir immer noch nicht sicher wo der Fokus liegt. Wenn es nur Flask alleine ist, dann reicht vielleicht der mitgelieferte Testserver. Wenn es mehr darum geht auch mal auszuprobieren das ”wie in echt” aufzusetzen, dann kommst Du um einen Webserver eher nicht herum, aber da ist dann zwangsläufig auch das Thema Webserver und seine Konfiguration dabei, und das kann in bestimmten Situationen dann auch mal etwas fummelig werden und einlesen/-arbeiten in das Thema erfordern.

Im Produktiveinsatz kommt auch gerne mal ein Anwendungsserver wie Gunicorn zum Einsatz, oft in Verbindung mit einem Webserver als „reverse proxy“ konfiguriert. Was dann auch wieder Konfiguration von Gunicorn und Webserver mit sich bringt.

Re: flask funktioniert aber mit apache2 kommt ImportError

Verfasst: Sonntag 27. September 2020, 19:15
von noisefloor
Hallo,

wenn du das lokal zum probieren & lernen betreiben willst, dann nimm' den Entwicklungsserver von Flask. Der ist genau dafür gemacht.

Das gut bei Flask ist ja, dass du die Applikation später ja trotzdem mit minimalem Aufwand via WSGI ausliefern kannst.

Gruß, noisefloor

Re: flask funktioniert aber mit apache2 kommt ImportError

Verfasst: Montag 30. November 2020, 09:37
von naheliegend
noisefloor hat geschrieben: Sonntag 27. September 2020, 19:15 wenn du das lokal zum probieren & lernen betreiben willst, dann nimm' den Entwicklungsserver von Flask. Der ist genau dafür gemacht.

Das gut bei Flask ist ja, dass du die Applikation später ja trotzdem mit minimalem Aufwand via WSGI ausliefern kannst.
Was genau macht WSGI?

Re: flask funktioniert aber mit apache2 kommt ImportError

Verfasst: Montag 30. November 2020, 09:45
von sparrow
Hast du die Frage mal in die Google-Suchmaske geworfen?

Re: flask funktioniert aber mit apache2 kommt ImportError

Verfasst: Montag 30. November 2020, 09:56
von noisefloor
Hallo,
Was genau macht WSGI?
WSGI ist DIE Standardschnittstelle für Python Webprogrammierung. Wenn du dicht ernsthaft mit Webprogrammierung und Python beschäftigst, aber noch nie von WSGI gelesen hast, dann hast du was verpasst und solltest noch mal 2 Schritte zurück gehen.

Gruß, noisefloor

Re: flask funktioniert aber mit apache2 kommt ImportError

Verfasst: Montag 30. November 2020, 12:47
von naheliegend
Danke

Re: flask funktioniert aber mit apache2 kommt ImportError

Verfasst: Montag 30. November 2020, 14:16
von naheliegend
Vielleicht ist das (wieder) eine dumme Frage, aber vielleicht hilft es auch anderen Menschen. Ich habe noch nie etwas auf einem Server deployed . Kann ich auf meinem lokalen Rechner ein Deployment von meiner Flask-App simulieren? Also nginx + Gunicorn oder Apache installieren und dann meine Flask App darauf laufen lassen? Oder ist das Quatsch und ich sollte bei dem integrierten Flaskentwicklungsserver bleiben?

Re: flask funktioniert aber mit apache2 kommt ImportError

Verfasst: Montag 30. November 2020, 14:27
von Sirius3
@naheliegend: natürlich kannst Du auch lokal nginx oder Apache installieren. Wo ist da das Problem?

Re: flask funktioniert aber mit apache2 kommt ImportError

Verfasst: Montag 30. November 2020, 16:06
von naheliegend
Das Wissen ist wie immer das Problem, aber ich versuche das mal mit nginx + Gunicorn und Flask

Re: flask funktioniert aber mit apache2 kommt ImportError

Verfasst: Montag 30. November 2020, 18:17
von noisefloor
Hallo,

der Server ist ja am Ende auch nur ein Rechner wie deiner. Nur das da halt keine Desktopumgebung drauf läuft. Aber Python ist auf dem Server genau so Python wie auf deinem Rechner, genau so wie gunicorn, nginx und Flask.

Da das Setup aus nginx + gunicorn + Flask (bzw. jedem anderen WSGI-fähigen Framework) sehr gängig ist, findest du da sicher bergeweise Anleitungen im Netz.

Tipp: erst mit gunicorn + Flask anfangen. Wenn das läuft noch nginx als Reverse-Proxy davor setzen.

Gruß, noisefloor

Re: flask funktioniert aber mit apache2 kommt ImportError

Verfasst: Montag 30. November 2020, 19:16
von naheliegend
Ist es nur:

Code: Alles auswählen

gunicorn -w 4 -b 127.0.0.1:4000 myproject:app
was ich ausführen muss, damit ich meine flask-app über Gunicorn laufen lasse?
Ich habe ja jetzt 4 worker erstellt. Heißt das, dass ich auch nur 4 threads gleichzeitig erstellen kann? Bisschen wenig, oder?

Re: flask funktioniert aber mit apache2 kommt ImportError

Verfasst: Montag 30. November 2020, 19:27
von __deets__
Mit wie vielen Browsern willst du den gleichzeitig auf dein Entwicklungssystem draufhauen, damit die 4 Worker in die Knie gehen? Statische Inhalte liefert ja der nginx.