2012-02-11 21 views
10

komut modülünü bulamıyor Uygulamamda ./manage.py process_email yaptığımda, ImportError: No module named commands.process_email alırım.django komutları,

Benim dizin düzenidir: process_email komutunun kaynağı

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

olduğunu

:

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" 

ve hata alıyorum:

(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 

ben ./manage.py yaptığımda "Mevcut alt komutlar:" içinde process_email gösterir. Bu bana process_email.py'nin manage.py tarafından görüldüğünü söylüyor. Ayrıca init .py boş (önemli olduğunu düşünmüyorum ama sadece FYI).

+1

Merhaba, hoş geldiniz. Sadece bir işaretçi - pastebin kullanma konusunda endişelenme, kod/dizin düzenini buraya koymanızdan memnuniyet duyarız (aslında bunu yapmanıza yardımcı olur). –

+0

Bir uyarı olarak, Django, fermuarlı yumurtalara uymayan imp.find_module kullanıyor: http://stackoverflow.com/questions/28962344/imp-find-module-which-supports-zipped-eggs – benjaoming

cevap

18

__init.py__ düzgün bir şekilde adlandırılmış mı? Ağacınızdaki bir yazım hatası mı, yoksa aslında böyle adlandırılmış mı emin değilim.

Python, __init__.py modüllerini dizinler olarak ele alır - ancak, eğer bu dosya mevcut değilse, o dizini işlemez - bu nedenle __init.py__ ya da "modül" işlemez. Bu dosyanın boş kalması mükemmel bir şeydir - ancak, eğer siz de onu ithal edemiyorsanız (django bunu çok yapar) ve modülden neyin dışarı aktarılacağını tanımlayabilirsiniz.

+0

Teşekkür ederiz. Evet, dosyayı yanlış anladım. Ben SO ile işaretçiler için teşekkür ederiz ve gelecekte kodu koyacağız .. Ben soruda çok bir kod olduğunda kişisel olarak rahatsız edici bulabilirsiniz ve sorunun özü kayboldu :) – Trewq

+1

@Trewq no problem - Kodun hata olduğunu düşündüğüm yere kadar tutmaya çalışıyorum. Ardından, sorunun cevabının altındaki açıklığa kavuşmasını sağlayın, böylece tüm bu koddan sonra kaybolmaz! –