如何将Django模块添加到Pydiction字典中?

3

我正在尝试使用pydiction在VIM编辑器中自动完成Python/Django语句。

当我尝试使用以下命令将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

这个问题已经提出了一段时间。我也遇到了类似的问题。下面的步骤解释了如何快速完成。

由于pydiction.py不能递归地解析包,我不得不使用find和vi来构建Django的包列表。假设你已经在/usr/local/lib/python2.6/dist-packages/django中安装了django,请执行以下操作:

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

打开vim中的django_pkgs.sh文件,并删除所有包含media、static、templates、gis、fixtures、tests、locale、localflavor等内容的行。在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中来自动完成这个功能。:(


好的,最后我的文件变成了10GB,用Vim扫描了5个小时... =/ - holms

1

通过浏览pydiction文档(我不是pydiction用户),似乎您正在错误使用pydiction.py脚本。

您不应该提供要导入的文件名。您应该提供一个模块名称来创建字典。该模块必须已经在您的pythonpath中。

因此,如果django在您的pythonpath中,则可以执行以下操作:

python pydiction.py django


0

由于某些原因正在执行

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

等等。虽然繁琐但它能工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接