我一直在使用this post中描述的方法来设置IPython Notebook,使其可以很好地运行Django。该方法的要点是创建一个IPython扩展,该扩展设置DJANGO_SETTINGS_MODULE并在IPython启动时运行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 Notebook的第一个单元格中添加类似的代码来运行Django代码。但是,我无法弄清楚如何让Jupyter自动运行扩展,这样我就不必为我创建的每一个笔记本重复这样做了。
我该怎么做才能让 Django 和朱皮特玩得好?
**更新:**对于@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()
9条答案
按热度按时间tvz2xvvm1#
1.从https://github.com/django-extensions/django-extensions/blob/master/docs/index.rst安装
django-extensions
1.更改您的设置文件以包含'django-extensions'
1.像这样运行Django服务器:
1.根据需要进行修改,然后在第一个单元格中运行此程序
1.现在你应该可以导入你的django模型了。
tct7dpnv2#
为了完整起见(但现在是2018年,所以也许这个问题发布后情况发生了变化):实际上,你可以在Django环境中安装Jupyter Python内核,然后连接(运行)另一个Jupyter服务器/环境(你已经安装了小部件,扩展,更改了主题,等等)。
django_extensions
现在仍然只完成了所需工作的一部分:-)这里假设你有一个独立于Django的Jupyter虚拟环境,它的内核/扩展都是用
--user
安装的。所有Jupyter扩展(以及它们的依赖项)都安装在这个venv中,而不是Django的(如果你需要和Django代码一起使用,你仍然需要panda,matplotlib等)。在Django虚拟环境中(可以运行不同版本的Python,包括版本2解释器)安装ipython内核:
这将在用户的Jupyter内核目录中创建一个具有指定--name的内核配置目录(在Linux上,它 * 是 *
~/.jupyter/kernels
,但在2023年变成了~/.local/share/jupyter/kernels/
,而在OSX上,它是~/Library/Jupyter/kernels
),包含其kernel.json文件和图像/图标(默认情况下,我们安装的内核使用默认的Jupyter图标).这个内核将在创建时处于活动状态的虚拟环境中运行,因此使用了与Django项目完全相同的python版本和所有已安装的模块。运行
./manage.py shell_plus --notebook
执行的操作非常类似,但除了需要所有内容之外(包括Jupyter服务器和所有扩展),它也无法在项目根目录以外的目录中运行笔记本(包含./manage.py
的那个)。另外,它将使用在路径中找到的第一个名为python的可执行文件来运行内核,而不是虚拟环境的一个,使得它在一个活跃的Django虚拟环境中不从命令行启动时行为不当。为了解决这些问题,使我们能够创建一个在任何Django项目中运行的Notebook,并且能够运行存储在文件系统上任何地方的Notebook,我们需要:
1.确保第一个'argv'参数包含虚拟环境中包含的python解释器的完整路径
1.添加(如果还没有的话)一个包含shell环境变量的'env'部分,然后使用这些来告诉Python在哪里可以找到我们的项目,以及它应该使用哪些Django设置。
1.可选:将“display_name”更改为人性化并替换图标。
编辑这个环境kernel.json文件,你会看到类似的东西:
值得注意的行:
*“Django设置模块”:“我的项目设置”:设置,通常在项目的www.example.com中显示manage.py
*“Python路径”:“$PYTHONPATH:/主目录/项目用户/项目文件夹/我的项目”:PYTHONPATH被扩展为包含项目的主目录(包含www.example.com的目录manage.py),这样即使内核不在该目录下运行,也可以找到设置(这里django_extensions将使用一个通用的
python
,从而运行错误的虚拟环境,除非整个Jupyter服务器都从其中启动:将其添加到由django_extensions创建的kernel.json中,将使其能够在Django项目目录中的任何地方运行笔记本)*"/home/项目用户/.pyenv/版本/2.7.15/环境/我的项目版本/bin/python”:内核执行的第一个参数(argv list)应该是项目虚拟环境的python解释器的完整路径(这是django_extensions的另一个错误:修复此问题将允许任何笔记本服务器运行特定Django环境的内核及其所有安装的模块)
*“django扩展管理笔记本扩展”:这是将在笔记本中加载“shell_plus”功能的扩展(可选但有用:-))
h9vpoimq3#
以下是刚刚对我有效的方法
1.安装木星
pip install jupyter
1.我在Docker容器中安装Jupyter时做的一些事情--如果适用于您,请参见下面的内容†
1.从你的Django基本目录,创建一个笔记本目录,例如
mkdir notebooks
1.转到该目录
cd notebooks
1.从目录中启动django扩展shell_plus:
../manage.py shell_plus --notebook
笔记本服务器现在应该正在运行,并且可能会启动新的浏览器。如果它没有启动浏览器窗口,请按照说明粘贴链接或令牌。
1.从浏览器,打开一个新的“DjangoShellPlus”笔记本,根据JohnMee的答案截图
还有,重要的是,* 不 * 起作用的是从笔记本环境内部更改目录。如果我尝试使用不在
manage.py shell_plus --notebook
运行目录中的任何笔记本,那么内核配置就不正确。对我来说,一次只为一个目录配置笔记本就足够了。如果您需要更强大的解决方案,你应该可以在启动jupyter之前设置PYTHONPATH
。例如,将export PYTHONPATH="$PYTHONPATH:/path/to/django/project"
添加到virtualenv激活脚本中。但是我还没有尝试过。†坞站设置(可选)
1.为端口8888添加容器的端口Map
例如,在Docker合成文件中;
1.将项目设置文件配置为使用ip0.0.0.0
我是这么做的:
vptzau2j4#
假设你的项目有一个虚拟环境,并且它是激活的,我使用
pipenv
来创建虚拟环境和跟踪我的python项目的依赖关系,但是这取决于你使用什么工具。同时假设 * 您已经创建了一个Django项目 * 并且您的 * 当前工作目录是这个项目的根目录 *。
步骤
1.安装
jupyter
1.安装
django-extentions
1.通过将
django-extensions
添加到Django项目settings.py
文件的INSTALLED_APPS
设置来设置django-extensions
。1.运行
django-extensions
中的shell_plus
管理命令。使用选项--notebook
启动笔记本:Jupyter Notebooks将在您的浏览器中自动打开。
1.开始新的Django Shell-Plus笔记本
就是这样!
同样,您不必在第一个单元格中运行任何内容,并且可以通过运行
dir()
查看当前本地作用域中的名称来进行确认。编辑:
如果要将笔记本放在根目录下名为
notebooks
的目录中,可以执行以下操作:感谢Mark Chackerian,他的回答提供了在项目根目录之外的目录中运行笔记本的想法。
以下是
shell_plus
自动导入的模块:r9f1avp55#
实际上你(* 可能不需要 *)需要做所有这些废话。只要安装django-extensions并运行jupyter就行了!
在浏览器中,启动一个新的“Django Shell-Plus”:
你应该是好去。
zour9fqk6#
虽然RobM给出的答案是可行的,但它并不那么清晰,而且有一些不必要的步骤。简单地说,要从项目目录 * 之外的笔记本环境通过Django * 运行笔记本:
安装:
将
'django-extensions'
添加到settings.py
中的INSTALLED_APPS
列表在Django中运行笔记本,然后关闭它:
这将创建你的内核,我们现在将编辑它,使其指向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交互。任何包,如panda,都需要安装在Django venv中。h79rfbju7#
下面的代码对我来说在win10,Python 3.5,Django 1.10中是有效的:
qfe3c7zg8#
运行此命令。
pb3s4cty9#
我将添加一些信息到非常完整的answer的RobM,为非常罕见的开发人员的利益,使用buildout沿着djangorecipe djangorecipe,因为我这样做...我指的是jupyter实验室,因为我使用,但我认为所有的信息可以适用于旧jupyter笔记本电脑。
当使用buildout时,您将使用一个'bin/django'处理程序来代替'manage.py'。这是定义整个路径的脚本。我在我的buildout.cfg中添加了另一个部分:
以便在
./bin
目录中创建另一个名为ipython
脚本。我将kernelspec指向该解释器。此外,我使用了kernel
参数而不是"-m", "ipykernel_launcher"
,因此我使用的内核定义为:由于ipython脚本是由
buildout
创建的,因此在我的例子中不需要添加环境变量。正如Rob已经提到的,jupiterlab只安装在一个环境中,我使用以下命令启动它:
不是在Django项目的环境中,我只安装了
ipykernel
(已经有20个依赖项了)。因为我有很多项目,所以我发现在
jupyter lab
的启动点设置很多项目链接是很有用的,这样我就可以很容易地访问它们。多亏了django_extension提供的扩展,我不需要任何额外的单元格来初始化笔记本。任何以这种方式添加的单个内核都可以通过以下命令找到:
清楚地列在木星实验室的发射器上