django命令找不到命令模块

时间:2012-02-11 19:38:20

标签: python django django-command-extensions

当我在我的应用中./manage.py process_email时,我得到ImportError: No module named commands.process_email

我的目录布局是:

./
├── __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)kings@bob-kings-MacBook ~/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。这告诉我manage.py看到process_email.py。另外 init .py是空的(我认为这不重要,只是FYI)。

1 个答案:

答案 0 :(得分:21)

__init.py__名称是否正确?我不确定你的树上是否有拼写错误,或者实际上是这样命名的。

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