我一直在使用本文中描述的方法来设置IPython笔记本,以便与Django很好地玩。该方法的要点是创建一个IPython扩展,它设置DJANGO_SETTINGS_模块并运行DJANGO。IPython启动时的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笔记本电脑后,我的这个设置就被破坏了。我可以在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()
这就是对我有用的东西
而且,重要的是,不起作用的是从笔记本环境内部更改目录。如果我尝试使用任何不在管理目录中的笔记本。py shell_plus--notebook
已在中运行,则内核配置不正确。对我来说,让笔记本一次只配置一个目录就足够了。如果您需要一个更健壮的解决方案,您应该能够在启动jupyter之前设置PYTHONPATH
。例如,将export PYTHONPATH=“$PYTHONPATH:/path/to/django/project”
添加到virtualenv激活脚本。但我还没试过这个。
例如,在docker撰写文件中;
ports:
- "8890:8888"
这就是我所做的:
NOTEBOOK_ARGUMENTS = [
'--ip', '0.0.0.0',
'--allow-root',
'--no-browser',
]
为了完整起见(但现在是2018年,所以自从这个问题发布后,事情可能发生了变化):你实际上可以在你的Django环境中安装一个Jupyter Python内核,然后它将连接(运行在)一个不同的Jupyter服务器/环境(一个你已经安装了小部件、扩展、更改了django_extensions
现在仍然只做所需工作的一部分:-)
这假设您有一个Jupyter虚拟环境,它与Django的虚拟环境是分开的,并且其内核/扩展是与--user
一起安装的。所有Jupyter扩展(及其依赖项)都安装在此venv中,而不是Django的一个或多个扩展(如果需要与Django代码一起使用,Django环境中仍然需要pandas、matplotlib等)。
在Django虚拟环境(可以运行不同版本的Python,包括版本2解释器)中安装ipython内核:
pip install -U ipykernel
ipython kernel install --user --name='environment_name' --display-name='Your Project'
这将在用户的Jupyter内核目录(在Linux上是~/.Jupyter/
,而在OSX上是~/Library/Jupyter/
)中创建一个包含其内核的内核配置目录,该目录使用指定的名称。json文件和图像/图标(默认情况下使用我们正在安装的内核的默认Jupyter图标)。该内核将在创建时处于活动状态的虚拟环境中运行,因此使用与python版本完全相同的python和Django项目使用的所有已安装模块。
运行./manage.pyshell_plus-笔记本
做了非常相似的事情,但是除了需要在当前venv中安装所有东西(包括Jupyter服务器和所有扩展)之外,它还不能在不同于项目目录的目录中运行笔记本root(包含./manage.py
的那个)。此外,它将使用它在路径上找到的第一个名为python的可执行文件运行内核,而不是虚拟环境的可执行文件,这使得它在不从活动Django虚拟环境中的命令行启动时行为不端。
要解决这些问题,以便我们能够在任何Django项目中创建运行的笔记本,并能够运行存储在文件系统中任何位置的笔记本,我们需要:
"env": {
"DJANGO_SETTINGS_MODULE": "my_project.settings",
"PYTHONPATH": "$PYTHONPATH:/home/projectuser/projectfolder/my_project"
}
编辑此环境内核。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"
]
}
值得注意的几行:
>
“PYTHONPATH”:“$PYTHONPATH:/home/projectuser/projectfolder/my_project”:PYTHONPATH被扩展为包含项目的主目录(包含manage.py的目录),这样即使内核没有在该目录下运行,也可以找到设置(这里django_扩展将使用通用的python
,因此运行错误的虚拟环境,除非从内部启动整个Jupyter服务器:将其添加到内核中。django_扩展创建的json将使其能够在django项目目录中的任何位置运行笔记本电脑)
"/home/project ectuser/. pyenv/version/2.7.15/envs/my_project_venv/bin/python":内核执行的第一个参数(argv list),应该是您项目的虚拟环境的python解释器的完整路径(这是另一件django_extensions出错的事情:修复它将允许任何笔记本服务器运行特定Django环境的内核及其所有已安装的模块)
“django_extensions.management.notebook_extension”:这是将在笔记本中加载“shell_plus”功能的扩展(可选但有用:-)
>
安装django扩展
从https://github.com/django-extensions/django-extensions/blob/master/docs/index.rst
pip install django-extensions
更改您的设置文件,以包括'django扩展'
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()
问题内容: 我一直在使用中描述的方法,这个职位设立IPython的笔记本电脑与Django的发挥很好。该方法的要点是创建一个IPython扩展,该扩展设置DJANGO_SETTINGS_MODULE并在IPython启动时运行django.setup()。 该扩展的代码是: 在最近升级到Jupyter Notebook的情况下,此设置对我而言已无效。通过在笔记本的第一个单元格中添加类似的代码,我可
每次当我想启动ipython笔记本时,我必须在Windows命令行或中键入“Jupyter notebook”。可以设置别名吗?我尝试在中这样做: 那么如何设置别名并将其保存在中呢?在Windows上启动还有什么更好的主意吗?
问题内容: 我有一个网站,该网站根据访问者选择的位置显示不同的内容。例如:用户输入55812作为邮政编码。我知道哪个城市和地区纬度/经度。也就是给他们有关该领域的内容。我的问题是如何将其存储在Cookie中,以便他们返回时不需要总是输入邮政编码? 我看到如下: 根据其区域设置持久性cookie。 当他们返回已读取的cookie时,获取邮政编码。 根据Cookie中的邮政编码返回内容。 我似乎找不到
问题内容: 我有一个问题,Jupyter在bashrc文件中看不到env变量,有没有办法在jupyter中加载这些变量或向其中添加自定义变量? 问题答案: 要在jupyter笔记本中设置env变量,只需使用魔术命令或,例如或。(单独使用以打印当前的环境变量。) 请参阅:http : //ipython.readthedocs.io/en/stable/interactive/magics.html
问题内容: 是否可以对Windows 7上的默认设置进行永久更改?我想更改字体大小和外壳大小。 问题答案: QtConsole可通过ConsoleWidget进行配置。从…开始:
问题内容: 在我的django项目的文件中,我有这行: 但是我想让我的应用在UTC + 2时区运行,所以我将其更改为 它给出了错误。正确的做法是什么? 谢谢! 问题答案: 以下是有效时区的列表: http://en.wikipedia.org/wiki/List_of_tz_database_time_zones 您可以使用 适用于UTC + 02:00