Stabilitätsumgebung

Nachdem mich die ständigen Unannehmlichkeiten in Folge von Homebrew-Updates mürbe gemacht haben, liefert PEP 704 den Anlass, endlich eine virtuelle Umgebung für meine Django-Projekte einzurichten:

$ python3 -m venv virtualdjango $ source virtualdjango/bin/activate (virtualdjango) $ pip install Django (virtualdjango) $ pip install Django (virtualdjango) $ pip install uwsgi (virtualdjango) $ pip install psycopg2 (virtualdjango) $ pip install keyring (virtualdjango) $ pip install gnupg (virtualdjango) $ pip freeze > ~/Sites/virtualdjango_requirements.txt (virtualdjango) $ deactivate

Die Aktivierung der virtuellen Umgebung scheitert zwar im ersten Anlauf, weil ich auf die glorreiche Idee gekommen bin, in .zshrc das Alias hash für eines meiner Skripte zu definieren, und das activate-Skript die Existenz der gleichnamigen Shell-Funktion überprüft:

if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then hash -r 2> /dev/null fi

Anschließend beschränkt sich die Nutzung der neuen Umgebung aber – zu meiner Überraschung – auf die Anpassung einer einzigen Zeile in ~/Sites/djangoapp/manage.py

#!/Users/snafu/virtualdjango/bin/python3

– sowie die Überarbeitung des LaunchAgent-Konfiguration für uwsgi:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>KeepAlive</key> <true/> <key>Label</key> <string>net.janeden.uwsgi</string> <key>ProgramArguments</key> <array> <string>/Users/snafu/virtualdjango/bin/uwsgi</string> <string>--uid</string> <string>_www</string> <string>--gid</string> <string>_www</string> <string>--master</string> <string>--die-on-term</string> <string>--autoload</string> <string>--logto</string> <string>/Users/snafu/Library/Logs/Django/uwsgi.log</string> <string>--emperor</string> <string>/Users/snafu/Sites/djangoapp</string> </array> <key>RunAtLoad</key> <true/> <key>WorkingDirectory</key> <string>/Users/snafu/virtualdjango</string> </dict> </plist>

Dank Python 3.11 ist die virtuelle Django-Umgebung nicht nur stabiler, sondern auch substantiell schneller:

Server Software: nginx 1.23.1 / Python 3.9 nginx 1.23.3 / Python 3.11
Server Port: 80 80
Document Path: / /
Document Length: 65820 bytes 65820 bytes
Concurrency Level: 50 50
Time taken for tests: 1.595 seconds 0.999 seconds
Complete requests: 500 500
Failed requests: 0 0
Total transferred: 33065000 bytes 33065000 bytes
HTML transferred: 32910000 bytes 32910000 bytes
Requests per second: 313.49 [#/sec] (mean) 500.27 [#/sec] (mean)
Time per request: 159.492 [ms] (mean) 99.945 [ms] (mean)
Time per request: 3.190 [ms] (mean, across all concurrent requests) 1.999 [ms] (mean, across all concurrent requests)
Transfer rate: 20245.53 [Kbytes/sec] received 31108.88 [Kbytes/sec] received