VirtualEnv und Django

Um eine Trennung von System- und Benutzer-Umgebungen zu realisieren, erlaubt Python den Einsatz von virtuellen Umgebungen, der sog. VirtualEnv.


Inhalt


VirtualEnv-Umgebung mit Python3

Mit Python3 ist die Erstellung einer VirtualEnv-Umgebung vereinfacht worden.

  • Nutzen Sie SSH, um sich mit Ihrem Account auf dem Server anzumelden.
  • Wechseln Sie dort in das Verzeichnis ~/priv, in dem Ihre privaten bzw. nicht-öffentlichen Daten liegen werden.
  • Erstellen Sie nun die VirtualEnv-Umgebung:
    python3 -m venv ~/priv/venv
    

    Somit wird im Ordner ~/priv/venv eine neue Python3-Umgebung erstellt.

  • Aktivieren Sie diese VirtualEnv, um damit zu arbeiten:
    source ~/priv/venv/bin/activate
    

    Ist dies erfolgreich, so ändert sich der Prompt und zeigt dann die aktive VirtualEnv an:

    ssd123@django1:~$ source priv/venv/bin/activate
    (venv) ssd123@django1:~$
    
  • Nun können Sie mit pip die von Ihnen gewünschten und benötigten Python-Module, beispielsweise Django, installieren:
    pip install -U Django mysqlclient
    
  • Bevor Sie mit deactivate die VirtualEnv verlassen, empfehlen wir Ihnen, die derzeitig installierten Python-Module aufzuzeichnen:
    pip freeze | grep -v "pkg-resources" | tee ~/priv/requirements.txt
    

    pip listet normalerweise auch pkg-resources in einer ungültigen Version, weshalb dieses Modul nicht in der requirements.txt aufgezeichnet wird.

    Quelle/weitere Informationen: StackOverflow

  • In der requirements.txt befinden sich nun alle Pakete mit Versionsstand:
    Django==2.1
    django-debug-toolbar==1.9.1
    django-grappelli==2.11.1
    django-tinymce==2.8.0
    Pillow==5.0.0
    pytz==2018.5
    sorl-thumbnail==12.4.1
    sqlparse==0.2.4
    whitenoise==4.1.2
    
  • Soll zukünftig dieser Versionsstand in einer neuen VirtualEnv wiederhergestellt werden, wird dem pip install-Befehl der Pfad zur Datei mitgegeben.
    pip install -r ~/priv/requirements.txt
    

    Dies erlaubt dann auch den Wechsel der Python-Version von beispielsweise Python 3.5 auf Python 3.7, ohne die Versionen der bisher genutzten Module zu verlieren.

  • Bitte beachten Sie, dass sich nach einem Wechsel der Python-Version auch der Pfad zu den Modulen ändert!
   #!/usr/bin/python3
   import sys, os
   sys.path.insert(0, '/var/www/ssd123/priv/project')
  -sys.path.insert(0, '/var/www/ssd123/priv/venv/lib/python3.5/site-packages')
  +sys.path.insert(0, '/var/www/ssd123/priv/venv/lib/python3.7/site-packages')

   from django.core.wsgi import get_wsgi_application

   os.environ['DJANGO_SETTINGS_MODULE'] = 'settings.production'
   application = get_wsgi_application()