jon_two
jon_two

Reputation: 1238

uwsgi module not found after Python upgrade

I have a Flask/UWSGI application running on my home server. A recent Ubuntu upgrade deleted Python 3.10 and installed Python 3.12 instead. I've made a new venv and installed the application, but it no longer runs. In the UWSGI log it says:

ModuleNotFoundError: No module named 'wsgi'

My application is called sieve and the working directory is /usr/share/sieve. I'm using a ini file, /usr/share/sieve/sieve.ini, which looks like this:

[uwsgi]
module = wsgi
callable = app

master = true
processes = 5 

socket = /usr/share/sieve/sieve.sock
chmod-socket = 660
vacuum = true

die-on-term = true
logto = /usr/share/sieve/sieve.log
logfile-chown = jon:www-data
log-date = [%%Y-%%m-%%d %%H:%%M:%%S]

I've also tried module=sieve.wsgi and module=wsgi:app as suggested elsewhere.

The application is in a sieve subdirectory and /usr/share/sieve/sieve/wsgi.py looks like this:

#!/usr/bin/env python
from run_app import app

if __name__ == '__main__':
    app.run(debug=True)

The service definition includes these lines:

WorkingDirectory=/usr/share/sieve
Environment="PATH=$PATH:/usr/share/sieve/venv/bin"
ExecStart=/usr/share/sieve/venv/bin/uwsgi --ini sieve.ini --enable-threads

I'm not sure what has changed since it was last working, but looking further up the log, this setup worked fine:

[2024-08-27 21:32:30] - *** Starting uWSGI 2.0.21 (64bit) on [Tue Aug 27 21:32:30 2024] ***
[2024-08-27 21:32:30] - compiled with version: 11.3.0 on 20 November 2022 14:54:48
[2024-08-27 21:32:30] - os: Linux-6.8.0-40-generic #40~22.04.3-Ubuntu SMP PREEMPT_DYNAMIC Tue Jul 30
 17:30:19 UTC 2

The current version does not work (with the same site code and config).

[2024-09-24 20:33:49] - *** Starting uWSGI 2.0.27 (64bit) on [Tue Sep 24 20:33:49 2024] ***
[2024-09-24 20:33:49] - compiled with version: 13.2.0 on 24 September 2024 18:04:08
[2024-09-24 20:33:49] - os: Linux-6.8.0-45-generic #45-Ubuntu SMP PREEMPT_DYNAMIC Fri Aug 30 12:02:04 UTC 2024

Why has my application stopped working and what to I need to do to make UWSGI find the module again?

Upvotes: 0

Views: 162

Answers (1)

jon_two
jon_two

Reputation: 1238

Figured it out - the answer is to update the service definition so the working directory is the code root.

WorkingDirectory=/usr/share/sieve/sieve

I guess Python 3.12 is a bit more strict about project structure. Ideally I should rewrite this so the different parts of the application can be imported properly, but it works now, so this will do!

Upvotes: 0

Related Questions