2013-05-21 5 views
2

Я видел, как другие сообщения размещались на этом в StackOverflow (в основном для Django 1.4), но ни одно из них не обеспечило мне успешного решения.Django 1.5, Apache, wsgi.py - ImportError: не удалось импортировать настройки

Я не могу правильно установить Django 1.5.1 с помощью Apache. Я получаю следующее сообщение об ошибке:

«ImportError: Не удалось импортировать настройки„foobar.settings“(является ли это на sys.path?): Нет модуль с именем foobar.settings»

Используя новую установку Xubuntu 13.04 на виртуальном боксе.

Вот моя установка скрипт

$ sudo apt-get update 
$ sudo apt-get install apache2 
$ sudo apt-get install libapache2-mod-wsgi 
$ sudo apt-get install python-setuptools 
$ sudo apt-get install build-essential nmap python-dev 

$ sudo easy_install pip 
$ sudo pip install virtualenvwrapper 

$ cd ~ 
$ vim .bashrc 

export WORKON_HOME=$HOME/.virtualenvs 
export PROJECT_HOME=$HOME/foobar.com 
source /usr/local/bin/virtualenvwrapper.sh 
# save .bashrc 

$ . .bashrc 

$ mkdir -p foobar.com/prod 
$ cd foobar.com/prod 

# start a python project with virtualenv 
$ mkvirtualenv foobar --no-site-packages 
$ workon foobar 

$ pip install django 

# this will create project root 
$ django-admin.py startproject foobar 

vim foobar/foobar/settings.py 
# add database settings to settings.py 
DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.sqlite3', 
     'NAME': '/home/banjo/foobar.com/prod/foobar/foobar/foobar.db' 
    } 
} 
# save settings.py 

$ cd /home/banjo/foobar.com/prod/foobar 
python manage.py syncdb 

# create directory for static files 
$ mkdir static 

# create directory for apache log files 
$ cd /home/banjo/foobar.com/prod 
$ mkdir logs 

$ pip freeze > requirements.txt 

# create apache .conf file for site 
$ sudo vim /etc/apache2/sites-available/foobar.conf 

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    ServerName foobar 
    ServerAlias foobar 

    Alias /static/ /home/banjo/foobar.com/prod/foobar/static/ 

    <Directory /home/banjo/foobar.com/prod/foobar/static> 
    Order allow,deny 
    Allow from all 
    </Directory> 

    LogLevel warn 
    ErrorLog /home/banjo/foobar.com/prod/logs/apache_error.log 
    CustomLog /home/banjo/foobar.com/prod/logs/apache_access.log combined 

    WSGIDaemonProcess foobar threads=15 display-name=%{GROUP} python-path=/home/banjo/foobar.com/prod/foobar/foobar:/home/banjo/.virtualenvs/foobar/lib/python2.7/site-packages 
    WSGIProcessGroup foobar 

    WSGIScriptAlias//home/banjo/foobar.com/prod/foobar/foobar/wsgi.py 
</VirtualHost> 
# save .conf file 

# add site to /etc/hosts 
$ vim /etc/hosts 
127.0.0.1 foobar 
# save hosts file 


# configure .wsgi file and the following 
$ vim /home/banjo/foobar.com/prod/foobar/foobar/wsgi.py 

import sys 

path = '/home/banjo/foobar.com/prod/foobar/foobar' 
if path not in sys.path: 
    sys.path.insert(0, '/home/banjo/foobar.com/prod/foobar/foobar') 

# save wsgi.py 

$ sudo a2ensite foobar.conf 
$ sudo service apache2 restart 

# open browser and navigate to site 
http://foobar 

Вот мое дерево каталогов

+-- foobar.com 
¦   +-- prod 
¦    +-- foobar 
¦    ¦   +-- foobar 
¦    ¦   ¦   +-- foobar.db 
¦    ¦   ¦   +-- __init__.py 
¦    ¦   ¦   +-- __init__.pyc 
¦    ¦   ¦   +-- settings.py 
¦    ¦   ¦   +-- settings.pyc 
¦    ¦   ¦   +-- urls.py 
¦    ¦   ¦   +-- wsgi.py 
¦    ¦   +-- manage.py 
¦    ¦   +-- static 
¦    +-- logs 
¦    ¦   +-- apache_access.log 
¦    ¦   +-- apache_error.log 
¦    +-- requirements.txt 

Вот полный отчет об ошибке

[Tue May 21 14:02:34 2013] [error] [client 127.0.0.1] mod_wsgi (pid=3424): Exception occurred processing WSGI script '/home/banjo/foobar.com/prod/foobar/foobar/wsgi.py'. 
[Tue May 21 14:02:34 2013] [error] [client 127.0.0.1] Traceback (most recent call last): 
[Tue May 21 14:02:34 2013] [error] [client 127.0.0.1] File "/home/banjo/.virtualenvs/foobar/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 236, in call 
[Tue May 21 14:02:34 2013] [error] [client 127.0.0.1]  self.load_middleware() 
[Tue May 21 14:02:34 2013] [error] [client 127.0.0.1] File "/home/banjo/.virtualenvs/foobar/lib/python2.7/site-packages/django/core/handlers/base.py", line 45, in load_middleware 
[Tue May 21 14:02:34 2013] [error] [client 127.0.0.1]  for middleware_path in settings.MIDDLEWARE_CLASSES: 
[Tue May 21 14:02:34 2013] [error] [client 127.0.0.1] File "/home/banjo/.virtualenvs/foobar/lib/python2.7/site-packages/django/conf/init.py", line 53, in getattr 
[Tue May 21 14:02:34 2013] [error] [client 127.0.0.1]  self._setup(name) 
[Tue May 21 14:02:34 2013] [error] [client 127.0.0.1] File "/home/banjo/.virtualenvs/foobar/lib/python2.7/site-packages/django/conf/init.py", line 48, in _setup 
[Tue May 21 14:02:34 2013] [error] [client 127.0.0.1]  self._wrapped = Settings(settings_module) 
[Tue May 21 14:02:34 2013] [error] [client 127.0.0.1] File "/home/banjo/.virtualenvs/foobar/lib/python2.7/site-packages/django/conf/init.py", line 134, in init 
[Tue May 21 14:02:34 2013] [error] [client 127.0.0.1]  raise ImportError("Could not import settings '%s' (Is it on sys.path?): %s" % (self.SETTINGS_MODULE, e)) 
[Tue May 21 14:02:34 2013] [error] [client 127.0.0.1] ImportError: Could not import settings 'foobar.settings' (Is it on sys.path?): No module named foobar.settings 

Вот результат моего SYS пути

(foobar)[email protected]:~/foobar.com$ python 
Python 2.7.4 (default, Apr 19 2013, 18:32:33) 
[GCC 4.7.3] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import sys 
>>> for path in sys.path: print path 
... 

/home/banjo/.virtualenvs/foobar/local/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg 
/home/banjo/.virtualenvs/foobar/local/lib/python2.7/site-packages/pip-1.3.1-py2.7.egg 
/home/banjo/.virtualenvs/foobar/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg 
/home/banjo/.virtualenvs/foobar/lib/python2.7/site-packages/pip-1.3.1-py2.7.egg 
/home/banjo/.virtualenvs/foobar/lib/python2.7 
/home/banjo/.virtualenvs/foobar/lib/python2.7/plat-i386-linux-gnu 
/home/banjo/.virtualenvs/foobar/lib/python2.7/lib-tk 
/home/banjo/.virtualenvs/foobar/lib/python2.7/lib-old 
/home/banjo/.virtualenvs/foobar/lib/python2.7/lib-dynload 
/usr/lib/python2.7 
/usr/lib/python2.7/plat-i386-linux-gnu 
/usr/lib/python2.7/lib-tk 
/home/banjo/.virtualenvs/foobar/local/lib/python2.7/site-packages 
/home/banjo/.virtualenvs/foobar/lib/python2.7/site-packages 
+0

вверх для всех команд установить! – sul4bh

ответ

0

Попробуйте добавить следующее к вашему пути python, сделав соответствующую замену пути.

/unix/path/above/foobar/foobar.com/prod/foobar/ 

Один из способов добавить в свой путь, чтобы создать файл с именем foobar.pth (или whatever.pth) и поместить его в следующем каталоге:

/home/banjo/.virtualenvs/foobar/lib/python2.7/site-packages 

Этот файл должен содержать символ новой строки, разделенных список путей, которые вы хотите добавить в свою виртуальную среду.

/unix/path/above/foobar/foobar.com/prod/foobar/ 

Update: на самом деле это может быть запись пути, чтобы сделать:

/unix/path/above/foobar/foobar.com/prod/foobar/foobar/ 

Добавление путь здесь имеет дополнительное преимущество, выставляя этот путь к интерпретатору Python, а не только через WSGI .py.

+0

Спасибо, Джо J! Я создал файл .pth, как вы предложили. Сначала я добавил путь, который вы включили в свое обновление (это каталог, содержащий settings.py и wsgi.py), но это не сработало. Затем я попробовал один каталог вверх (тот, который содержит manage.py), и он сработал! – pymarco

+0

Извините, это была общая ошибка newb. Оказывается, файл .pth не нужен. Моя ошибка заключалась в неправильной установке sys.path в моем файле wsgi.py. Первоначально я устанавливаю путь к каталогу, который содержит settings.py. Правильный параметр - установить путь к каталогу проекта (содержащему файл manage.py). Это тот же путь, который я добавил в файл .pth, но теперь вместо этого используется только в wsgi.py. – pymarco

Смежные вопросы