web-dev-qa-db-fra.com

Comment configurer Jupyter / IPython Notebook for Django?

J'utilise la méthode décrite dans this post pour configurer IPython Notebook afin de bien jouer avec Django. L’essentiel de la méthode consiste à créer une extension IPython qui définit Django_SETTINGS_MODULE et exécute Django.setup () au démarrage d’IPython.

Le code pour l'extension est:

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

Avec une mise à jour récente de Jupyter Notebook, cette configuration est maintenant interrompue pour moi. Je suis capable d'exécuter du code Django dans le bloc-notes Jupyter en ajoutant un morceau de code similaire à la première cellule du bloc-notes. Cependant, je n'ai pas été en mesure de faire exécuter Jupyter à l'exécution. l’extension automatiquement pour ne pas avoir à refaire cela pour chaque cahier que je crée.

Que dois-je faire pour obtenir Django et Jupyter afin de bien jouer?)

UPDATE: Pour @DarkLight - J'utilise Django 1.8.5 avec Jupyter 1.0.0. Le code que je lance dans le cahier est:

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

     pip install Django-extensions
    
  2. Changez votre fichier de paramètres pour inclure les 'extensions Django'

     INSTALLED_APPS += ['Django_extensions']
    
  3. Exécutez votre serveur Django comme ceci:

    python manage.py Shell_plus --notebook
    
  4. modifier en fonction, et l'exécuter dans votre première cellule

    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. Vous devriez maintenant pouvoir importer vos modèles Django etc., par exemple:

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

Voici ce qui vient de fonctionner pour moi

  1. installer Django Extensions (J'ai utilisé 1.9.6) selon d'autres réponses
  2. installer jupyter
    pip install jupyter
  3. certaines choses que j'ai faites pour installer jupyter dans mon conteneur Docker - voir ci-dessous si cela vous concerne †
  4. depuis votre répertoire de base Django, créez un répertoire pour les blocs-notes, par exemple.
    mkdir notebooks
  5. Aller à ce répertoire
    cd notebooks
  6. démarrer Django extensions Shell_plus à partir de ce répertoire:
    ../manage.py Shell_plus --notebook
    Le serveur d'ordinateurs portables devrait maintenant être en cours d'exécution et peut lancer un nouveau navigateur. S'il ne lance pas de fenêtre de navigateur, suivez les instructions pour coller un lien ou un jeton.
  7. depuis le navigateur, ouvrez un nouveau bloc-notes "Django Shell Plus", comme indiqué dans la capture d'écran de John Mee

[~ # ~] et [~ # ~] , et surtout, ce que non le travail consistait à changer les répertoires dans l'environnement de l'ordinateur portable. Si j’ai essayé de travailler avec un ordinateur portable qui ne se trouvait pas dans le répertoire, manage.py Shell_plus --notebook a été lancé, le kernal n’a pas été configuré correctement. Pour moi, avoir le cahier configuré pour un seul répertoire à la fois était suffisant.

† Configuration de Docker (facultatif)

  1. ajouter un mappage de port pour votre conteneur pour le port 8888

Par exemple, dans votre menu fixe composez le fichier;

ports:
      -  "8890:8888"
  1. Configurez le fichier de paramètres de votre projet pour utiliser ip 0.0.0.0

C'est ce que j'ai fait:

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

En fait, il s'avère que vous ( pourriez ne pas ) avoir besoin de faire toute cette merde. Il suffit d'installer Django-extensions et de lancer jupyter!

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

Dans le navigateur, lancez un nouveau "Django Shell-Plus": enter image description here

Et vous devriez être prêt à partir. par exemple:

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

Remarque: J'utilise Python 3.7 et Django 2.1, cela fonctionne pour Django 2.2 . Je n'ai pas besoin de lancer quoi que ce soit dans ma première cellule, et ça marche comme un charme tant que ça ne vous dérange pas d'avoir les cahiers à la racine de votre projet Django.

Il est supposé que vous avez un environnement virtuel pour votre projet et celui-ci est activé. J'utilise pipenv pour créer des environnements virtuels et suivre les dépendances de mes python projets, mais c'est à vous de choisir l'outil que vous utilisez.

On suppose également que vous avez créé un Django et votre répertoire de travail actuel est la racine de ce projet.

Pas

  1. Installer jupyter

    Utilisation de pip

    pip install jupyter
    

    Utilisation de pipenv

    pipenv install jupyter
    
  2. Installer Django-extentions

    Utilisation de pip

    pip install Django-extensions
    

    Utilisation de pipenv

    pipenv install Django-extensions
    
  3. Configurez Django-extensions En l'ajoutant au paramètre INSTALLED_APPS De votre fichier Django project settings.py:

    INSTALLED_APPS = (
        ...
        'Django_extensions',
    )
    
  4. Exécutez la commande de gestion Shell_plus qui fait partie de Django-extensions. Utilisez l'option --notebook Pour démarrer un cahier:

    python manage.py Shell_plus --notebook
    

    Jupyter Notebooks s'ouvrira automatiquement dans votre navigateur.

  5. Démarrer un nouveau Django Bloc-notes Shell-Plus

enter image description here

C'est ça!


Encore une fois, vous n'avez rien d'exécuter dans la première cellule et vous pouvez corroborer en exécutant dir() pour voir les noms dans la portée locale actuelle.

enter image description here

Modifier:

Si vous souhaitez placer vos cahiers dans un répertoire appelé notebooks dans le répertoire racine, vous pouvez procéder comme suit:

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

Merci à Mark Chackerian dont la réponse a fourni l’idée de faire exécuter les cahiers dans un répertoire autre que la racine du projet.

Ce sont les modules qui sont importés automatiquement grâce à Shell_plus:

# 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

Ce qui suit fonctionne pour moi avec win10, Python 3.5, Django 1.10:

  • Installez Python avec la distribution Anaconda donc Jupyter sera également installé
  • Installez Django et installez Django-extensions:

    pip install Django
    
    pip install Django-extensions
    
  • Commencez un nouveau projet Django. Vous devez le faire dans cette partie de votre arborescence de répertoires accessible ultérieurement par Jupyter.

    Django-admin startproject _myDjangoProject_
    
  • Démarrer Jypter

  • naviguez Jupyter vers le répertoire myDjangoProject et entrez le premier/haut myDjangoProject - annuaire
  • Commencez dans le premier/top myDjangoProject - répertoire un nouveau bloc-notes Jupyter: new -> Django Shell-Plus
  • entrez et exécutez le code suivant:

    import os
    os.environ.setdefault("Django_SETTINGS_MODULE", "myDjangoProject.settings")
    import Django
    django.setup()
    
  • Notez que ce morceau de code est le même que dans manage.py et notez que "myDjangoProject.settings" pointe vers myDjangoProject/settings.py

  • Maintenant, vous pouvez commencer avec des exemples, par exemple:

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

Bien que la réponse acceptée par RobM fonctionne, elle était moins claire que possible et comporte quelques étapes inutiles. En d'autres termes, pour exécuter des blocs-notes via Django à partir d'un environnement de bloc-notes en dehors du répertoire du projet:

Installer:

 pip install Django-extensions

Ajouter 'Django-extensions' à ton INSTALLED_APPS liste dans settings.py

 INSTALLED_APPS += ['Django_extensions']

Lancez un cahier depuis Django, puis fermez-le:

python manage.py Shell_plus --notebook

Cela créera votre noyau, que nous allons maintenant éditer pour qu'il pointe vers un chemin absolu Python plutôt que vers un chemin relatif.

Sur OSX, le fichier du noyau est: ~/Library/Jupyter/kernels/Django_extensions/kernel.json

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

Il suffit de faire deux changements:

La première consiste à éditer la première valeur dans le "argv" liste de "python" à l’adresse complète de la version python de votre environnement virtuel Django. E.g .: "/Users/$USERNAME/Documents/PROJECT_FOLDER/venv/bin/python"

Deuxièmement, au "env" dictionnaire, ajouter "Django_SETTINGS_MODULE": "mysite.settings",mysite est le dossier contenant vos paramètres Django.

Eventuellement, changez la valeur de "display_name".

Maintenant, lorsque vous exécutez un bloc-notes à partir de n’importe quel répertoire, choisissez la "Django Shell-Plus" Le noyau permettra à vos notebooks d’interagir avec Django. Tous les paquets tels que pandas devront être installés dans Django venv.

2
Rafters

Je vais ajouter quelques informations à la très complète réponse de RobM, au profit des très rares développeurs qui utilisent buildout avec djangorecipe djangorecipe as Je fais ... Je parle de Jupyter Lab comme je l’utilise mais je pense que toutes les informations peuvent être appliquées aux vieux cahiers Jupyter.

En utilisant buildout, vous vous retrouvez avec un gestionnaire 'bin/Django' que vous utiliserez à la place de 'manage.py'. C'est le script qui définit tout le chemin. J'ai ajouté une partie de plus dans mon buildout.cfg:

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

afin qu'un autre script nommé ipython soit créé dans le répertoire ./bin. Je pointe kernelspec vers cet interprète. De plus, j'utilise kernel argument plutôt que "-m", "ipykernel_launcher" Pour que la définition du noyau que j'utilise soit la suivante:

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

En raison de la façon dont le script ipython est créé par buildout, il n'est pas nécessaire d'ajouter des variables d'environnement dans mon cas.

Comme Rob l'a déjà mentionné, jupiterlab n'est installé que dans un environnement où je le lance avec la commande:

jupyter lab

pas dans l'environnement de Django projet j'installe seulement ipykernel (qui a déjà un tas de 20 dépendances).

Comme j'ai tendance à avoir beaucoup de projets, je trouve utile d'avoir un seul point où je commence jupyter lab Avec de nombreux liens vers les projets afin que je puisse les atteindre facilement. Grâce à l'extension fournie par Django_extension, je n'ai besoin d'aucune cellule supplémentaire pour initialiser le bloc-notes.

Tout noyau ajouté de cette manière peut être trouvé avec la commande:

jupyter kernelspec list

Et clairement répertorié dans le lanceur de Jupyter Lab

0
Alessandro Dentella