Issue
I am running a flask server using AWS EC2 with Apache. The issue is that the flask server doesn't recognize where the python package is.
Python packages are located at '/home/ubuntu/.local/lib/python3.8/site-packages/'
Below is the /var/www/html/flaskapp/flaskapp.py
import numpy as np
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/')
def hello_world():
return jsonify("Hello From Flask")
@app.route('/countme/<input_str>')
def count_me(input_str, methods = ['GET']):
return jsonify(input_str)
if __name__ == '__main__':
app.run()
When I try to access to my server, I get this error
ModuleNotFoundError: No module named 'numpy'
Below is 'flaskapp.wsgi'
import sys
import site
sys.path.insert(0, '/var/www/html/flaskapp')
from flaskapp import app as application
Below is '/etc/apache2/sites-enabled/000-default.conf'
<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com
WSGIDaemonProcess flaskapp threads=5 python-path=/var/www/html/flaskapp/flaskapp
WSGIScriptAlias / /var/www/html/flaskapp/flaskapp.wsgi
<Directory flaskapp>
WSGIProcessGroup flaskapp
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
Can anyone let me know what should I do for the flaskapp to find where the packages are?
Solution
You need to do the following:
- Install
mod-wsgi
for python3
sudo apt-get install libapache2-mod-wsgi-py3
This will replace libapache2-mod-wsgi and will restart the apache service.
- Add your python package path to the script located at
/etc/apache2/sites-enabled/000-default.conf
WSGIPythonHome "/usr/local/bin"
WSGIPythonPath "/home/ubuntu/.local/lib/python3.8/site-packages"
<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com
WSGIDaemonProcess flaskapp threads=5 python-path=/var/www/html/flaskapp/flaskapp
WSGIScriptAlias / /var/www/html/flaskapp/flaskapp.wsgi
<Directory flaskapp>
WSGIProcessGroup flaskapp
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</Directory>
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
</VirtualHost>
Answered By - Jeril Answer Checked By - Cary Denson (WPSolving Admin)