webentwicklung-frage-antwort-db.com.de

Wie richte ich Jupyter / IPython Notebook für Django ein?

Ich habe die in dieser Beitrag beschriebene Methode verwendet, um IPython Notebook so einzurichten, dass es gut mit Django zusammenspielt. Der Kern der Methode besteht darin, eine IPython-Erweiterung zu erstellen, mit der Django_SETTINGS_MODULE festgelegt und Django.setup () ausgeführt wird, wenn IPython gestartet wird.

Der Code für die Erweiterung lautet:

def load_ipython_extension(ipython):
    # The `ipython` argument is the currently active `InteractiveShell`
    # instance, which can be used in any way. This allows you to register
    # new magics or aliases, for example.
    try:
        import os
        os.environ.setdefault("Django_SETTINGS_MODULE", "settings")
        import Django
        Django.setup()
    except ImportError:
        pass

Mit einem kürzlich durchgeführten Upgrade auf Jupyter Notebook ist dieses Setup für mich jetzt fehlerhaft. Ich kann Django Code im Jupyter-Notizbuch ausführen, indem ich der ersten Zelle des Notizbuchs ein ähnliches Stück Code hinzufüge. Ich konnte jedoch nicht herausfinden, wie ich Jupyter zum Ausführen bringe Die Erweiterung wird automatisch erstellt, sodass ich dies nicht für jedes Notizbuch, das ich erstelle, erneut ausführen muss.

Was soll ich tun, damit Django und Jupyter gut spielen?

UPDATE: Für @DarkLight verwende ich Django 1.8.5 mit Jupyter 1.0.0. Den Code, den ich ausführe Im Notizbuch steht:

import os, sys
sys.path.insert(0, '/path/to/project')
os.environ.setdefault("Django_SETTINGS_MODULE", "settingsfile")
import Django
django.setup()
51
odedbd
  1. Installieren Django-extensions from https://github.com/Django-extensions/Django-extensions/blob/master/docs/index.rst

     pip install Django-extensions
    
  2. Ändere deine Einstellungsdatei so, dass sie 'Django-Erweiterungen' enthält

     INSTALLED_APPS += ['Django_extensions']
    
  3. Führen Sie Ihren Django Server folgendermaßen aus:

    python manage.py Shell_plus --notebook
    
  4. passen Sie es an und führen Sie es in Ihrer ersten Zelle aus

    import os, sys
    PWD = os.getenv('PWD')
    os.chdir(PWD)
    sys.path.insert(0, os.getenv('PWD'))
    os.environ.setdefault("Django_SETTINGS_MODULE", "local_settings.py")
    import Django
    django.setup()
    
  5. Jetzt solltest du in der Lage sein, deine Django Modelle usw. zu importieren, zB:

    from app.models import Foobar
    Foobar.objects.all()
    
47
SeanB

Hier ist, was gerade für mich gearbeitet hat

  1. installiere Django Extensions (ich habe 1.9.6 verwendet) wie in den anderen Antworten angegeben
  2. installiere jupyter
    pip install jupyter
  3. einige Dinge, die ich getan habe, um jupyter in meinem Docker-Container einzurichten - siehe unten, ob dies auf Sie zutrifft †
  4. erstellen Sie aus Ihrem Basisverzeichnis Django ein Verzeichnis für Notizbücher, z.
    mkdir notebooks
  5. Gehe in dieses Verzeichnis
    cd notebooks
  6. starte Django extensions Shell_plus in diesem Verzeichnis:
    ../manage.py Shell_plus --notebook
    Der Notebook-Server sollte nun ausgeführt werden und möglicherweise einen neuen Browser starten. Wenn kein Browserfenster geöffnet wird, folgen Sie den Anweisungen, um einen Link oder ein Token einzufügen.
  7. öffnen Sie im Browser ein neues "Django Shell Plus" -Notizbuch, wie im Screenshot von John Mees Antwort angegeben

[~ # ~] und [~ # ~] , was hat nicht funktioniert Die Arbeit bestand darin, die Verzeichnisse von zu ändern in der Notebook-Umgebung. Wenn ich versuchte, mit einem Notebook zu arbeiten, das sich nicht in dem Verzeichnis befand, das manage.py Shell_plus --notebook wurde eingelaufen, dann war das kernal nicht korrekt konfiguriert. Für mich war es gut genug, das Notebook jeweils nur für ein einziges Verzeichnis zu konfigurieren.

† Docker-Setup (optional)

  1. fügen Sie eine Portzuordnung für Ihren Container für Port 8888 hinzu

Beispielsweise können Sie in Ihrem Docker eine Datei erstellen.

ports:
      -  "8890:8888"
  1. Konfigurieren Sie Ihre Projekteinstellungsdatei für die Verwendung von IP 0.0.0.0

Das habe ich gemacht:

NOTEBOOK_ARGUMENTS = [
    '--ip', '0.0.0.0', 
    '--allow-root',
    '--no-browser', 
]
11
Mark Chackerian

Eigentlich stellt sich heraus, dass Sie ( vielleicht nicht ) den ganzen Mist machen müssen. Einfach Django-Extensions installieren und jupyter starten!

(myprojectvenv)$ cd myproject    
(myprojectvenv)$ pip install jupyter
(myprojectvenv)$ pip install Django-extensions
(myprojectvenv)$ jupyter notebook

Starten Sie im Browser ein neues "Django Shell-Plus": enter image description here

Und Sie sollten gut zu gehen sein. z.B:

from myproject.models import Foobar
Foobar.objects.all()
9
John Mee

Hinweis: Ich verwende Python 3.7 und Django 2.1, es funktioniert für Django 2.2 . Ich muss in meiner ersten Zelle nichts ausführen, und das funktioniert wie ein Zauber, solange es Ihnen nichts ausmacht, die Notizbücher im Stammverzeichnis Ihres Django -Projekts zu haben.

Es wird davon ausgegangen, dass Sie eine virtuelle Umgebung haben für Ihr Projekt, und es ist aktiviert. Ich benutze pipenv , um virtuelle Umgebungen zu erstellen und Abhängigkeiten meiner python Projekte zu verfolgen, aber es liegt an Ihnen, welches Tool Sie verwenden.

Es wird auch angenommen, dass Sie ein Django-Projekt erstellt haben und Ihr aktuelles Arbeitsverzeichnis das Stammverzeichnis dieses Projekts ist.

Schritte

  1. Installieren Sie jupyter

    Mit pip

    pip install jupyter
    

    Mit pipenv

    pipenv install jupyter
    
  2. Installiere Django-extentions

    Mit pip

    pip install Django-extensions
    

    Mit pipenv

    pipenv install Django-extensions
    
  3. Richten Sie Django-extensions Ein, indem Sie es zur Einstellung INSTALLED_APPS Ihrer Django Projektdatei settings.py Hinzufügen:

    INSTALLED_APPS = (
        ...
        'Django_extensions',
    )
    
  4. Führen Sie den Verwaltungsbefehl Shell_plus aus, der Teil von Django-extensions Ist. Verwenden Sie die Option --notebook, Um ein Notizbuch zu starten:

    python manage.py Shell_plus --notebook
    

    Jupyter Notebooks wird automatisch in Ihrem Browser geöffnet.

  5. Starten Sie ein neues Django Shell-Plus-Notizbuch

enter image description here

Das ist es!


Auch hier müssen Sie nichts in der ersten Zelle ausführen, und Sie können dies bestätigen, indem Sie dir() ausführen, um die Namen im aktuellen lokalen Bereich anzuzeigen.

enter image description here

Bearbeiten:

Wenn Sie Ihre Notizbücher in einem Verzeichnis namens notebooks im Stammverzeichnis ablegen möchten, können Sie Folgendes tun:

$ mkdir notebooks && cd notebooks
$ python ../manage.py Shell_plus --notebook

Vielen Dank an Mark Chackerian, dessen Antwort die Idee lieferte, die Notizbücher in einem anderen Verzeichnis als dem Stammverzeichnis des Projekts auszuführen.

Dies sind die Module, die dank Shell_plus Automatisch importiert werden:

# Shell Plus Model Imports
from Django.contrib.admin.models import LogEntry
from Django.contrib.auth.models import Group, Permission, User
from Django.contrib.contenttypes.models import ContentType
from Django.contrib.sessions.models import Session
# Shell Plus Django Imports
from Django.core.cache import cache
from Django.conf import settings
from Django.contrib.auth import get_user_model
from Django.db import transaction
from Django.db.models import Avg, Case, Count, F, Max, Min, Prefetch, Q, Sum, When, Exists, OuterRef, Subquery
from Django.utils import timezone
from Django.urls import reverse
8
lmiguelvargasf

Folgendes funktioniert für mich mit win10, Python 3.5, Django 1.10:

  • Installieren Sie Python mit der Anaconda-Distribution, damit Jupyter ebenfalls installiert wird
  • Installiere Django und installiere Django-Erweiterungen:

    pip install Django
    
    pip install Django-extensions
    
  • Starten Sie ein neues Django Projekt. Sie müssen dies in dem Teil Ihres Verzeichnisbaums tun, auf den Jupyter später zugreifen kann.

    Django-admin startproject _myDjangoProject_
    
  • Starten Sie Jypter

  • navigiere Jupyter zum Verzeichnis myDjangoProject und gib das erste/top myDjangoProject - Verzeichnis ein
  • Beginnen Sie im ersten/top myDjangoProject - Verzeichnis ein neues Jupyter-Notizbuch: new -> Django Shell-Plus
  • geben Sie den folgenden Code ein und führen Sie ihn aus:

    import os
    os.environ.setdefault("Django_SETTINGS_MODULE", "myDjangoProject.settings")
    import Django
    django.setup()
    
  • Beachten Sie, dass dieser Teil des Codes derselbe ist wie in manage.py, und beachten Sie, dass "myDjangoProject.settings" auf myDjangoProject/settings.py verweist

  • Nun können Sie mit Beispielen beginnen, z.

    from Django.template import Template, Context
    
    template = Template('The name of this project is {{ projectName }}')
    context = Context({'projectName': 'MyJypyterDjangoSite'})
    template.render(context)
    
2
pyano

Während die akzeptierte Antwort von RobM funktioniert, war es weniger klar als es sein könnte und hat ein paar unnötige Schritte. Einfach ausgedrückt, um Notebooks über Django aus einer Notebook-Umgebung außerhalb des Projektverzeichnisses auszuführen:

Installieren:

 pip install Django-extensions

Fügen Sie 'Django-extensions' Zu Ihrer INSTALLED_APPS - Liste in settings.py Hinzu

 INSTALLED_APPS += ['Django_extensions']

Führen Sie ein Notizbuch in Django aus und schließen Sie es:

python manage.py Shell_plus --notebook

Dadurch wird Ihr Kernel erstellt, der nun so bearbeitet wird, dass er auf einen absoluten Pfad von Python statt auf einen relativen Pfad verweist.

Unter OSX befindet sich die Kerneldatei unter: ~/Library/Jupyter/kernels/Django_extensions/kernel.json

Unter Linux: ~/.jupyter/kernels/Django_extensions/kernel.json

Wir müssen nur zwei Änderungen vornehmen:

Der erste besteht darin, den ersten Wert in der Liste "argv" Von "python" Bis zur vollständigen Adresse der python Version in Ihrem Django virtuelle Umgebung, zB: "/Users/$USERNAME/Documents/PROJECT_FOLDER/venv/bin/python"

Zweitens fügen Sie dem Wörterbuch "env""Django_SETTINGS_MODULE": "mysite.settings", Hinzu, wobei mysite der Ordner ist, der Ihre Django Einstellungen enthält.

Ändern Sie optional den Wert von "display_name".

Wenn Sie nun ein Notizbuch aus einem beliebigen Verzeichnis ausführen, können Ihre Notizbücher mit Django interagieren, indem Sie den Kernel "Django Shell-Plus" Auswählen. Alle Pakete wie pandas müssen in der Django venv installiert werden.

2
Rafters

Ich werde einige Informationen zum vollständigen answer von RobM hinzufügen, zum Nutzen der sehr seltenen Entwickler, die buildout zusammen mit djangorecipe djangorecipe as verwenden Ich beziehe mich auf jupyter lab, wenn ich das benutze, aber ich denke, dass alle Informationen auf alte Jupyter-Notizbücher angewendet werden können.

Wenn Sie buildout verwenden, erhalten Sie einen 'bin/Django'-Handler, den Sie anstelle von' manage.py 'verwenden. Das ist das Skript, das den gesamten Pfad definiert. Ich habe einen weiteren Teil in meine buildout.cfg eingefügt:

[ipython]
recipe = zc.recipe.Egg
eggs =  ${buildout:eggs}
extra-paths = ${buildout:directory}/apps
initialization =  import os
   os.environ['Django_SETTINGS_MODULE'] = 'web.settings'

damit wird ein weiteres Skript mit dem Namen ipython im Verzeichnis ./bin erstellt. Ich weise kernelspec auf diesen Interpreter. Darüber hinaus verwende ich das Argument kernel anstelle von "-m", "ipykernel_launcher", Sodass die von mir verwendete Kerneldefinition wie folgt lautet:

{
    "argv": [
        "/misc/src/hg/siti/trepalchi/bin/ipython",
        "kernel",
        "-f",
        "{connection_file}",
        "--ext",
        "Django_extensions.management.notebook_extension"
    ],
    "display_name": "Trepalchi",
    "language": "python"
}

Da das ipython-Skript von buildout erstellt wird, müssen in meinem Fall keine Umgebungsvariablen hinzugefügt werden.

Wie bereits von Rob erwähnt, wird jupiterlab nur in einer Umgebung installiert, in der ich es mit dem folgenden Befehl starte:

jupyter lab

nicht in der Umgebung von Django project whare ich nur ipykernel (das hat bereits eine Reihe von 20 Abhängigkeiten).

Da ich in der Regel sehr viele Projekte habe, finde ich es nützlich, einen einzigen Punkt zu haben, an dem ich jupyter lab Mit vielen Links zu den Projekten beginne, damit ich sie leicht erreichen kann. Dank der Erweiterung von Django_extension brauche ich keine zusätzliche Zelle, um das Notebook zu initialisieren.

Jeder einzelne auf diese Weise hinzugefügte Kernel kann mit dem folgenden Befehl gefunden werden:

jupyter kernelspec list

Und übersichtlich aufgelistet im Launcher von Jupyter Lab

0