我正在尝试使用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
答案 0 :(得分: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并删除包含媒体,静态,模板,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中以自动执行此操作。 :(
答案 1 :(得分:1)
通过浏览pydiction文档(我不是一个pydiction用户),你似乎在滥用pydiction.py
脚本。
您不应该提供导入文件名。您应该提供基于字典创建的模块名称。该模块必须已经在您的pythonpath中。
所以,在你的pythonpath中使用django,你会这样做:
python pydiction.py django
答案 2 :(得分: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
等等。乏味但有效