как запустить Django shell с ipython в режиме qtconsole?

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

Арек

изменить: поэтому я пробую то, что Эндрю Уилкинсон предложил в своем ответе - расширение моего приложения django с помощью команды, основанной на оригинальной команде django shell. Насколько я понимаю код, который запускает 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.путь, если он начинается с другого места), а затем выполните следующее:

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

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

7 ответов


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

/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)

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


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

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

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


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

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


начиная с версии 1.4 Django, использование 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 пункт для обработки ImportErrors. Затем вы можете запустить IPython с заданным профилем следующим образом:

ipython qtconsole --profile=mydjangoproject

или

ipython notebook --profile=mydjangoproject

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

python manage.py shell_plus --ipython

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

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

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


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

создать файл qtshell.py в yourapp/управление / команды с:

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