Как запустить оболочку django с ipython в режиме qtconsole?

Когда я запускаю оболочку 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)

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

Ответы

Ответ 1

Я создал оболочку script со следующим:

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

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

И я создал python script 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)

Запуск моей оболочки script получает мне ipton qtconsole с преимуществами оболочки django.

Ответ 2

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

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

Поэтому достаточно установить эту переменную среды, а затем запустить ipython qtconsole. Вы можете сделать простой script, чтобы сделать это для вас автоматически.

Ответ 3

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

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

Ответ 4

Так как версия 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/

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

ipython qtconsole --profile=mydjangoproject

или

ipython notebook --profile=mydjangoproject

Ответ 5

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

python manage.py shell_plus --ipython

Ответ 6

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

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

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

Ответ 7

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

создайте файл qtshell.py в файле yourapp/management/commands с помощью

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