flask funktioniert aber mit apache2 kommt ImportError

Django, Flask, Bottle, WSGI, CGI…
werdas34
User
Beiträge: 11
Registriert: Mittwoch 21. März 2018, 15:15

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'
Benutzeravatar
__blackjack__
User
Beiträge: 13111
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@werdas34: Wie/Wo ist Flask denn installiert und nimmt Apache per WSGI auch das Python für das Flask installiert ist?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
werdas34
User
Beiträge: 11
Registriert: Mittwoch 21. März 2018, 15:15

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.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

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
Benutzeravatar
__blackjack__
User
Beiträge: 13111
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
werdas34
User
Beiträge: 11
Registriert: Mittwoch 21. März 2018, 15:15

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.
Benutzeravatar
__blackjack__
User
Beiträge: 13111
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
werdas34
User
Beiträge: 11
Registriert: Mittwoch 21. März 2018, 15:15

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.
Benutzeravatar
__blackjack__
User
Beiträge: 13111
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

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
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

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?
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

Hast du die Frage mal in die Google-Suchmaske geworfen?
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

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
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

Danke
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

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?
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@naheliegend: natürlich kannst Du auch lokal nginx oder Apache installieren. Wo ist da das Problem?
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

Das Wissen ist wie immer das Problem, aber ich versuche das mal mit nginx + Gunicorn und Flask
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

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
naheliegend
User
Beiträge: 439
Registriert: Mittwoch 8. August 2018, 16:42

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?
__backjack__: "Jemand der VB oder PHP kann, der also was Programmieren angeht irgendwo im negativen Bereich liegt (...)"
__deets__
User
Beiträge: 14541
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Antworten