How to solve import errors while trying to deploy Flask using WSGI on Apache2
Solution 1
Thanks to zarf
and damjan
on irc.freenode.org at #pocoo, they were able to help me get this fixed. The problem was the PythonPath was not correct. We fixed this by using the following wsgi.py
import sys
sys.path.insert(0, "/sites/flaskfirst")
from app import app
application = app
Solution 2
I used your solution to get it working but it kept duplicating the path in sys.path (you can write it out to see if it happens to you) so I made a little modification:
import sys
flaskfirst = "/sites/flaskfirst"
if not flaskfirst in sys.path:
sys.path.insert(0, flaskfirst)
from app import app
application = app
That way it's only included once
Shane Reustle
Updated on October 20, 2020Comments
-
Shane Reustle over 3 years
I am having an issue deploying a flask app on apache2 using wsgi. I have posted the error logs and config files below. I have tried moving things around, renaming them, etc, but all give me an internal server error. Not sure why I'm getting the import error. Any input / suggestions are appreciated, thanks!
Here is my apache error.log
[Sun Sep 12 20:47:59 2010] [error] [client] mod_wsgi (pid=9753): Target WSGI script '/sites/flaskfirst/wsgi.py' cannot be loaded as Python module. [Sun Sep 12 20:47:59 2010] [error] [client] mod_wsgi (pid=9753): Exception occurred processing WSGI script '/sites/flaskfirst/wsgi.py'. [Sun Sep 12 20:47:59 2010] [error] [client] Traceback (most recent call last): [Sun Sep 12 20:47:59 2010] [error] [client] File "/sites/flaskfirst/wsgi.py", line 1, in <module> [Sun Sep 12 20:47:59 2010] [error] [client] from app import app as application [Sun Sep 12 20:47:59 2010] [error] [client] ImportError: No module named app
wsgi.py
# This is wsgi.py from app import app as application
app.py
# This is app.py from flask import Flask, render_template import settings app = Flask(__name__) app.debug = settings.DEBUG from views.homepage import * from views.events import * from views.submit import * from views.feed import * if __name__ == "__main__": app.run()
Here is the basics of the directory tree, to give you an idea.
/flaskfirst/ /static/ /templates/ /views/ __init__.py app.py wsgi.py
Here is the apache virtualhost file
<VirtualHost *:80> ServerAdmin [email protected] ServerName crath.org DocumentRoot /sites/flaskfirst # WSGI Settings WSGIScriptAlias / /sites/flaskfirst/wsgi.py WSGIDaemonProcess flaskfirst user=sreustle group=general processes=1 threads=10 WSGIProcessGroup flaskfirst # Static Directories Alias /static /sites/flaskfirst/static/ <Location "/static"> SetHandler None </Location> </VirtualHost>
-
chris almost 12 yearsWas having the same issue. I added it to
WSGIDaemonProcess appName python-path=/home/...
in my httpd config file. Not sure if that is the correct place or not, but FWIW is an option. More about WSGIDaemonProcess: [link] (code.google.com/p/modwsgi/wiki/…) -
Roomm almost 8 yearsThanks! You saved my day!!