Cannot find settings module in mod_wsgi (Apache2 on Ubuntu with django)
I am serving a Python app using Django through an Apache2 server. I have the wsgi.py file in a directory
home/peter/django-apps/anaaccess/anaaccess/ana_access/wsgi.py
I have a venv in home/peter/django-apps/anaaccess/anaaccess/myenv into which I have installed mod_wsgi and django, etc. I have put these lines into apache.conf to set up this venv to handle the python:
LoadModule wsgi_module "/home/peter/django-apps/anaaccess/anaaccess/myenv/lib/python3.12/site-packages/mod_wsgi/server/mod_wsgi-py312.cpython-312-x86_64-linux-gnu.so"
WSGIPythonHome "/home/peter/django-apps/anaaccess/anaaccess/myenv"
I call the application in the virtual host section of the Apache2 configuration:
WSGIScriptAlias /bayeux /home/peter/django-apps/anaaccess/anaaccess/ana_access/wsgi.py
<Directory /home/peter/django-apps/anaaccess/anaaccess/ana_access>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
In the wsgi.py file I call the application as follows:
import os
import django
from django.core.wsgi import get_wsgi_application
#os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'ana_access.settings')
os.environ["DJANGO_SETTINGS_MODULE"] = "ana_access.settings"
application = get_wsgi_application()
All seems to start fine. Apache finds and loads the mod_wsgi module, finds the wsgi.py file, and finds the os and django modules. But it fails to find the settings file, with this error:
mod_wsgi (pid=98141): Failed to exec Python script file '/home/peter/django-apps/anaaccess/anaaccess/ana_access/wsgi.py'., referer: http://109.123.108.170/
mod_wsgi (pid=98141): Exception occurred processing WSGI script '/home/peter/django-apps/anaaccess/anaaccess/ana_access/wsgi.py'., referer: http://109.123.108.170/
Traceback (most recent call last):, referer: http://109.123.108.170/
File "/home/peter/django-apps/anaaccess/anaaccess/ana_access/wsgi.py", line 19, in <module>, referer: http://109.123.108.170/
application = get_wsgi_application(), referer: http://109.123.108.170/
^^^^^^^^^^^^^^^^^^^^^^, referer: http://109.123.108.170/
File "/home/peter/django-apps/anaaccess/anaaccess/myenv/lib/python3.12/site-packages/django/core/wsgi.py", line 12, in get_wsgi_application, referer: http://109.123.108.170/
django.setup(set_prefix=False), referer: http://109.123.108.170/
File "/home/peter/django-apps/anaaccess/anaaccess/myenv/lib/python3.12/site-packages/django/__init__.py", line 19, in setup, referer: http://109.123.108.170/
configure_logging(settings.LOGGING_CONFIG, settings.LOGGING), referer: http://109.123.108.170/
^^^^^^^^^^^^^^^^^^^^^^^, referer: http://109.123.108.170/
File "/home/peter/django-apps/anaaccess/anaaccess/myenv/lib/python3.12/site-packages/django/conf/__init__.py", line 81, in __getattr__, referer: http://109.123.108.170/
self._setup(name), referer: http://109.123.108.170/
File "/home/peter/django-apps/anaaccess/anaaccess/myenv/lib/python3.12/site-packages/django/conf/__init__.py", line 68, in _setup, referer: http://109.123.108.170/
self._wrapped = Settings(settings_module), referer: http://109.123.108.170/
^^^^^^^^^^^^^^^^^^^^^^^^^, referer: http://109.123.108.170/
File "/home/peter/django-apps/anaaccess/anaaccess/myenv/lib/python3.12/site-packages/django/conf/__init__.py", line 166, in __init__, referer: http://109.123.108.170/
mod = importlib.import_module(self.SETTINGS_MODULE), referer: http://109.123.108.170/
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^, referer: http://109.123.108.170/
File "/usr/lib/python3.12/importlib/__init__.py", line 90, in import_module, referer: http://109.123.108.170/
return _bootstrap._gcd_import(name[level:], package, level), referer: http://109.123.108.170/
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^, referer: http://109.123.108.170/
File "<frozen importlib._bootstrap>", line 1387, in _gcd_import, referer: http://109.123.108.170/
File "<frozen importlib._bootstrap>", line 1360, in _find_and_load, referer: http://109.123.108.170/
File "<frozen importlib._bootstrap>", line 1310, in _find_and_load_unlocked, referer: http://109.123.108.170/
File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed, referer: http://109.123.108.170/
File "<frozen importlib._bootstrap>", line 1387, in _gcd_import, referer: http://109.123.108.170/
File "<frozen importlib._bootstrap>", line 1360, in _find_and_load, referer: http://109.123.108.170/
File "<frozen importlib._bootstrap>", line 1324, in _find_and_load_unlocked, referer: http://109.123.108.170/
ModuleNotFoundError: No module named 'ana_access', referer: http://109.123.108.170/
I have been using mod_wsgi/Django/Apache2 for over twenty years now, through lots of upgrades, server moves, etc. These problems appeared in the latest move, to Apache/2.4.58 on Ubuntu 24.04.2 LTS (GNU/Linux 6.8.0-63-generic x86_64).
Help gratefully received.