如何为 Django 设置 Jupyter/IPython Notebook?
How do I set up Jupyter/IPython Notebook for Django?
我一直在使用 this post 中描述的方法来设置 IPython Notebook 以与 Django 很好地配合使用。该方法的要点是创建一个 IPython 扩展,它在 IPython 启动时设置 DJANGO_SETTINGS_MODULE 和 运行s django.setup()。
扩展代码是:
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
随着最近对 Jupyter Notebook 的升级,我现在无法使用此设置。通过向笔记本的第一个单元格添加类似的代码,我能够 运行 在 Jupyter 笔记本中编写 Django 代码。但是,我无法弄清楚如何让 Jupyter 自动 运行 扩展,因此我不必为我正在创建的每个笔记本再次执行此操作。
我应该怎么做才能让 Django 和 Jupyter 玩得开心?
更新:
对于@DarkLight - 我正在使用 Django 1.8.5 和 Jupyter 1.0.0。我运行在笔记本中的代码是:
import os, sys
sys.path.insert(0, '/path/to/project')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settingsfile")
import django
django.setup()
从 https://github.com/django-extensions/django-extensions/blob/master/docs/index.rst 安装 django-extensions
pip install django-extensions
更改您的设置文件以包含 'django-extensions'
INSTALLED_APPS += ['django_extensions']
运行 你的 Django 服务器是这样的:
python manage.py shell_plus --notebook
改变以适应,运行在你的第一个单元格中
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()
现在您应该可以导入您的 django 模型等了。例如:
from app.models import Foobar
Foobar.objects.all()
使用 win10、Python 3.5、Django 1.10 时,以下内容对我有用:
- 使用 Anaconda 发行版安装 Python 这样 Jupyter 也将被安装
安装Django并安装django-extensions:
pip install Django
pip install django-extensions
开始一个新的 Django 项目。您必须在目录树的那部分执行此操作,稍后 Jupyter 可以访问该部分。
django-admin startproject _myDjangoProject_
启动 Jypter
- 将 Jupyter 导航到目录 myDjangoProject 并进入 first/top myDjangoProject-目录
- 在 first/top myDjangoProject 目录中启动一个新的 Jupyter noteboke:new --> Django Shell-Plus
输入并运行以下代码:
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myDjangoProject.settings")
import django
django.setup()
注意这段代码和manage.py一样,注意"myDjangoProject.settings"指向myDjangoProject/settings.py
现在您可以从示例开始,例如:
from django.template import Template, Context
template = Template('The name of this project is {{ projectName }}')
context = Context({'projectName': 'MyJypyterDjangoSite'})
template.render(context)
实际上你(可能不会)需要做所有这些废话。只需安装 django-extensions 和 运行 jupyter!
(myprojectvenv)$ cd myproject
(myprojectvenv)$ pip install jupyter
(myprojectvenv)$ pip install django-extensions
(myprojectvenv)$ jupyter notebook
在浏览器中,开始一个新的 "Django Shell-Plus":
你应该可以开始了。例如:
from myproject.models import Foobar
Foobar.objects.all()
这是对我有用的方法
- install Django Extensions(我使用 1.9.6)根据其他答案
- 安装 jupyter
pip install jupyter
- 我在我的 Docker 容器中设置 jupyter 所做的一些事情——如果这适用于您,请参阅下文 †
- 从您的基本 Django 目录中,为笔记本创建一个目录,例如
mkdir notebooks
- 转到那个目录
cd notebooks
- 从该目录中启动 django 扩展 shell_plus:
../manage.py shell_plus --notebook
笔记本服务器现在应该 运行ning,并且可能会启动一个新的浏览器。如果它没有启动浏览器 window,请按照说明粘贴 link 或令牌。
- 从浏览器打开一个新的 "Django Shell Plus" 笔记本,按照 John Mee 的回答截图
AND,重要的是,没有的工作是从笔记本环境中更改目录。如果我尝试使用不在 manage.py shell_plus --notebook
所在的目录中的任何笔记本 运行,那么内核配置不正确。对我来说,让笔记本一次只配置一个目录就足够了。如果您需要更强大的解决方案,您应该能够在启动 jupyter 之前设置 PYTHONPATH
。例如,将 export PYTHONPATH="$PYTHONPATH:/path/to/django/project"
添加到 virtualenv 激活脚本。但是我没试过这个。
† Docker 设置(可选)
- 为端口 8888 添加容器的端口映射
例如,在您的 docker 撰写文件中;
ports:
- "8890:8888"
- 将项目设置文件配置为使用 ip 0.0.0.0
这是我所做的:
NOTEBOOK_ARGUMENTS = [
'--ip', '0.0.0.0',
'--allow-root',
'--no-browser',
]
只是为了完整性(但现在是 2018 年,所以自从发布这个问题后情况可能发生了变化):你实际上可以在你的 Django 环境中安装一个 Jupyter Python 内核,然后连接(运行 under) 一个不同的 Jupyter server/environment(你已经在其中安装了小部件、扩展、更改了主题等)。 django_extensions
现在仍然只完成部分所需的工作:-)
这假设您有一个 Jupyter 虚拟环境,它与 Django 的虚拟环境是分开的,并且其 kernels/extensions 与 --user
一起安装。所有 Jupyter 扩展(及其依赖项)都安装在这个 venv 中,而不是 Django 的 one/ones(如果需要一起使用,在 Django 环境中你仍然需要 pandas、matplotlib 等使用 Django 代码)。
在您的 Django 虚拟环境中(可以 运行 不同版本的 Python,包括版本 2 解释器)安装 ipython 内核:
pip install -U ipykernel
ipython kernel install --user --name='environment_name' --display-name='Your Project'
这将在您用户的 Jupyter 内核目录中创建一个具有指定 --name 的内核配置目录(在 Linux 上它是 ~/.jupyter/
而在 OSX 上它是 ~/Library/Jupyter/
) 包含它的 kernel.json 文件和 images/icons (默认情况下,我们正在安装的内核使用默认的 Jupyter 图标)。该内核将 运行 在创建时激活的虚拟环境中,因此使用完全相同的 python 版本以及我们的 Django 项目使用的所有已安装模块。
运行 ./manage.py shell_plus --notebook
做的事情非常相似,但是除了要求在当前 venv 中安装所有东西(包括 Jupyter 服务器和所有扩展)之外,它也无法 运行 notebooks 在与项目根目录不同的目录中(包含 ./manage.py
的目录)。此外,它将 运行 内核使用它在路径上找到的第一个名为 python 的可执行文件,而不是虚拟环境的可执行文件,这使得它在未从活动 Django 虚拟环境中的命令行启动时行为异常.
要解决这些问题,以便我们能够在我们如此配置的任何 Django 项目中创建笔记本 运行ning,并且能够 运行 笔记本存储在文件系统的任何位置,我们需要:
- 确保第一个“argv”参数包含虚拟环境中包含的 python 解释器的完整路径
- 添加(如果尚未存在)一个包含 shell 环境变量的“env”部分,然后使用这些来告诉 Python 在哪里可以找到我们的项目以及它应该使用哪些 Django 设置.我们通过添加如下内容来做到这一点:
"env": {
"DJANGO_SETTINGS_MODULE": "my_project.settings",
"PYTHONPATH": "$PYTHONPATH:/home/projectuser/projectfolder/my_project"
}
- 可选:将“display_name”更改为人性化并替换图标。
编辑这个环境 kernel.json 文件你会看到类似的东西:
{
"display_name": "My Project",
"language": "python",
"env": {
"DJANGO_SETTINGS_MODULE": "my_project.settings",
"PYTHONPATH": "$PYTHONPATH:/home/projectuser/projectfolder/my_project"
},
"argv": [
"/home/projectuser/.pyenv/versions/2.7.15/envs/my_project_venv/bin/python",
"-m",
"ipykernel_launcher",
"-f",
"{connection_file}",
"--ext",
"django_extensions.management.notebook_extension"
]
}
值得注意的台词:
"DJANGO_SETTINGS_MODULE": "my_project.settings": 你的设置,通常在你项目的 manage.py
"PYTHONPATH": "$PYTHONPATH:/home/projectuser/projectfolder/my_project": PYTHONPATH 被扩展为包括你项目的主目录(包含manage.py) 这样即使内核不在 运行 中也可以找到设置(这里 django_extensions 将使用通用 python
,因此 运行 错误的虚拟环境,除非从内部启动整个 Jupyter 服务器:将此添加到 django_extensions 创建的 kernel.json 将使它能够在 Django 项目目录中的任何地方 运行 notebooks)
"/home/projectuser/.pyenv/versions/2.7.15/envs/my_project_venv/bin/python":的第一个参数(argv 列表)内核执行,应该是项目虚拟环境的 python 解释器的完整路径(这是 django_extensions 的另一件事:修复此问题将允许任何笔记本服务器 运行 特定 Django 环境的内核及其所有已安装的模块)
"django_extensions.management.notebook_extension":这是将在笔记本中加载 'shell_plus' 功能的扩展(可选但有用:-) )
我会像往常一样向非常完整的 of RobM, for the benefit of the very rare developers that use buildout along with djangorecipe djangorecipe 添加一些信息...我在使用时指的是 jupyter 实验室,但我认为所有信息都可以应用于旧的 jupyter 笔记本。
使用构建时,您最终会得到一个 'bin/django' 处理程序,您将使用它来代替 'manage.py'。那是定义整个路径的脚本。我在 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'
以便在 ./bin
目录中创建另一个名为 ipython
的脚本。我将 kernelspec 指向那个解释器。此外,我使用 kernel
参数而不是 "-m", "ipykernel_launcher"
因此我使用的内核定义是:
{
"argv": [
"/misc/src/hg/siti/trepalchi/bin/ipython",
"kernel",
"-f",
"{connection_file}",
"--ext",
"django_extensions.management.notebook_extension"
],
"display_name": "Trepalchi",
"language": "python"
}
由于 ipython 脚本是由 buildout
创建的,因此在我的情况下无需添加环境变量。
正如 Rob 已经提到的,jupiterlab 仅安装在一个环境中,我使用以下命令启动它:
jupyter lab
不在我只安装ipykernel
的Django项目环境中(已经有一堆20个依赖项)。
由于我往往有很多项目,所以我发现从一个点开始 jupyter lab
并提供许多项目链接非常有用,这样我就可以轻松访问它们。感谢 django_extension 提供的扩展,我不需要任何额外的单元来初始化笔记本。
可以使用以下命令找到以这种方式添加的任何单个内核:
jupyter kernelspec list
并且清楚地列在 jupyter lab 的启动器中
注意: 我正在使用 Python 3.7 和 Django 2.1,它适用于 Django 2.2。我不需要 运行 在我的第一个单元格中做任何事情,只要你不介意将笔记本放在 Django 项目的根目录中,这就像魅力一样。
假设您有一个项目的虚拟环境,并且它已激活。我使用 pipenv
来创建虚拟环境并跟踪我的 python 项目的依赖关系,但这取决于您使用什么工具。
还假设您已经创建了一个 Django 项目并且您的当前工作目录是该项目的根目录。
步骤
安装jupyter
使用 pip
pip install jupyter
使用 pipenv
pipenv install jupyter
安装django-extentions
使用 pip
pip install django-extensions
使用 pipenv
pipenv install django-extensions
通过将 django-extensions
添加到 Django 项目 settings.py
文件的 INSTALLED_APPS
设置来设置它。:
INSTALLED_APPS = (
...
'django_extensions',
)
运行 作为 django-extensions
一部分的 shell_plus
管理命令。使用选项 --notebook
启动笔记本:
python manage.py shell_plus --notebook
Jupyter 笔记本将在您的浏览器中自动打开。
开始一个新的Django Shell-Plus笔记本
就是这样!
同样,您不必 运行 第一个单元格中的任何内容,您可以通过 运行ning dir()
来证实以查看当前本地范围内的名称。
编辑:
如果你想把你的笔记本放在根目录下一个名为notebooks
的目录下,你可以这样做:
$ mkdir notebooks && cd notebooks
$ python ../manage.py shell_plus --notebook
感谢 Mark Chackerian,他的回答提供了在项目根目录以外的目录中制作 运行 笔记本的想法。
这些是由于 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
虽然 RobM 接受的答案有效,但它不够清晰,并且有一些不必要的步骤。简单地说,通过 Django 从项目目录外的笔记本环境 运行 笔记本 :
安装:
pip install django-extensions
将 'django-extensions'
添加到 settings.py
中的 INSTALLED_APPS
列表
INSTALLED_APPS += ['django_extensions']
运行 来自 Django 的笔记本,然后关闭它:
python manage.py shell_plus --notebook
这将创建您的内核,我们现在将对其进行编辑以指向 Python 的绝对路径而不是相对路径。
在 OSX 上,内核文件位于:~/Library/Jupyter/kernels/django_extensions/kernel.json
在 Linux 上:~/.jupyter/kernels/django_extensions/kernel.json
我们只需要做两个改变:
首先是将 "argv"
列表中的第一个值从 "python"
编辑为 Django 虚拟环境中 python 版本的完整地址。例如:"/Users/$USERNAME/Documents/PROJECT_FOLDER/venv/bin/python"
其次,在 "env"
字典中添加 "DJANGO_SETTINGS_MODULE": "mysite.settings",
,其中 mysite
是包含您的 Django 设置的文件夹。
(可选)更改 "display_name"
的值。
现在,当您从任何目录 运行 笔记本时,选择 "Django Shell-Plus"
内核将允许您的笔记本与 Django 交互。 pandas 等任何包都需要安装在 Django venv 中。
运行这个命令。
PYTHONPATH=/path/to/project/root DJANGO_SETTINGS_MODULE=settings python manage.py shell_plus --notebook
我一直在使用 this post 中描述的方法来设置 IPython Notebook 以与 Django 很好地配合使用。该方法的要点是创建一个 IPython 扩展,它在 IPython 启动时设置 DJANGO_SETTINGS_MODULE 和 运行s django.setup()。
扩展代码是:
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
随着最近对 Jupyter Notebook 的升级,我现在无法使用此设置。通过向笔记本的第一个单元格添加类似的代码,我能够 运行 在 Jupyter 笔记本中编写 Django 代码。但是,我无法弄清楚如何让 Jupyter 自动 运行 扩展,因此我不必为我正在创建的每个笔记本再次执行此操作。
我应该怎么做才能让 Django 和 Jupyter 玩得开心?
更新: 对于@DarkLight - 我正在使用 Django 1.8.5 和 Jupyter 1.0.0。我运行在笔记本中的代码是:
import os, sys
sys.path.insert(0, '/path/to/project')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settingsfile")
import django
django.setup()
从 https://github.com/django-extensions/django-extensions/blob/master/docs/index.rst 安装
django-extensions
pip install django-extensions
更改您的设置文件以包含 'django-extensions'
INSTALLED_APPS += ['django_extensions']
运行 你的 Django 服务器是这样的:
python manage.py shell_plus --notebook
改变以适应,运行在你的第一个单元格中
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()
现在您应该可以导入您的 django 模型等了。例如:
from app.models import Foobar Foobar.objects.all()
使用 win10、Python 3.5、Django 1.10 时,以下内容对我有用:
- 使用 Anaconda 发行版安装 Python 这样 Jupyter 也将被安装
安装Django并安装django-extensions:
pip install Django pip install django-extensions
开始一个新的 Django 项目。您必须在目录树的那部分执行此操作,稍后 Jupyter 可以访问该部分。
django-admin startproject _myDjangoProject_
启动 Jypter
- 将 Jupyter 导航到目录 myDjangoProject 并进入 first/top myDjangoProject-目录
- 在 first/top myDjangoProject 目录中启动一个新的 Jupyter noteboke:new --> Django Shell-Plus
输入并运行以下代码:
import os os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myDjangoProject.settings") import django django.setup()
注意这段代码和manage.py一样,注意"myDjangoProject.settings"指向myDjangoProject/settings.py
现在您可以从示例开始,例如:
from django.template import Template, Context template = Template('The name of this project is {{ projectName }}') context = Context({'projectName': 'MyJypyterDjangoSite'}) template.render(context)
实际上你(可能不会)需要做所有这些废话。只需安装 django-extensions 和 运行 jupyter!
(myprojectvenv)$ cd myproject
(myprojectvenv)$ pip install jupyter
(myprojectvenv)$ pip install django-extensions
(myprojectvenv)$ jupyter notebook
在浏览器中,开始一个新的 "Django Shell-Plus":
你应该可以开始了。例如:
from myproject.models import Foobar
Foobar.objects.all()
这是对我有用的方法
- install Django Extensions(我使用 1.9.6)根据其他答案
- 安装 jupyter
pip install jupyter
- 我在我的 Docker 容器中设置 jupyter 所做的一些事情——如果这适用于您,请参阅下文 †
- 从您的基本 Django 目录中,为笔记本创建一个目录,例如
mkdir notebooks
- 转到那个目录
cd notebooks
- 从该目录中启动 django 扩展 shell_plus:
../manage.py shell_plus --notebook
笔记本服务器现在应该 运行ning,并且可能会启动一个新的浏览器。如果它没有启动浏览器 window,请按照说明粘贴 link 或令牌。 - 从浏览器打开一个新的 "Django Shell Plus" 笔记本,按照 John Mee 的回答截图
AND,重要的是,没有的工作是从笔记本环境中更改目录。如果我尝试使用不在 manage.py shell_plus --notebook
所在的目录中的任何笔记本 运行,那么内核配置不正确。对我来说,让笔记本一次只配置一个目录就足够了。如果您需要更强大的解决方案,您应该能够在启动 jupyter 之前设置 PYTHONPATH
。例如,将 export PYTHONPATH="$PYTHONPATH:/path/to/django/project"
添加到 virtualenv 激活脚本。但是我没试过这个。
† Docker 设置(可选)
- 为端口 8888 添加容器的端口映射
例如,在您的 docker 撰写文件中;
ports:
- "8890:8888"
- 将项目设置文件配置为使用 ip 0.0.0.0
这是我所做的:
NOTEBOOK_ARGUMENTS = [
'--ip', '0.0.0.0',
'--allow-root',
'--no-browser',
]
只是为了完整性(但现在是 2018 年,所以自从发布这个问题后情况可能发生了变化):你实际上可以在你的 Django 环境中安装一个 Jupyter Python 内核,然后连接(运行 under) 一个不同的 Jupyter server/environment(你已经在其中安装了小部件、扩展、更改了主题等)。 django_extensions
现在仍然只完成部分所需的工作:-)
这假设您有一个 Jupyter 虚拟环境,它与 Django 的虚拟环境是分开的,并且其 kernels/extensions 与 --user
一起安装。所有 Jupyter 扩展(及其依赖项)都安装在这个 venv 中,而不是 Django 的 one/ones(如果需要一起使用,在 Django 环境中你仍然需要 pandas、matplotlib 等使用 Django 代码)。
在您的 Django 虚拟环境中(可以 运行 不同版本的 Python,包括版本 2 解释器)安装 ipython 内核:
pip install -U ipykernel
ipython kernel install --user --name='environment_name' --display-name='Your Project'
这将在您用户的 Jupyter 内核目录中创建一个具有指定 --name 的内核配置目录(在 Linux 上它是 ~/.jupyter/
而在 OSX 上它是 ~/Library/Jupyter/
) 包含它的 kernel.json 文件和 images/icons (默认情况下,我们正在安装的内核使用默认的 Jupyter 图标)。该内核将 运行 在创建时激活的虚拟环境中,因此使用完全相同的 python 版本以及我们的 Django 项目使用的所有已安装模块。
运行 ./manage.py shell_plus --notebook
做的事情非常相似,但是除了要求在当前 venv 中安装所有东西(包括 Jupyter 服务器和所有扩展)之外,它也无法 运行 notebooks 在与项目根目录不同的目录中(包含 ./manage.py
的目录)。此外,它将 运行 内核使用它在路径上找到的第一个名为 python 的可执行文件,而不是虚拟环境的可执行文件,这使得它在未从活动 Django 虚拟环境中的命令行启动时行为异常.
要解决这些问题,以便我们能够在我们如此配置的任何 Django 项目中创建笔记本 运行ning,并且能够 运行 笔记本存储在文件系统的任何位置,我们需要:
- 确保第一个“argv”参数包含虚拟环境中包含的 python 解释器的完整路径
- 添加(如果尚未存在)一个包含 shell 环境变量的“env”部分,然后使用这些来告诉 Python 在哪里可以找到我们的项目以及它应该使用哪些 Django 设置.我们通过添加如下内容来做到这一点:
"env": {
"DJANGO_SETTINGS_MODULE": "my_project.settings",
"PYTHONPATH": "$PYTHONPATH:/home/projectuser/projectfolder/my_project"
}
- 可选:将“display_name”更改为人性化并替换图标。
编辑这个环境 kernel.json 文件你会看到类似的东西:
{
"display_name": "My Project",
"language": "python",
"env": {
"DJANGO_SETTINGS_MODULE": "my_project.settings",
"PYTHONPATH": "$PYTHONPATH:/home/projectuser/projectfolder/my_project"
},
"argv": [
"/home/projectuser/.pyenv/versions/2.7.15/envs/my_project_venv/bin/python",
"-m",
"ipykernel_launcher",
"-f",
"{connection_file}",
"--ext",
"django_extensions.management.notebook_extension"
]
}
值得注意的台词:
"DJANGO_SETTINGS_MODULE": "my_project.settings": 你的设置,通常在你项目的 manage.py
"PYTHONPATH": "$PYTHONPATH:/home/projectuser/projectfolder/my_project": PYTHONPATH 被扩展为包括你项目的主目录(包含manage.py) 这样即使内核不在 运行 中也可以找到设置(这里 django_extensions 将使用通用
python
,因此 运行 错误的虚拟环境,除非从内部启动整个 Jupyter 服务器:将此添加到 django_extensions 创建的 kernel.json 将使它能够在 Django 项目目录中的任何地方 运行 notebooks)"/home/projectuser/.pyenv/versions/2.7.15/envs/my_project_venv/bin/python":的第一个参数(argv 列表)内核执行,应该是项目虚拟环境的 python 解释器的完整路径(这是 django_extensions 的另一件事:修复此问题将允许任何笔记本服务器 运行 特定 Django 环境的内核及其所有已安装的模块)
"django_extensions.management.notebook_extension":这是将在笔记本中加载 'shell_plus' 功能的扩展(可选但有用:-) )
我会像往常一样向非常完整的
使用构建时,您最终会得到一个 'bin/django' 处理程序,您将使用它来代替 'manage.py'。那是定义整个路径的脚本。我在 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'
以便在 ./bin
目录中创建另一个名为 ipython
的脚本。我将 kernelspec 指向那个解释器。此外,我使用 kernel
参数而不是 "-m", "ipykernel_launcher"
因此我使用的内核定义是:
{
"argv": [
"/misc/src/hg/siti/trepalchi/bin/ipython",
"kernel",
"-f",
"{connection_file}",
"--ext",
"django_extensions.management.notebook_extension"
],
"display_name": "Trepalchi",
"language": "python"
}
由于 ipython 脚本是由 buildout
创建的,因此在我的情况下无需添加环境变量。
正如 Rob 已经提到的,jupiterlab 仅安装在一个环境中,我使用以下命令启动它:
jupyter lab
不在我只安装ipykernel
的Django项目环境中(已经有一堆20个依赖项)。
由于我往往有很多项目,所以我发现从一个点开始 jupyter lab
并提供许多项目链接非常有用,这样我就可以轻松访问它们。感谢 django_extension 提供的扩展,我不需要任何额外的单元来初始化笔记本。
可以使用以下命令找到以这种方式添加的任何单个内核:
jupyter kernelspec list
并且清楚地列在 jupyter lab 的启动器中
注意: 我正在使用 Python 3.7 和 Django 2.1,它适用于 Django 2.2。我不需要 运行 在我的第一个单元格中做任何事情,只要你不介意将笔记本放在 Django 项目的根目录中,这就像魅力一样。
假设您有一个项目的虚拟环境,并且它已激活。我使用 pipenv
来创建虚拟环境并跟踪我的 python 项目的依赖关系,但这取决于您使用什么工具。
还假设您已经创建了一个 Django 项目并且您的当前工作目录是该项目的根目录。
步骤
安装
jupyter
使用 pip
pip install jupyter
使用 pipenv
pipenv install jupyter
安装
django-extentions
使用 pip
pip install django-extensions
使用 pipenv
pipenv install django-extensions
通过将
django-extensions
添加到 Django 项目settings.py
文件的INSTALLED_APPS
设置来设置它。:INSTALLED_APPS = ( ... 'django_extensions', )
运行 作为
django-extensions
一部分的shell_plus
管理命令。使用选项--notebook
启动笔记本:python manage.py shell_plus --notebook
Jupyter 笔记本将在您的浏览器中自动打开。
开始一个新的Django Shell-Plus笔记本
就是这样!
同样,您不必 运行 第一个单元格中的任何内容,您可以通过 运行ning dir()
来证实以查看当前本地范围内的名称。
编辑:
如果你想把你的笔记本放在根目录下一个名为notebooks
的目录下,你可以这样做:
$ mkdir notebooks && cd notebooks
$ python ../manage.py shell_plus --notebook
感谢 Mark Chackerian,他的回答提供了在项目根目录以外的目录中制作 运行 笔记本的想法。
这些是由于 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
虽然 RobM 接受的答案有效,但它不够清晰,并且有一些不必要的步骤。简单地说,通过 Django 从项目目录外的笔记本环境 运行 笔记本 :
安装:
pip install django-extensions
将 'django-extensions'
添加到 settings.py
INSTALLED_APPS
列表
INSTALLED_APPS += ['django_extensions']
运行 来自 Django 的笔记本,然后关闭它:
python manage.py shell_plus --notebook
这将创建您的内核,我们现在将对其进行编辑以指向 Python 的绝对路径而不是相对路径。
在 OSX 上,内核文件位于:~/Library/Jupyter/kernels/django_extensions/kernel.json
在 Linux 上:~/.jupyter/kernels/django_extensions/kernel.json
我们只需要做两个改变:
首先是将 "argv"
列表中的第一个值从 "python"
编辑为 Django 虚拟环境中 python 版本的完整地址。例如:"/Users/$USERNAME/Documents/PROJECT_FOLDER/venv/bin/python"
其次,在 "env"
字典中添加 "DJANGO_SETTINGS_MODULE": "mysite.settings",
,其中 mysite
是包含您的 Django 设置的文件夹。
(可选)更改 "display_name"
的值。
现在,当您从任何目录 运行 笔记本时,选择 "Django Shell-Plus"
内核将允许您的笔记本与 Django 交互。 pandas 等任何包都需要安装在 Django venv 中。
运行这个命令。
PYTHONPATH=/path/to/project/root DJANGO_SETTINGS_MODULE=settings python manage.py shell_plus --notebook