Ошибка: не удалось импортировать настройки «mysite.settings» после настройки virtualenv для Django - PullRequest
5 голосов
/ 30 декабря 2011

Я делаю это на Fedora

Проблема:

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

Настройка virtualenv

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

Установить Django

pip install -E sandbox django

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

Под / home / yeukhon / pythonenv / sandbox

bin   include  lib  mysite

Под lib

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

Создать проект в порядке

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

Не удается запустить сервер

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

Python Shell под песочницей (следуя этому руководству: Как устранить неполадки - ImportError: Не удалось импортировать настройки «mysite.settings» при развертывании django? )

(sandbox)[root@localhost 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'

Что мне нужно сделать, чтобы исправить эту проблему? Спасибо за ваше время.


EDIT

Спасибо за ответ.

Я попробовал следующее:

(sandbox)[root@localhost mysite]# export PYTHONPATH="/home/yeukhon/pythonenv/sandbox/"
(sandbox)[root@localhost mysite]# export PYTHONPATH="/home/yeukhon/pythonenv/"
(sandbox)[root@localhost mysite]# deactivate
[root@localhost mysite]# source ../bin/activate
(sandbox)[root@localhost 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'.....]

Теперь он на пути к питону. Но я все еще не могу запустить сервер.

Централизованный проект Джанго

Да. Это хорошее предложение. Поэтому я предполагаю, что все, что мне нужно сделать, это «создать каталог с именем mydjango, а затем создать проекты в mydjango». Но какие команды нужно изменить / добавить? Я готов учиться хорошей практике.

Большое спасибо.


Решение (Добавить в переменную среды)

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

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

Ответы [ 2 ]

5 голосов
/ 30 декабря 2011

Последняя строка говорит вам все, что вам нужно знать.Чтобы импортировать mysite.settings, родительский каталог mysite должен быть на вашей PYTHONPATH.В настоящее время это не так.

FWIW, на самом деле не типично хранить ваш проект в в каталоге virtualenv.Обычно вы помещаете все свои проекты в каталог, который помещаете в свою PYTHONPATH.Тогда просто загрузите все, что вам нужно в virtualenv, и все хорошо.На самом деле, лучшая часть virtualenv заключается в том, что они взаимозаменяемы;то есть вы можете легко запустить один и тот же проект в нескольких разных средах virtualenv (например, для тестирования нового выпуска Django без изменения вашего обычного virtualenv), но опять же, вы хотите, чтобы ваши проекты находились в одном централизованном месте, а не внутри определенного каталога virtualenv..

3 голосов
/ 30 декабря 2011

Не используйте django-admin.py для runserver или действительно для чего-либо, кроме startproject.Вместо этого используйте manage.py runserver.Это устанавливает все соответствующие пути для вас, и тогда он должен просто работать.

...