Как добавить модули Django в словарь pydiction? - PullRequest
3 голосов
/ 17 января 2010

Я пытаюсь использовать pydiction для автозаполнения операторов Python / Django в VIM Editor.

Когда я пытаюсь добавить модули django в complete-dic, используйте это:

python pydiction.py /usr/lib/pymodules/python2.6/django

или

python pydiction.py /usr/lib/pymodules/python2.6/django/__init__.py

Я получаю эту ошибку:

Не удалось импортировать: (...). Импорт по имени файла не поддерживается.

Спасибо!

Pydiction: http://www.vim.org/scripts/script.php?script_id=850

Ответы [ 3 ]

6 голосов
/ 09 июля 2011

Прошло довольно много времени с тех пор, как этот вопрос был поднят. Я столкнулся с подобной проблемой. Следующие шаги объясняют, как сделать это несколько быстрее.

Поскольку pydiction.py не анализирует пакеты рекурсивно, мне пришлось использовать find и vi для создания списка пакетов для Django. Предположим, вы установили django в /usr/local/lib/python2.6/dist-packages/django. Затем выполните следующее:

cd /usr/local/lib/python2.6/dist-packages
find django -type d > /var/tmp/django_pkgs.sh

Откройте django_pkgs.sh в vim и удалите все строки, содержащие медиа, статические элементы, шаблоны, gis, fixtures, тесты, локаль, локальный вкус и т. Д. В vim это легко. Выполните следующие действия с самой консоли vim:

:g/media/d
:g/static/d
:g/templates/d
....
....
....

Как только все ненужные файлы будут удалены из нашего списка, замените все / на. В консоли vim выполните следующие действия:

:%s!/!.!g

Это преобразует путь к файлу в полные имена модулей Python. Затем замените все символы новой строки пробелами. В консоли vim выполните следующие действия:

%s/\n/ /

Обратите внимание, что между двумя последними косыми чертами есть один символ пробела. Теперь все имена модулей перечислены в одной строке. Теперь добавьте #! / Bin / bash в первой строке файла. Таким образом, мы конвертируем наш файл в скрипт bash. Теперь добавьте следующее во второй и третьей строках (как объяснил oivvio в одном из предыдущих постов):

export DJANGO_SETTINGS_MODULE=settings
export PYTHONPATH=/path/to/parent/of/settings

Пожалуйста, замените путь, указанный в последней строке, на каталог, где хранится ваш django settings.py.

Затем в начале строки со списком модулей django добавьте следующее

python ./pydiction.py

Эта строка должна выглядеть как

python ./pydiction.py django django.contrib django.contrib.redirects ......

Теперь выйдите из vim и запустите

chmod +x /var/tmp/django_pkgs.sh.

Затем перейдите в каталог, где хранятся complete-dict и pydiction.py, и выполните /var/tmp/django_pkgs.sh. Вам нужен доступ для записи в файл complete-dict. Если ваш файл списка пакетов правильный, все будет работать нормально. В противном случае вы увидите различные ошибки на консоли, вызванные импортом несуществующих модулей django. Чтобы исправить их, определите такие записи в файле django_pkgs.sh и удалите их вручную. Затем снова выполните тот же сценарий.

Я бы предпочел pydiction.py делать рекурсивный поиск модулей, а не всем, кто готовит список модулей вручную. Вероятно, аргумент командной строки, такой как -r, мог бы быть добавлен в pydiction, чтобы сделать это автоматически. (

1 голос
/ 19 января 2010

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

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

Итак, с django в вашем pythonpath, вы должны сделать:

python pydiction.py django

0 голосов
/ 30 апреля 2010

Почему-то делает

python pydiction.py django

не добавит подмодули django

Что мне нужно было сделать:

export DJANGO_SETTINGS_MODULE=settings
export PYTHONPATH=/path/to/parent/of/settings

А потом мне пришлось добавить каждый подмодуль django отдельно

python pydiction.py django.bin
python pydiction.py django.conf
python pydiction.py django.contrib

И так далее. Утомительно, но работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...