2012-01-11 18 views
26

Tôi đang gặp sự cố khi thiết lập DJANGO_SETTINGS_MODULE cho dự án Django của tôi.Làm cách nào tôi có thể đặt đúng DJANGO_SETTINGS_MODULE cho dự án Django của tôi (Tôi đang sử dụng virtualenv)?

Tôi có một thư mục tại ~/dev/django-project. Trong thư mục này tôi có một môi trường ảo mà tôi đã thiết lập với virtualenv, và cũng là một dự án django được gọi là "hoa" với một ứng dụng bên trong nó được gọi là "onora". Chạy tree -L 3 từ ~/dev/django-project/ chỉ cho tôi như sau:

. 
├── Procfile 
├── blossom 
│   ├── __init__.py 
│   ├── __init__.pyc 
│   ├── fixtures 
│   │   └── initial_data_test.yaml 
│   ├── manage.py 
│   ├── onora 
│   │   ├── __init__.py 
│   │   ├── __init__.pyc 
│   │   ├── admin.py 
│   │   ├── admin.pyc 
│   │   ├── models.py 
│   │   ├── models.pyc 
│   │   ├── tests.py 
│   │   └── views.py 
│   ├── settings.py 
│   ├── settings.pyc 
│   ├── sqlite3-database 
│   ├── urls.py 
│   └── urls.pyc 
├── blossom-sqlite3-db2 
├── requirements.txt 
└── virtual_environment 
    ├── bin 
    │   ├── activate 
    │   ├── activate.csh 
    │   ├── activate.fish 
    │   ├── activate_this.py 
    │   ├── django-admin.py 
    │   ├── easy_install 
    │   ├── easy_install-2.7 
    │   ├── gunicorn 
    │   ├── gunicorn_django 
    │   ├── gunicorn_paster 
    │   ├── pip 
    │   ├── pip-2.7 
    │   ├── python 
    │   └── python2.7 -> python 
    ├── include 
    │   └── python2.7 -> /System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 
    └── lib 
     └── python2.7 

tôi đang cố gắng để đổ dữ liệu của tôi từ cơ sở dữ liệu với lệnh

django-admin.py dumpdata 

Tiếp cận của tôi là chạy cd ~/dev/django-project và sau đó chạy source virtual_environment/bin/activate và sau đó chạy django-admin.py dumpdata

Tuy nhiên, tôi gặp phải lỗi sau:

ImportError: Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined. 

tôi đã làm một số googling và thấy trang này: https://docs.djangoproject.com/en/dev/topics/settings/#designating-the-settings

đó nói với tôi rằng

When you use Django, you have to tell it which settings you're using. Do this by using an environment variable, DJANGO_SETTINGS_MODULE. The value of DJANGO_SETTINGS_MODULE should be in Python path syntax, e.g. mysite.settings. Note that the settings module should be on the Python import search path.

Sau một gợi ý tại Setting DJANGO_SETTINGS_MODULE under virtualenv? tôi nối các đường

export DJANGO_SETTINGS_MODULE="blossom.settings" 
echo $DJANGO_SETTINGS_MODULE 

để virtual_environment/bin/kích hoạt. Bây giờ, khi tôi chạy lệnh kích hoạt để kích hoạt các môi trường ảo, tôi nhận được đầu ra đọc:

DJANGO_SETTINGS_MODULE set to blossom.settings 

này có vẻ tốt với tôi, nhưng bây giờ vấn đề là tôi có chạy

django-admin.py dumpdata 

trả về lỗi sau:

ImportError: Could not import settings 'blossom.settings' (Is it on sys.path?): No module named blossom.settings 

Tôi đang làm gì sai? Làm thế nào tôi có thể kiểm tra sys.path? Công việc này dự định làm như thế nào nhỉ?

Cảm ơn.

Trả lời

40

Không chạy django-admin.py cho bất kỳ điều gì khác ngoài việc tạo dự án ban đầu. Đối với tất cả mọi thứ sau đó, sử dụng manage.py, trong đó sẽ chăm sóc của việc tìm kiếm các thiết lập.

+1

Cảm ơn - 'python blossom/manage.py dumpdata' đã hoạt động như mong đợi. – Deonomo

+0

Đúng. Sau đó, tại sao tài liệu django đang nói "Sử dụng chính xác một trong hai cấu hình() hoặc DJANGO_SETTINGS_MODULE. Không phải cả hai, và ** không phải là **." ? https://docs.djangoproject.com/en/dev/topics/settings/ – lajarre

+7

Tư duy hiện tại - như được nêu trong trang web ["DeployDjango"] (http://www.deploydjango.com/django_project_structure/index.html) và gần đây * [Hai Scoops of Django] (http://django.2scoops.org/) * book - là 'django-admin.py' với các thiết lập riêng biệt có chức năng hoàn toàn tốt, và thực sự thích hợp hơn khi sử dụng' quản lý. py'. – supervacuo

15

Tôi vừa gặp phải lỗi tương tự và cuối cùng đã cố gắng tìm ra những gì đang diễn ra (manh mối lớn là (Is it on sys.path?) trong số ImportError).

Bạn cần thêm thư mục dự án của bạn để PYTHONPATH - đây là những gì các tài liệu có nghĩa là bởi

Note that the settings module should be on the Python import search path.

Để làm như vậy, chạy

$ export PYTHONPATH=$PYTHONPATH:$PWD 

từ thư mục ~/dev/django-project trước khi bạn chạy django-admin.py.

Bạn có thể thêm lệnh này (thay thế $PWD với đường dẫn thực tế để dự án của bạn, ví dụ: ~/dev/django-project) để source kịch bản của virtualenv của bạn. Nếu bạn chọn tiến tới virtualenvwrapper tại một số thời điểm (được thiết kế cho loại tình huống này), bạn có thể thêm dòng export PY... vào tập lệnh móc được tạo tự động postactivate.

mkdjangovirtualenv tự động hóa việc này thêm nữa, thêm mục nhập phù hợp vào đường dẫn Python cho bạn, nhưng tôi chưa tự mình thử nghiệm nó.

+0

Bẩn. Nhưng làm việc và hữu ích. Bạn đang khuyến khích vượt qua các vấn đề. Nếu một cái gì đó không phải là trên sys.path, điều này có nghĩa là nó cần phải được đóng gói và cài đặt, không bị hack vào sys.path. Tôi biết, tôi đang giải quyết một vấn đề, tạo thêm hai vấn đề nữa. – bartekbrak

+0

Thú vị: làm thế nào để bạn nghĩ rằng một dự án Django đang phát triển nên được thêm vào 'sys.path', nếu không phải bởi tùy chọn' --pythonpath' của 'manage.py',' django-admin.py', hoặc 'PYTHONPATH' env var (không ai trong số đó có vẻ" bẩn "hơn những người khác ..) – supervacuo

+1

Gói nó (tạo setup.py) và cài đặt thông qua pip inestall [-e]. Có một cái nhìn dài hơn explenation: https://gist.github.com/bartekbrak/42d59fd43a9af14a0cc5 – bartekbrak

10

Trên máy unix-like bạn chỉ có thể bí danh virtualenv như thế này và sử dụng bí danh thay vì gõ mọi:

.bashrc

alias cool='source /path_to_ve/bin/activate; export DJANGO_SETTINGS_MODULE=django_settings_folder.settings; cd path_to_django_project; export PYTHONPATH=$PYTHONPATH:$PWD'

+3

này thực sự giải quyết vấn đề của tôi so với các câu trả lời khác. cảm ơn! –

0

Tôi biết có những câu trả lời rất nhiều, nhưng điều này làm việc cho tôi chỉ để ghi lại.

  1. Điều hướng đến thư mục .virtual_env của bạn nơi tất cả các môi trường ảo.
  2. Chuyển đến thư mục môi trường cụ thể để dự án của bạn
  3. Nối "DJANGO_SETTINGS_MODULE xuất khẩu = .settings hoặc 'DJANGO_SETTINGS_MODULE xuất khẩu = .settings.local' nếu bạn đang sử dụng một tập tin cài đặt riêng biệt được lưu trữ trong một thiết lập thư mục
0

thay thế ưa thích của tôi là đi qua các thiết lập file như tham số thời gian chạy để manage.py trong một cú pháp gói python, ví dụ:

python manage.py runserver --settings folder.filename 

biết thêm django docs