2012-02-11 39 views
10

Khi tôi làm ./manage.py process_email trong ứng dụng của mình, tôi nhận được ImportError: No module named commands.process_email.lệnh django không thể tìm thấy mô-đun lệnh

bố trí thư mục của tôi là:

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

Nguồn lệnh process_email là:

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" 

và lỗi tôi nhận được:

(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 

khi tôi làm ./manage.py , nó hiển thị process_email trong "Các tiểu ban có sẵn:". Điều này cho tôi biết rằng process_email.py được xem bởi manage.py. Ngoài ra init .py trống (Tôi không nghĩ rằng nó quan trọng nhưng chỉ là FYI).

+1

xin chào, chào mừng bạn đến với SO. Chỉ cần một con trỏ - đừng lo lắng về việc sử dụng pastebin, bạn được chào đón để đặt mã/thư mục bố trí của bạn ở đây (trên thực tế nó giúp chúng tôi nếu bạn làm). –

+0

Như một cảnh báo, Django đang sử dụng imp.find_module mà không tôn trọng trứng nén: http://stackoverflow.com/questions/28962344/imp-find-module-which-supports-zipped-eggs – benjaoming

Trả lời

18

Có phải __init.py__ được đặt tên chính xác không? Tôi không chắc đó có phải là lỗi đánh máy trong cây của bạn hay không, hay được đặt tên như thế.

Python xử lý các thư mục chứa __init__.py làm mô-đun - tuy nhiên, nếu tệp đó không tồn tại, nó sẽ không xử lý thư mục đó - vì vậy nó sẽ không xử lý __init.py__ hoặc "mô-đun" đó. Nó là hoàn toàn ok cho rằng tập tin được để trống - tuy nhiên, nếu nó không phải là bạn có thể nhập khẩu từ nó quá (django hiện điều này rất nhiều) và bạn có thể xác định những gì được xuất khẩu từ các mô-đun quá.

+0

Cảm ơn bạn. Có, tôi đã đặt tên cho tệp sai. Tôi đánh giá cao con trỏ của bạn với SO, và sẽ đặt mã tại chỗ trong tương lai .. Cá nhân tôi thấy khó chịu khi có nhiều mã trong câu hỏi, và bản chất của câu hỏi bị mất :) – Trewq

+1

@Trewq không sao - Tôi cố gắng để giữ mã xuống đến nơi tôi nghĩ rằng lỗi là - Tôi sau đó restate vấn đề ở dưới cùng của câu hỏi cho rõ ràng để nó không bị mất sau khi tất cả các mã! –

Các vấn đề liên quan