2010-11-28 12 views
8

ich einen einfachen benutzerdefinierten Befehl, hello.py geschrieben haben:Django: Kann benutzerdefinierte Befehle ausführen

from django.core.management.base import NoArgsCommand 

class Command(NoArgsCommand): 
    help = "prints hello world" 

    def handle_noargs(self, **options): 
     print "Hello, World!" 

Wenn ich Python manage.py laufen hallo es gibt

Unbekannter Befehl: ‚Hallo '

  • Ich habe es in der Verwaltung/Befehle-Verzeichnis unter meiner App.
  • Ich habe __init__.py-Dateien zum Verwaltungs- und Befehlsverzeichnis hinzugefügt.
  • ich meine App überprüft habe, ist in INSTALLED_APPS in settings.py
  • Ich habe versucht, es in verschiedenen Anwendungen und von der Projektwurzel Installation zu

Laufe Python manage.py syncdb etc ist in Ordnung. Und wenn ich Python über die Kommandozeile eintippe, kann ich django.core.management ok importieren.

Ich weiß, ich vermisse etwas offensichtlich, aber kann nicht herausfinden, was.

Wie kann ich dies debuggen, um herauszufinden, warum mein benutzerdefinierter Befehl nicht ausgeführt wird?

+1

Durch "checked meine app ist in settings.py", meinst du es ist in INSTALLED_APPS? – knutin

+0

Haben Sie mehrere Python-Versionen/Installationen auf Ihrem System? 'which python' wird dir sagen, welche Python-Version du verwendest, wenn 'python manage.py' ausgeführt wird. Wenn 'env python' ausgeführt wird, wird der Python gestartet, der './manage.py' startet. Ist es die gleiche Version? – knutin

+0

@knutin. Ja, es ist in INSTALLED_APPS. Ja mehrere Versionen und welche Python gibt Alias ​​python = 'python2.6'/usr/local/bin/python2.6 zurück. Allerdings scheint env python Python 2.4.3 zu starten und django zu importieren funktioniert nicht, wenn ich env python starte. Wenn ich jedoch python manage.py ausführe, gehe ich davon aus, dass ich den korrekten Python ausführe und es immer noch nicht funktioniert. – FunLovinCoder

Antwort

6

Das Problem war, dass ich ein anderes Projekt auf meinem PYTHONPATH hatte. Oh! Ich denke, dass es von dort zuerst die settings.py aufgenommen hat, also meine App nicht gesehen hat. Was mich in diese Richtung wies war, dass ich versucht habe, python manage.py create_jobs myapp (von django command extensions) auszuführen und es gab einen Fehler zurück, der darauf hinwies, dass die App nicht gefunden werden konnte. Auch @ Knutin erwähnt INSTALLED_APPS.

+0

Mein benutzerdefinierter Befehl begann auf mysteriöse Weise zu funktionieren, nachdem ich 'pip install command_extensions' in meinem virtualenv ausgeführt hatte. Ich habe versucht, die Debugging-Schritte für mein Problem "Unbekannter Befehl" nachzuvollziehen. Irgendwie muss der Pip-Installer oder das Befehlserweiterungsmodul selbst mein 'PYTHONPATH'- oder' DJANGO_SETTINGS_MODULE'-Problem bereinigt haben. – hobs

0

Es ist, weil die __init__.pyc nicht automatisch innerhalb "Management" und "Befehle" Ordner erstellt wird. Kopieren Sie your_app/__init__.py und your_app/__init__.pyc und fügen Sie es in den Ordner management/and commands/ein.

Verwandte Themen