как запустить оболочку django с ipython в режиме qtconsole? - PullRequest
16 голосов
/ 23 ноября 2011

Когда я запускаю оболочку Django, набираю python manage.py shell оболочка ipython запущена. Можно ли заставить Django запускать ipython в режиме qtconsole ? (т.е. заставить его работать ipython qtconsole)

Arek

редактирование: поэтому я пробую то, что предложил Эндрю Уилкинсон в своем ответе - расширение моего приложения django с помощью команды, основанной на оригинальной команде оболочки django. Насколько я понимаю, код, который запускает ipython в оригинальной версии, таков:

from django.core.management.base import NoArgsCommand

class Command(NoArgsCommand):
    requires_model_validation = False

    def handle_noargs(self, **options):
        from IPython.frontend.terminal.embed import TerminalInteractiveShell
        shell = TerminalInteractiveShell()
        shell.mainloop()

любой совет, как изменить этот код для запуска ipython в режиме qtconsole?

второе редактирование: То, что я нашел и работает до сих пор, - запустите 'ipython qtconsole' из того места, где находится файл settings.py моего проекта (или установите sys.path, если он начинается с другого места), а затем выполните это:

import settings
import django.core.management
django.core.management.setup_environ(settings)

и теперь я могу импортировать свои модели, перечислить все экземпляры и т. Д.

Ответы [ 8 ]

7 голосов
/ 23 ноября 2011

Документы здесь говорят:

Если вы не хотите использовать manage.py, нет проблем.Просто установите переменную окружения DJANGO_SETTINGS_MODULE равной mysite.settings и запустите python из того же каталога, где находится manage.py (или убедитесь, что каталог находится по пути Python, чтобы импорт mysite работал).этого должно быть достаточно, чтобы установить эту переменную окружения и затем запустить ipython qtconsole.Вы можете сделать простой скрипт, который сделает это автоматически.

4 голосов
/ 25 марта 2012

Я создал сценарий оболочки со следующим:

/path/to/ipython
qtconsole --pylab inline -c "run /path/to/my/site/shell.py"

Вам нужна только часть --pylab inline, если вам нужны классные встроенные графики matplotlib.

И я создал скрипт Python shell.py в /path/to/my/site с:

import os
working_dir = os.path.dirname(__file__)
os.chdir(working_dir)
import settings
import django.core.management
django.core.management.setup_environ(settings)

Запуск сценария оболочки дает мне qpyconsole ipython с преимуществами оболочки django.

2 голосов
/ 23 ноября 2011

Вы можете проверить код запуска оболочки здесь . Вы увидите, что не нужно настраивать, какая оболочка запускается.

Что вы можете сделать, это скопировать этот файл, переименовать его в shell_qt.py и поместить в каталог управления / команд вашего собственного проекта. Измените его для запуска консоли QT, и тогда вы сможете запустить manage.py shell_qt.

1 голос
/ 10 января 2013

Начиная с версии Django 1.4, использование django.core.management.setup_environ() не рекомендуется. Решение, которое работает как для ноутбука IPython, так и для QTconsole, заключается в следующем (просто выполните это из каталога проекта Django):

In [1]: from django.conf import settings

In [2]: from mydjangoproject.settings import DATABASES as MYDATABASES

In [3]: settings.configure(DATABASES=MYDATABASES)

Обновление: Если вы работаете с Django 1.7, вам дополнительно необходимо выполнить следующее:

In [4]: import django; django.setup()

Используя django.conf.settings.configure(), вы задаете настройки базы данных вашего проекта, а затем можете получить доступ ко всем своим моделям обычным способом.

Если вы хотите автоматизировать этот импорт, вы можете, например, создайте профиль IPython, запустив:

ipython profile create mydjangoproject

Каждый профиль содержит каталог с именем startup. Вы можете поместить туда произвольные скрипты Python, и они будут выполнены сразу после запуска IPython. В этом примере вы найдете его под

~/.ipython/profile_<mydjangoproject>/startup/

Просто поместите туда скрипт, который содержит код, показанный выше, возможно, заключенный в предложение try..except для обработки ImportError s. Затем вы можете запустить IPython с указанным профилем, например так:

ipython qtconsole --profile=mydjangoproject

или

ipython notebook --profile=mydjangoproject
0 голосов
/ 30 октября 2018

Несколько недокументированная особенность shell_plus - это возможность запускать ее в «режиме только ядра».Это позволяет нам подключаться к нему из другой оболочки, например, из одной запущенной qtconsole.

Например, в одной оболочке выполните:

django-admin shell_plus --kernel
# or == ./manage.py shell_plus --kernel

Это выведет что-то вроде:

# Shell Plus imports ...
...

To connect another client to this kernel, use:
   --existing kernel-23600.json

Затем в другой оболочке запустите:

ipython qtconsole --existing kernel-23600.json

Теперь откроется QtConsole.Еще один совет: вместо запуска другой оболочки вы также можете нажать Ctrl + Z и запустить bg, чтобы сообщить текущему процессу о запуске в фоновом режиме.

0 голосов
/ 09 октября 2014

Вы можете создать команду, которая расширяет команду базовой оболочки и импортирует IPythonQtConsoleApp следующим образом:

создайте файл qtshell.py в командах yourapp / management / с:

from django.core.management.commands import shell

class Command(shell.Command):
    def _ipython(self):
        """Start IPython Qt console"""
        from IPython.qt.console.qtconsoleapp import IPythonQtConsoleApp
        app = IPythonQtConsoleApp.instance()
        app.initialize(argv=[])
        app.start()

тогда просто используйте python manage.py qtshell

0 голосов
/ 05 октября 2013

Я также хотел открыть оболочку Django в qtconsole.Загляните в manage.py, решите проблему для меня: Запустите IPython qtconsole, перейдите в базовый каталог проекта и запустите:

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")

Не забудьте изменить myproject на имя вашего проекта.

0 голосов
/ 02 июля 2012

Вы можете установить расширения django , а затем запустить

python manage.py shell_plus --ipython
...