Команды django не могут найти командный модуль - PullRequest
12 голосов
/ 11 февраля 2012

Когда я делаю ./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 в «Доступных подкомандах:». Это говорит мне, что process_email.py виден manage.py. Также init .py пуст (я не думаю, что это важно, но только к вашему сведению).

1 Ответ

21 голосов
/ 11 февраля 2012

Правильно ли назван __init.py__? Я не уверен, что это опечатка в вашем дереве или на самом деле так называется.

Python обрабатывает каталоги, содержащие __init__.py, как модули - однако, если этот файл не существует, он не будет обрабатывать этот каталог - поэтому он не будет обрабатывать __init.py__ или этот «модуль». Вполне допустимо, чтобы этот файл был пустым - однако, если это не так, вы можете импортировать из него тоже (django делает это много), и вы также можете определить, что экспортируется из модуля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...