On Sun, May 12, 2024 at 11:19 PM Graham Dumpleton <graham.dumple...@gmail.com> wrote: > > The mod_wsgi.so specified by LoadFile is what dictates version (and in what > location) of Python is being used. > > Right now you are using one under your home directory. I would not be > surprised if it is compiled for the version of Python you built yourself from > source code and that is causing the problem. > > Ensuring you have no virtual environments activated, run the following: > > pip3 uninstall mod_wsgi > > Run this multiple times until it says nothing to uninstall. > > Then try rebuilding/reinstall mod_wsgi again but when you run pip install use > the --no-cache-dir option so it doesn't use old cached build. > > Then update LoadFile line to use whatever location it now gets installed to > if you use a different location (eg., a dedicated virtual environment, or > system Python directory. > > Ensure you stop and start Apache when changed. > > Graham
OK I uninstalled the old one (there was only the .local copy). I ran the install (with the flag) and it's now residing in the more expected /usr/local/... python3.11 site-packages directory. Unfortunately no dice. I also did a full shutdown and boot. Nope. 😕 > On 13 May 2024, at 4:10 PM, A McBain <mcbain....@gmail.com> wrote: > > On Sun, May 12, 2024 at 11:08 PM A McBain <mcbain....@gmail.com> wrote: > > > > > On Sun, May 12, 2024 at 10:57 PM Graham Dumpleton > <graham.dumple...@gmail.com> wrote: > > > Ensure you do a complete stop and start of Apache and not just reload or > restart in case Apache had cached a reference to a broken Python library > variant from your self compiled build. > > If going to build your own Python from source code ensure you read. A bit > dated, but still relevant. Ignore that talks about Docker, still applies for > any Python build. > > Installing a custom Python version into a Docker image. > blog.dscpl.com.au > > Also, where is LoadFile line in Apache picking up mod_wsgi.so from? > > Graham > > > I don't intend to build from source again if I can help it. That was a PITA. > 😄 I only did it way back since I believe at the time Python 3.11 wasn't > available as a package for Devuan/Debian yet...? I honestly don't remember. > Thank you for the link though if I ever do need. 🙂 > > I had been just doing "service apache2 restart" yeah, but I just tried a > proper stop, then a start, and the state is the same. 😑 > > So best I can tell this is where I'm at: > > CLI-run Python, the older site, and new site, have identical paths except for > the first entry (CLI = '', apps = their app dir) > Both apps don't import cmath and a bunch of other modules but the CLI Python > does > All prefixes point to the correct virtual env root > The old app still runs even after a full stop and start of Apache > > I apologize for all this. I don't have any idea what's going on and I've > tried everything I can think of, what you've asked / suggested, and it's > still breaking my brain. > > - Alastair > > > Oh, the load command. Right, so that's at > "/etc/apache2/mods-enabled/wsgi.load" > > The contents are this: > > #LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so > LoadModule wsgi_module > /home/asmcbain/.local/lib/python3.11/site-packages/mod_wsgi/server/mod_wsgi-py311.cpython-311-x86_64-linux-gnu.so > > On 13 May 2024, at 3:35 PM, A McBain <mcbain....@gmail.com> wrote: > > On Sun, May 12, 2024 at 10:22 PM A McBain <mcbain....@gmail.com> wrote: > > > On Sun, May 12, 2024 at 10:05 PM A McBain <mcbain....@gmail.com> wrote: > > > On Sun, May 12, 2024 at 9:47 PM Graham Dumpleton > <graham.dumple...@gmail.com> wrote: > > > > > On 13 May 2024, at 2:33 PM, A McBain <mcbain....@gmail.com> wrote: > > The old one is running on the same physical server, just with its own Apache > config and own subdomain. As to having multiple things running, that's why I > set WSGIApplicationGroup to %{SERVER} but just in case I changed it > explicitly to "enfilade.asmcbain.net" (no effect, but shouldn't hurt anything > to keep the change). > > > The WSGIApplicationGroup directive sets which Python interpreter context is > used. It is distinct from the daemon process group. > > You want each WSGI application instance to run in a different mod_wsgi daemon > process group if using the main Python interpreter context (application group > %{GLOBAL}). > > So what you want is for each VirtualHost to use a different named mod_wsgi > dameon process group. > > <VirtualHost ...> > ServerName site-1.example.com > WSGIDaemonProcess site-1 \ > user=asmcbain group=asmcbain \ > display-name='%{GROUP}' \ > lang='en_US.UTF-8' \ > locale='en_US.UTF-8' \ > threads=5 \ > queue-timeout=45 \ > socket-timeout=60 \ > connect-timeout=15 \ > request-timeout=60 \ > inactivity-timeout=0 \ > startup-timeout=15 \ > deadlock-timeout=60 \ > graceful-timeout=15 \ > eviction-timeout=0 \ > restart-interval=0 \ > shutdown-timeout=5 \ > maximum-requests=0 \ > python-home=/home/asmcbain/enfilade/.env \ > python-path=/home/asmcbain/enfilade > WSGIProcessGroup site-1 > WSGIApplicationGroup %{GLOBAL} > WSGIScriptAlias / /home/asmcbain/enfilade/atcid/wsgi.py > </VirtualHost> > > <VirtualHost ...> > ServerName site-2.example.com > WSGIDaemonProcess site-2 \ > user=asmcbain group=asmcbain \ > display-name='%{GROUP}' \ > lang='en_US.UTF-8' \ > locale='en_US.UTF-8' \ > threads=5 \ > queue-timeout=45 \ > socket-timeout=60 \ > connect-timeout=15 \ > request-timeout=60 \ > inactivity-timeout=0 \ > startup-timeout=15 \ > deadlock-timeout=60 \ > graceful-timeout=15 \ > eviction-timeout=0 \ > restart-interval=0 \ > shutdown-timeout=5 \ > maximum-requests=0 \ > python-home=/home/asmcbain/enfilade/.env \ > python-path=/home/asmcbain/enfilade > WSGIProcessGroup site-2 > WSGIApplicationGroup %{GLOBAL} > WSGIScriptAlias / /home/asmcbain/enfilade/atcid/wsgi.py > </VirtualHost> > > So each site should have different name to WSGIDaemonProcess, with matching > WSGIProcessGroup, and WSGIApplicationGroup should be %{GLOBAL} for both, not > {SERVER}. > > The {SERVER} value has a different meaning and best avoiding it. > > So lets make sure each is running in separate daemon process groups. > > BTW, also make sure that somewhere outside of all VirtualHost definitions you > add: > > WSGIRestrictEmbedded On > > > OK, I updated both the old site and the new one to make > WSGIApplicationGroup %{GLOBAL}. They always had different > WSGIProcessGroup values. > > I also added WSGIRestrictEmbedded to the base Apache config. > > Apache restarts fine, and the old site loads up but the new one still > prints the import math error even after the changes. 😕 > > I've attached the relevant bits to both. > > - Alastair > > > Originally I'd compiled this Python 3.11 myself, but I've just double > checked and verified Python 3.11 and the -dev package are from > official packages and not my own manual build+install. > > I also checked that inside or outside of the virtual env (results are > the same) I can run the Python interpreter shell and do: > > import math > math.ceil(1.1) > > I don't get any errors. > > - Alastair > > > Update to that. The modules loaded are different between the daemon > one and the regular interpreter. > > Doing "print(sys.builtin_module_names)" results in the following for > the daemon version: > > [Sun May 12 22:31:33.744235 2024] [wsgi:error] [pid 7430:tid > 140134038087360] ('_abc', '_ast', '_codecs', '_collections', > '_functools', '_imp', '_io', '_locale', '_operator', '_signal', > '_sre', '_stat', '_string', '_symtable', '_thread', '_tokenize', > '_tracemalloc', '_warnings', '_weakref', 'atexit', 'builtins', > 'errno', 'faulthandler', > 'gc', 'itertools', 'marshal', 'posix', 'pwd', 'sys', 'time', 'xxsubtype') > > And this substantially longer list for the one I just run from the CLI myself: > > ('_abc', '_ast', '_bisect', '_blake2', '_codecs', '_collections', > '_csv', '_datetime', '_elementtree', '_functools', '_heapq', '_imp', > '_io', '_locale', '_md5', '_opcode', '_operator', '_pickle', > '_posixsubprocess', '_random', '_sha1', '_sha256', '_sha3', '_sha512', > '_signal', '_socket', '_sre', '_stat', '_statistics', '_string', > '_struct', '_symtable', '_thread', '_tokenize', '_tracemalloc', > '_warnings', '_weakref', 'array', 'atexit', 'binascii', 'builtins', > 'cmath', 'errno', 'faulthandler', 'fcntl', 'gc', 'grp', 'itertools', > 'marshal', 'math', 'posix', 'pwd', 'pyexpat', 'select', 'spwd', 'sys', > 'syslog', 'time', 'unicodedata', 'xxsubtype', 'zlib') > > Now I just have to figure out why. > > > > This will cause an error if mod_wsgi daemon process groups aren't being > configured properly. > > Graham > > > This is the result of the wsgi.prod.py printouts: > > [Sun May 12 21:29:11.788518 2024] [wsgi:error] [pid 5671:tid 140047682610880] > sys.prefix '/home/asmcbain/enfilade/.env' > [Sun May 12 21:29:11.788639 2024] [wsgi:error] [pid 5671:tid 140047682610880] > sys.path ['/home/asmcbain/enfilade', '/usr/lib/python311.zip', > '/usr/lib/python3.11', '/usr/lib/python3.11/lib-dynload', > '/home/asmcbain/enfilade/.env/lib/python3.11/site-packages'] > > Alastair > > On Sun, May 12, 2024 at 9:24 PM Graham Dumpleton <graham.dumple...@gmail.com> > wrote: > > > > On 13 May 2024, at 2:02 PM, A McBain <mcbain....@gmail.com> wrote: > > > Hi, I looked at previous messages and others on StackOverflow but none seem > to solve my issue. > > I have an app I wrote working perfectly fine under Python 3.11 with mod_wsgi > and Apache 2. > > I did a bunch of development on the app (upgraded django, new features), and > set up a new checkout of that on my server, with its own virtual environment > (using venv). It uses effectively the same config (different subdomain) in > Apache2 as the original older copy, but the new one fails with an import > error while the old one is still chugging along. > > > When you say "old one is still chugging along" can you confirm you are saying > that the existing one is still running on the same server at the same time, > or it is a completely new server you have set up. > > I double checked the instructions at > https://docs.djangoproject.com/en/5.0/howto/deployment/wsgi/modwsgi/ > > I've also re-verified the mod_wsgi I installed (via pip) matches the Python > version I'm using (both are Python 3.11). > > I also tried: > > Removing the python-path argument > > The mod_wsgi docs suggest I don't need that if I specify python-home? > > Removing python-path if it refers to site-packages directory of virtual > environment specified to python-home is okay as path would be redundant. If > python-path is used to tell it where your Django project is, that still needs > to stay. > > Setting WSGIApplicationGroup to %{GLOBAL} > > That is recommended, but if you are hosting multiple WSGI applications on the > same server, they would need to be delegated to different mod_wsgi daemon > process groups. > > Unfortunately the error didn't change at all after trying those. > > I've attached the relevant apache2 config section which includes all the > mod_wsgi-setup (the rest is just redirects, ssl stuff, aliases, etc.) > > I also attached the error from the log. It looks like it's trying to use the > system Python instead of the one that exists in my .env (virtual environment) > directory. > > > The virtual environment doesn't have a copy of Python stdlib files so they > are still imported from the system Python the virtual environment was created > from. The virtual environment effectively only has its own site-packages > directory. > > I'm banging my head as to why this worked before but not now so any help is > much appreciated. Thank you! 🙂 > > Other details: > > wsgi.prod.py is the default wsgi.py, just modified to load settings.prod.py > The server is Devuan Daedalus > > > At the start of your WSGI script file add: > > import sys > print('sys.prefix', repr(sys.prefix)) > print('sys.path', repr(sys.path)) > > and check Apache logs for what paths it is using. > > Compare that to the working site. > > Post what you learn from that. > > Graham > > > -- > You received this message because you are subscribed to a topic in the Google > Groups "modwsgi" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/modwsgi/IJp7zr6SjtY/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > modwsgi+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/modwsgi/7184C263-1522-4583-A98B-EC9806B0FA66%40gmail.com. > > > > -- > You received this message because you are subscribed to the Google Groups > "modwsgi" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to modwsgi+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/modwsgi/CAGV_ScocfNc%3DSv7W7Ha3MbrM_0wq43v8U0AM3JOuNtsfP9vK%3Dw%40mail.gmail.com. > > > -- > You received this message because you are subscribed to a topic in the Google > Groups "modwsgi" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/modwsgi/IJp7zr6SjtY/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > modwsgi+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/modwsgi/41CA1CF3-8A06-46BF-A7AE-2CA74FCC2196%40gmail.com. > > > -- > You received this message because you are subscribed to the Google Groups > "modwsgi" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to modwsgi+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/modwsgi/CAGV_ScoxJu%3DxKwijvbPjE78BnZZD4s2ppRBT0-jCErCgdr8v%2Bg%40mail.gmail.com. > > > -- > You received this message because you are subscribed to a topic in the Google > Groups "modwsgi" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/modwsgi/IJp7zr6SjtY/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > modwsgi+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/modwsgi/55163B95-DCAF-4129-BD81-4D477F4FC9F6%40gmail.com. > > > -- > You received this message because you are subscribed to the Google Groups > "modwsgi" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to modwsgi+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/modwsgi/CAGV_Scr3A_PxtgAtamReunLZ9zjG03OFG%2BZZFpQWV5aSzmo16Q%40mail.gmail.com. > > > -- > You received this message because you are subscribed to a topic in the Google > Groups "modwsgi" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/modwsgi/IJp7zr6SjtY/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > modwsgi+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/modwsgi/F97967BE-2139-4E76-A9DC-4C7A9B3A397E%40gmail.com. -- You received this message because you are subscribed to the Google Groups "modwsgi" group. To unsubscribe from this group and stop receiving emails from it, send an email to modwsgi+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/modwsgi/CAGV_ScqsP0s1ML3M43T7_LmQRA%2BJgEC7952oFQ0Uec1YiidxXw%40mail.gmail.com.