为了完整起见(但现在是2018年,所以自提问发布以来可能已经有所改变):您实际上可以在Django环境中安装Jupyter Python内核,然后连接(在)不同的Jupyter服务器/环境下运行(其中您安装了小部件、扩展、更改主题等)。目前,django_extensions仍然只完成所需工作的一部分:-)
这假设您拥有一个与Django独立的Jupyter虚拟环境,并且其内核/扩展是使用--user安装的。所有的Jupyter扩展及其依赖项均安装在此venv中,而不是Django环境中的venv(如果您需要在Django代码中与之一起使用,仍需要使用pandas、matplotlib等Django环境)。
在您的Django虚拟环境中(可以运行不同版本的Python,包括版本2解释器),安装ipython kernel:
pip install -U ipykernel
ipython kernel install --user --name='environment_name' --display-name='Your Project'
这将在您的用户Jupyter内核目录中创建一个具有指定名称的内核配置目录(在Linux上它是~/.local/share/jupyter/kernels/
,而在OSX上它是~/Library/Jupyter/kernels
)。该目录包含内核的kernel.json文件和图像/图标(默认情况下使用正在安装的内核的默认Jupyter图标)。该内核将在创建时处于活动状态的虚拟环境中运行,因此使用与我们的Django项目使用的完全相同版本的Python和所有已安装模块。
运行./manage.py shell_plus --notebook
执行的操作非常相似,但除了要求当前虚拟环境中安装了所有内容(包括Jupyter服务器和所有扩展程序)之外,还无法在不同于项目根目录(包含./manage.py
)的目录中运行笔记本。此外,它将使用路径中找到的第一个可执行文件名为python的程序来运行内核,而不是虚拟环境的程序,这可能导致在未在活动的Django虚拟环境内从命令行启动时出现问题。
为了解决这些问题,以便我们能够在任何已配置的Django项目中创建运行的笔记本,并能够在文件系统上的任何位置运行笔记本,我们需要:
- 确保第一个“argv”参数包含虚拟环境中包含的Python解释器的完整路径
- 添加(如果尚未存在)一个“env”部分,其中将包含Shell环境变量,然后使用这些变量告诉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项目目录中的任何位置运行笔记本)
"/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”功能的扩展名(可选但有用 :-))