2012-02-11 156 views
10

当我在我的应用中做./manage.py process_email时,我得到了ImportError: No module named commands.process_emaildjango命令找不到命令模块

我的目录布局是:

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

的process_email命令的来源是:

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]cBook ~/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它在“可用子命令:”中显示process_email。这告诉我process_email.py被manage.py看到。另外init .py是空的(我认为它不重要,但只是供参考)。

+1

你好,欢迎来到SO。只需一个指针 - 不用担心使用pastebin,欢迎您将代码/目录布局放在这里(实际上它可以帮助我们,如果你这样做的话)。 – 2012-02-11 19:45:26

+0

作为一个警告,Django使用imp.find_module不尊重压缩的鸡蛋:http://stackoverflow.com/questions/28962344/imp-find-module-which-supports-zipped-eggs – benjaoming 2015-04-06 14:12:15

回答

18

__init.py__命名是否正确?我不确定这是你树中的一个错字,还是实际上是这样命名的。

Python将包含__init__.py的目录作为模块处理 - 但是,如果该文件不存在,则不会处理该目录 - 因此它不会处理__init.py__或“模块”。这个文件完全可以是空白的 - 但是,如果它不是你可以从它导入(django这么做很多),你也可以定义从模块中导出的内容。

+0

谢谢。是的,我误导了这个文件。我赞赏你的SO指针,并将把代码放在未来的位置..我个人觉得很烦人,当问题中有很多代码时,问题的本质就是失败:) – Trewq 2012-02-11 22:09:36

+1

@Trewq没问题 - 我试着将代码放在我认为错误的地方 - 然后我会在问题的底部重新说明问题,以便在代码完成后不会丢失! – 2012-02-11 22:20:11