This is not a duplicate of Apache with virtualenv and mod_wsgi : ImportError : No module named 'django' since here I’m not using any virtualenv, and also I’m not trying to import another framework’s module (such as django), but just a module in the same directory.
Here is my setup:
/var/www/test/app.py
:
import os, time, sys
from bottle import route, run, template, default_app
os.chdir(os.path.dirname(os.path.abspath(__file__)))
import hello
@route('/')
def index():
return 'Hello world Python ' + sys.version
application = default_app()
/var/www/test/hello.py
:
# just an example module
def test():
print 'hello'
Apache config:
<VirtualHost *:80>
ServerName example.com
<Directory />
Require all granted
</Directory>
WSGIScriptAlias / /var/www/test/app.py
WSGIDaemonProcess test user=www-data group=www-data processes=5 threads=5 display-name=test python-path=/var/www/test/
</VirtualHost>
Then I get:
ImportError: No module named hello
What is incorrect? Shouldn’t WSGIDaemonProcess ... python-path=/var/www/test/
help the module hello
to be loaded?
2
Answers
The solution is:
to have a
WSGIDaemonProcess ... python-path=...
indeed,but also a
WSGIScriptAlias ... process-group=...
(not sure why thisprocess-group
parameter is linked to allowing or not to load modules from the same directory, but it works!)Example:
See also: https://bottlepy.org/docs/dev/deployment.html#apache-mod-wsgi
Apache does not change to the current working directory, thus it will not search for hello where you think.
You might change app.py in following way.
Advantage you do not have to mess with the apache config files