четверг, 8 мая 2008 г.

Django консоль в PyDev Eclipse

Должен сразу сказать, что не смог настроить работу PyDev консоли с IPython. Без IPython всё работает ОК. Ключ --plain в составе argv не сработал. Конечно, IPython рулез, но имхо, PyCrust поудобнее будет. _Имхо_.

Итак, есть PyDev, есть его консоль. Как сделать так, чтобы она загружала shell Django со всеми модельками ? Пошаговая инструкция:

1) Забираем django-command-extensions, копируем файл

shell_plus.py
в
django/core/management/commands
2) Window->Preferences->Pydev->Interactive Console->Initial interpreter commands.
Вводим следующее одной строкой (здесь с переносами для красоты):
import os;f=open(os.path.expanduser('~')+"/"+".pyconsole_path","r");
project_path=f.readline();f.close();import sys;sys.path.append(project_path);
import settings;from django.core.management import execute_manager; execute_manager(settings,['','shell_plus'])
3) текст этой незамысловатой программки сохраняем под каким-нибудь именем в домашний каталог:
#!/usr/bin/python
import sys
import os.path

def main():
if len(sys.argv) < 2:
sys.exit(1)
f= open(os.path.expanduser('~') + "/" + ".pyconsole_path", "w")
f.write(sys.argv[1])

if __name__ == "__main__":
main()
chmod само собой, далее, в Eclipse: Run->External Tools->Open external tools dialog, прописывается какое-нибудь название для программки, путь к ней, и в Arguments пишется:
${workspace_loc}${project_path}
Что получается в результате ? Строка инициализации PyDev читает из файла ~/.pyconsole_path путь к каталогу проекта, который попадает туда после запуска программки. Добавляет этот путь с PYTHON_PATH, считывается файл settings и запускается менеджер с параметром shell_plus, в результате - шелл с загруженными моделями в Eclipse.

Т.е. пользоваться так - сначала запустить программку, которая в External Tools, потом запускать консоль. Программку нужно запускать, когда в Eclipse меняется рабочий проект.

Есть один косяк - после запуска шелла приходится один раз нажимать Enter. Это связано с тем, как интерпретатор обрабатывает код, размещённый в одну строку. Если знаете, как побороть, пишите !

4 комментария:

  1. Странно, не нашел в настройках Pydev раздел Interactive Console. Какая у вас версия Eclipse? Можете показать скриншот, где эта настройка лежит?

    ОтветитьУдалить
  2. Скриншот тут

    Версия Pydev-последняя, версия Eclipse-3.3.2

    ОтветитьУдалить
  3. ubuntu+ родные eclipse+pydev
    Тоже нету Interactive Console.
    Скрин ваш не видно.

    ОтветитьУдалить
  4. У меня не родные, скачивал отдельно. Сейчас Eclipse уже есть новее, но я не обновлялся, потому что и так работает ОК :-) Pydev последний.
    Скриншот перевыложил тут.

    ОтветитьУдалить