2012-02-11 9 views
10

Cuando hago ./manage.py process_email en mi aplicación, obtengo ImportError: No module named commands.process_email.Los comandos django no pueden encontrar el módulo de comando

Mi diseño del directorio es:

./ 
├── __init__.py 
├── admin.py 
├── forms.py 
├── management 
│ ├── __init__.py 
│ └── commands 
│  ├── __init.py__ 
│  └── process_email.py 
├── models.py 
├── views.py 

La fuente del comando process_email es:

from django.core.management.base import BaseCommand, CommandError 
from django.conf import settings 
from website.event.models import Event 

class Command(BaseCommand): 

    def handle(self, *args, **options): 
     process_email() 

def process_email(): 
    print "processing email" 

y el error que estoy recibiendo:

(website.com)[email protected] ~/code/website.com/website $ > ./manage.py process_email 
Traceback (most recent call last): 
    File "./manage.py", line 14, in <module> 
    execute_manager(settings) 
    File "/Users/kings/code/website.com/lib/python2.6/site-packages/django/core/management/__init__.py", line 438, in execute_manager 
    utility.execute() 
    File "/Users/kings/code/website.com/lib/python2.6/site-packages/django/core/management/__init__.py", line 379, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/Users/kings/code/website.com/lib/python2.6/site-packages/django/core/management/__init__.py", line 261, in fetch_command 
    klass = load_command_class(app_name, subcommand) 
    File "/Users/kings/code/website.com/lib/python2.6/site-packages/django/core/management/__init__.py", line 67, in load_command_class 
    module = import_module('%s.management.commands.%s' % (app_name, name)) 
    File "/Users/kings/code/website.com/lib/python2.6/site-packages/django/utils/importlib.py", line 35, in import_module 
    __import__(name) 
ImportError: No module named commands.process_email 

cuando lo haga ./manage.py , muestra process_email en los "Comandos disponibles:". Esto me dice que manager.py está viendo process_email.py. También init .py está vacío (no creo que importe pero solo para su información).

+1

hola, bienvenido a SO. Solo un puntero: no se preocupe por usar pastebin, puede colocar el diseño de su código/directorio aquí (de hecho, nos ayuda si lo hace). –

+0

Como advertencia, Django está utilizando imp.find_module que no respeta los huevos comprimidos: http://stackoverflow.com/questions/28962344/imp-find-file-module-which-supports-zipped-eggs – benjaoming

Respuesta

18

¿El nombre correcto es __init.py__? No estoy seguro de si se trata de un error tipográfico en su árbol, o realmente nombrado así.

Python trata los directorios que contienen __init__.py como módulos; sin embargo, si ese archivo no existe, no procesará ese directorio, por lo que no procesará __init.py__ o ese "módulo". Está perfectamente bien que el archivo esté en blanco; sin embargo, si no lo está, también puede importar desde allí (django hace esto mucho) y también puede definir qué se exporta desde el módulo.

+0

Gracias. Sí, había mal nombre el archivo. Aprecio sus sugerencias con SO, y pondré el código en su lugar en el futuro ... Personalmente me resulta molesto cuando hay mucho código en la pregunta, y la esencia de la pregunta está perdida :) – Trewq

+1

@Trewq no hay problema - Intento mantener el código en el lugar donde creo que está el error. Luego, repito el problema al pie de la pregunta para mayor claridad, para que no se pierda después de todo ese código. –

Cuestiones relacionadas