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 |