2011-12-29 10 views
5

Robię to na FedorzeBłąd: Nie można zaimportować ustawienia 'mysite.settings' po skonfigurowaniu virtualenv dla Django

Problem:

(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 

Konfiguracja virtualenv

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

Zainstaluj Django

pip install -E sandbox django 

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

Under/home/yeukhon/pythonenv/piaskownicy

bin include lib mysite 

Pod lib

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

Tworzenie projektu jest w porządku

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

nie można uruchomić serwer

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

Python Shell pod piaskownicy (zgodnie z tym przewodnikiem: 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' 

Co muszę zrobić, aby rozwiązać ten problem? Dziękuję za Twój czas.


EDIT

Dzięki za odpowiedzi.

Próbowałem następujące:

(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'.....] 

Jest teraz na ścieżce Pythona. Ale nadal nie mogę uruchomić serwera.

Scentralizowane Django projektu

Tak. To dobra sugestia. Więc przypuszczam, że wszystko, co muszę zrobić, to "stworzyć katalog o nazwie mydjango, a następnie tworzyć projekty w mydjango". Ale jakie polecenia należy zmienić/dodać? Jestem gotów uczyć się dobrych praktyk.

Dziękuję bardzo.


Solution (Dodaj do zmiennej środowiskowej)

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

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

Odpowiedz

5

Ostatni wiersz powie Ci wszystko, co trzeba wiedzieć. Aby zaimportować mysite.settings, katalog nadrzędny mysite musi znajdować się na PYTHONPATH. Obecnie nie jest.

FWIW, to nie jest typowe, aby faktycznie przechowywać swój projekt w katalogu virtualenv. Zwykle umieszczasz wszystkie swoje projekty w katalogu, który umieszczasz na swojej PYTHONPATH. Następnie wystarczy załadować wszystko, czego potrzebujesz virtualenv, i wszystko jest w porządku. W rzeczywistości najlepszą częścią virtualenv jest to, że są wymienne; to znaczy, że możesz łatwo uruchomić ten sam projekt w wielu różnych środowiskach virtualenv (na przykład do testowania nowej wersji Django bez zmiany normalnego virtualenv), ale znowu chcesz, żeby twoje projekty były w jednym scentralizowanym miejscu zamiast w konkretnym katalogu virtualenv .

+0

Pratt. Dziękuję Ci bardzo za Twój czas. Właśnie dodałem ścieżkę do sys.path. Zobacz moją edycję. Może dodałem nieprawidłowo? Brak szczęścia. Ale dziękuję. – CppLearner

+1

Nie można po prostu dodać go do 'sys.path'. To stworzyło środowisko uruchomieniowe. Musi znajdować się w zmiennej środowiskowej 'PYTHONPATH'. –

+0

Masz rację. Musiałem PYTHONPATH = $ PYTHONPATH:/home/yeukhon/pythonenv/sandbox /. Dzięki. – CppLearner

3

Nie używaj kodu django-admin.py dla serwera runserver, ani też dla niczego innego niż startproject. Zamiast tego użyj manage.py runserver. To ustawia wszystkie odpowiednie ścieżki dla ciebie i powinno wtedy działać.

+0

(sandbox) [root @ localhost mysite] # manage.py runserver bash: manage.py: command not found ... To jest problem, który również eksperymentuję. – CppLearner

+0

Zrobiłem to, co Chris Pratt. Teraz oba polecenia działają (z pytonem na początku) – CppLearner

+0

+1 nawet nie zauważył, że używał django-admin.py zamiast manage.py. –

Powiązane problemy