2011-12-29 68 views
5

tôi đang làm điều này trên FedoraLỗi: Không thể nhập các thiết lập 'mysite.settings' sau khi thiết lập virtualenv cho Django

Vấn đề:

(sandbox)[[email protected] mysite]# django-admin.py runserver 
Error: Could not import settings 'mysite.settings' (Is it on sys.path?): No module named mysite.settings 

Cài đặt virtualenv

mkdir pythonenv   # that's the /home/yeukhon/pythonenv/*.* 
cd pythonenv 
virtualenv --no-site-packages --distribute sandbox 

Cài đặt Django

pip install -E sandbox django 

# changing mode of /home/yeukhon/pythonenv/sandbox/bin/django-admin.py to 755 
# Successfully installed django 

Dưới/home/yeukhon/pythonenv/sandbox

bin include lib mysite 

Dưới lib

You have /lib/python2.7/site-packages/django/*.* 

Tạo dự án là tốt

(sandbox)[[email protected] sandbox]# django-admin.py startproject mysite 
# the path is now /home/yeukhon/pythonenv/sandbox/mysite/*.* 

có thể không chạy máy chủ

django-admin.py runserver 
Error: Could not import settings 'mysite.settings' (Is it on sys.path?): No module named mysite.settings 

Python Shell dưới sandbox (theo hướng dẫn này: How to troubleshoot - ImportError: Could not import settings 'mysite.settings' when deploying django?)

(sandbox)[[email protected] mysite]# python 
Python 2.7.2 (default, Oct 27 2011, 01:36:46) 
[GCC 4.6.1 20111003 (Red Hat 4.6.1-10)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import django 
>>> import os 
>>> os.environ['DJANGO_SETTINGS_MODULE'] 
'mysite.settings' 

>>> os.path.exists('/home') 
True 
>>> os.path.exists('/home/yeukhon/pythonenv/sandbox/mysite') 
True 
>>> os.path.exists('/home/yeukhon/pythonenv/sandbox/mysite/settings.py') 
True 
>>> from django.core.management import setup_environ 
>>> import mysite.settings 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: No module named mysite.settings 

>>> setup_environ(mysite.settings) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'mysite' is not defined 


>>> print sys.path 
['', 
/home/yeukhon/pythonenv/sandbox/lib/python2.7/site-packages/distribute-0.6.14-py2.7.egg', 
'/home/yeukhon/pythonenv/sandbox/lib/python2.7/site-packages/pip-0.8.1-py2.7.egg', 
'/home/yeukhon/pythonenv/sandbox/lib/python27.zip', 
'/home/yeukhon/pythonenv/sandbox/lib/python2.7', 
'/home/yeukhon/pythonenv/sandbox/lib/python2.7/plat-linux2', 
'/home/yeukhon/pythonenv/sandbox/lib/python2.7/lib-tk', 
'/home/yeukhon/pythonenv/sandbox/lib/python2.7/lib-old', 
'/home/yeukhon/pythonenv/sandbox/lib/python2.7/lib-dynload', 
'/usr/lib/python2.7', 
'/usr/lib/python2.7/plat-linux2', 
'/home/yeukhon/pythonenv/sandbox/lib/python2.7/site-packages' 

gì tôi cần phải làm gì để sửa chữa vấn đề này? Cảm ơn bạn đã dành thời gian.


EDIT

Cảm ơn đã phản ứng.

tôi thử như sau:

(sandbox)[[email protected] mysite]# export PYTHONPATH="/home/yeukhon/pythonenv/sandbox/" 
(sandbox)[[email protected] mysite]# export PYTHONPATH="/home/yeukhon/pythonenv/" 
(sandbox)[[email protected] mysite]# deactivate 
[[email protected] mysite]# source ../bin/activate 
(sandbox)[[email protected] mysite]# django-admin.py runserver 
Error: Could not import settings 'mysite.settings' (Is it on sys.path?): No module named mysite.settings 

>>> sys.path 
['',.... '/home/yeukhon/pythonenv'.....] 

Nó bây giờ đang trên con đường python. Nhưng tôi vẫn không thể chạy máy chủ.

trung Django Dự án

Yes. Đó là một gợi ý tốt. Vì vậy, tôi cho rằng tất cả những gì tôi cần làm là "tạo một thư mục có tên mydjango, sau đó tạo các dự án trong mydjango". Nhưng lệnh nào cần phải được thay đổi/thêm vào? Tôi sẵn sàng học tập tốt.

Cảm ơn bạn rất nhiều.


Solution (Thêm vào biến môi trường)

PYTHONPATH=$PYTHONPATH:path-to-your-directory 

# PYTHONPATH=$PYTHONPATH:/home/yeukhon/pythonenv/sandbox/ 

Trả lời

5

Dòng cuối cùng cho bạn biết tất cả các bạn cần phải biết. Để nhập mysite.settings, thư mục mẹ của mysite phải nằm trên PYTHONPATH của bạn. Nó hiện không phải là.

FWIW, nó không phải là điển hình để lưu trữ dự án của bạn trong thư mục virtualenv. Thông thường, bạn đặt tất cả các dự án của bạn vào thư mục mà bạn đặt trên PYTHONPATH của bạn. Sau đó, chỉ cần tải lên bất kỳ virtualenv bạn cần, và tất cả đều tốt. Trong thực tế, phần tốt nhất của virtualenv là chúng có thể hoán đổi cho nhau; Ví dụ, bạn có thể dễ dàng chạy cùng một dự án trong nhiều môi trường ảo khác nhau (như thử nghiệm bản phát hành mới của Django mà không thay đổi virtualenv bình thường của bạn), nhưng có một lần nữa, bạn muốn dự án của bạn ở một nơi tập trung thay vì bên trong một thư mục virtualenv cụ thể .

+0

Pratt. Cảm ơn vi đa danh thơi gian cho tôi. Tôi vừa thêm đường dẫn vào sys.path. Xem chỉnh sửa của tôi. Có lẽ tôi đã thêm không chính xác? Không may mắn. Cảm ơn bạn mặc dù. – CppLearner

+1

Bạn không thể chỉ thêm nó vào 'sys.path'. Đó là tạo ra một thời gian chạy. Nó cần phải nằm trong biến môi trường 'PYTHONPATH' của bạn. –

+0

Bạn nói đúng. Tôi đã phải PYTHONPATH = $ PYTHONPATH:/home/yeukhon/pythonenv/sandbox /. Cảm ơn. – CppLearner

3

Không sử dụng django-admin.py cho máy chủ lưu trữ hoặc thực sự cho bất kỳ điều gì khác ngoài startproject. Sử dụng manage.py runserver để thay thế. Điều đó thiết lập tất cả các đường dẫn có liên quan cho bạn và sau đó nó sẽ hoạt động.

+0

(hộp cát) [root @ localhost mysite] # manage.py runserver bash: manage.py: command not found ... Đó là vấn đề mà tôi cũng đang thử nghiệm. – CppLearner

+0

Tôi đã làm những gì Chris Pratt. Bây giờ cả hai lệnh đang làm việc (với python ở phía trước của khóa học) – CppLearner

+0

+1 thậm chí không nhận thấy rằng ông đã sử dụng django-admin.py thay vì manage.py. –

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