2012-02-11 5 views
10

내 앱에서 ./manage.py process_email을 실행하면 ImportError: No module named commands.process_email이됩니다.django 명령이 명령 모듈을 찾을 수 없습니다.

내 디렉토리 레이아웃은 다음과 같습니다 process_email 명령의 소스는

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

입니다

:

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" 

및 오류 내가 갖는 :

(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 

내가 ./manage.py을 수행 할 때 , "Available 부속 명령 :"에 process_email이 표시됩니다. 이것은 process_email.py가 manage.py에 의해 보여진다. 또한 .py는 비어 있습니다. (중요하지 않지만 단지 FYI라고 생각합니다.)

+1

안녕하십니까, 안녕하세요. 그냥 포인터입니다 - pastebin 사용에 대해서는 걱정하지 마십시오. 코드/디렉토리 레이아웃을 여기에 넣으 실 수 있습니다 (실제로 그렇게하면 도움이됩니다). –

+0

Django는 지퍼 달걀을 존중하지 않는 imp.find_module을 사용하고 있습니다. http://stackoverflow.com/questions/28962344/imp-find-module-which-supports-zipped-eggs – benjaoming

답변

18

올바르게 명명 된 __init.py__입니까? 나는 그것이 당신의 나무에 오타가 있는지, 실제로 그런 이름을 지 었는지는 확실치 않습니다.

파이썬은 __init__.py을 포함하는 디렉토리를 모듈로 취급합니다. 그러나 해당 파일이 존재하지 않으면 해당 디렉토리를 처리하지 않으므로 __init.py__ 또는 "모듈"을 처리하지 않습니다. 그 파일이 공백 인 것은 완벽하게 OK입니다. 그러나, 그렇지 않다면 (django는 이것을 많이 수행합니다.) 모듈에서 가져올 내용을 정의 할 수 있습니다.

+0

감사합니다. 예, 파일의 이름을 잘못 지정했습니다. 나는 당신의 포인터에 감사 드리며 미래에 코드를 놓을 것입니다 .. 질문에 많은 코드가있을 때 개인적으로 성가신 것을 발견하고 질문의 본질을 잃어 버렸습니다 :) – Trewq

+1

@Trewq 문제 없음 - 나는 오류가 있다고 생각하는 곳으로 코드를 유지하려고 노력한다. - 그 다음에는 명확성을 위해 질문의 맨 아래에있는 문제를 다시 말해서 모든 코드가 끝난 후에 잃어 버리지 않도록하라! –

관련 문제