2010-01-17 4 views
3

J'essaie d'utiliser pydiction pour compléter automatiquement les instructions Python/Django dans l'éditeur VIM.Comment ajouter des modules django au dictionnaire pydiction?

Lorsque je tente d'ajouter des modules django pour compléter-dic en utilisant ceci:

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

ou:

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

Je reçois cette erreur:

Impossible d'importer: (. ..). L'importation par nom de fichier n'est pas prise en charge.

Merci!

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

Répondre

1

En regardant les pydiction docs (je ne suis pas un utilisateur de pydiction) il semble que vous vous détournez le script pydiction.py.

Vous n'êtes pas censé fournir un nom de fichier pour l'importation. Vous êtes censé fournir un nom de module sur lequel baser la création du dictionnaire. Le module doit déjà être dans votre chemin python.

Ainsi, avec django dans votre PYTHONPATH, vous feriez:

python pydiction.py django

+0

regardez une publication pls =) – holms

0

Pour une raison faisant

python pydiction.py django 

n'ajouter les sous-modules de django

Ce que j'avais faire était:

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

Et puis je devais ajouter chaque sous-module de django individuellement

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

Et ainsi de suite. Tedious mais ça marche

6

Cela fait un certain temps que cette question a été soulevée. J'ai fait face à un problème similaire. Les étapes suivantes expliquent comment le faire assez rapidement.

Puisque pydiction.py n'analyse pas les paquets récursivement, j'ai dû utiliser find et vi pour construire une liste de paquets pour Django. Supposons que vous avez installé django dans /usr/local/lib/python2.6/dist-packages/django. faire ensuite les éléments suivants:

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

django_pkgs.sh Open in vim et supprimer toutes les lignes contenant les médias, statique, modèles, gis, luminaires, essais, locale, etc. localflavor vim, C'est facile. Effectuez les opérations suivantes de la console elle-même vim:

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

Une fois que tous les fichiers indésirables sont supprimés de notre liste, remplacer tous/avec. Procédez comme suit depuis la console vim:

:%s!/!.!g 

Ceci convertira le chemin du fichier en noms de module Python complet. Remplacez ensuite toutes les nouvelles lignes par des espaces blancs.Effectuez les opérations suivantes à partir de la console vim:

%s/\n//

Notez qu'il existe un seul caractère d'espace blanc entre les deux dernières barres obliques. Vous avez maintenant tous les noms de modules sur une seule ligne. Maintenant, ajoutez #!/Bin/bash dans la première ligne du fichier. De cette façon, nous convertissons notre fichier en un script bash. Maintenant, ajoutez ce qui suit sur deuxième et troisième lignes (comme cela est expliqué par Oivvio dans l'un des postes précédents):

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

S'il vous plaît remplacer chemin mentionné dans la dernière ligne avec le répertoire dans lequel votre settings.py django est maintenue.

Puis au début de la ligne la liste des modules django, ajoutez ce qui suit

python ./pydiction.py 

Cette ligne devrait maintenant ressembler à

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

quitter maintenant vim et exécuter

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

Ensuite, passez au répertoire où complete-dict et pydiction.py sont conservés et exécutez /var/tmp/django_pkgs.sh . Vous avez besoin d'un accès en écriture au fichier complete-dict. Si le fichier de votre liste de packages est correct, tout fonctionnera correctement. Sinon, vous verrez diverses erreurs sur la console causées par l'importation de modules django non existants. Pour les corriger, identifiez ces entrées dans votre fichier django_pkgs.sh et supprimez-les manuellement. Ensuite, exécutez le même script.

J'aurais préféré pydiction.py faire une recherche récursive de modules plutôt que chacun préparant la liste de modules manuellement. Probablement un argument de ligne de commande comme -r aurait pu être ajouté à pydiction pour le faire automatiquement. :(

+0

lad merci beaucoup !!! tu m'as sauvé la vie! – holms

+0

ok je me suis retrouvé avec un fichier 10gb, qui a été scanné en VIm pendant 5 heures ... = / – holms

Questions connexes