当前位置: 首页 > 知识库问答 >
问题:

如何为Django设置Jupyter/IPython Notebook?

法兴德
2023-03-14

我一直在使用本文中描述的方法来设置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()

共有3个答案

李招
2023-03-14

这就是对我有用的东西

  1. 按照其他答案安装Django扩展(我使用的是1.9.6)

而且,重要的是,不起作用的是从笔记本环境内部更改目录。如果我尝试使用任何不在管理目录中的笔记本。py shell_plus--notebook已在中运行,则内核配置不正确。对我来说,让笔记本一次只配置一个目录就足够了。如果您需要一个更健壮的解决方案,您应该能够在启动jupyter之前设置PYTHONPATH。例如,将export PYTHONPATH=“$PYTHONPATH:/path/to/django/project”添加到virtualenv激活脚本。但我还没试过这个。

  1. 为8888端口的容器添加端口映射

例如,在docker撰写文件中;

ports:
      -  "8890:8888"

这就是我所做的:

NOTEBOOK_ARGUMENTS = [
    '--ip', '0.0.0.0', 
    '--allow-root',
    '--no-browser', 
]
郭华美
2023-03-14

为了完整起见(但现在是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项目中创建运行的笔记本,并能够运行存储在文件系统中任何位置的笔记本,我们需要:

  1. 确保第一个“argv”参数包含虚拟环境中包含的python解释器的完整路径
   "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”功能的扩展(可选但有用:-)

羊冠玉
2023-03-14

>

  • 安装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