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()
Installer Django-extensions
de https://github.com/Django-extensions/Django-extensions/blob/master/docs/index.rst
pip install Django-extensions
Changez votre fichier de paramètres pour inclure les 'extensions Django'
INSTALLED_APPS += ['Django_extensions']
Exécutez votre serveur Django comme ceci:
python manage.py Shell_plus --notebook
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()
Vous devriez maintenant pouvoir importer vos modèles Django etc., par exemple:
from app.models import Foobar
Foobar.objects.all()
Voici ce qui vient de fonctionner pour moi
pip install jupyter
mkdir notebooks
cd notebooks
../manage.py Shell_plus --notebook
[~ # ~] 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.
Par exemple, dans votre menu fixe composez le fichier;
ports:
- "8890:8888"
C'est ce que j'ai fait:
NOTEBOOK_ARGUMENTS = [
'--ip', '0.0.0.0',
'--allow-root',
'--no-browser',
]
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":
Et vous devriez être prêt à partir. par exemple:
from myproject.models import Foobar
Foobar.objects.all()
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.
Installer jupyter
Utilisation de pip
pip install jupyter
Utilisation de pipenv
pipenv install jupyter
Installer Django-extentions
Utilisation de pip
pip install Django-extensions
Utilisation de pipenv
pipenv install Django-extensions
Configurez Django-extensions
En l'ajoutant au paramètre INSTALLED_APPS
De votre fichier Django project settings.py
:
INSTALLED_APPS = (
...
'Django_extensions',
)
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.
Démarrer un nouveau Django Bloc-notes Shell-Plus
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.
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
Ce qui suit fonctionne pour moi avec win10, Python 3.5, Django 1.10:
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
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)
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",
où 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.
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