2013-05-21 41 views
2

我已经在StackOverflow上看到过其他人发布的帖子(主要针对Django 1.4),但没有一个为我提供了成功的解决方案。Django 1.5,Apache,wsgi.py - ImportError:无法导入设置

我无法使用Apache正确设置Django 1.5.1。我收到以下错误:

“导入错误:无法导入设置‘foobar.settings’(它是不是在sys.path中):无模块名为foobar.settings”

使用新鲜的Xubuntu 13.04的安装在virtualbox上。

这里是我的安装脚本

$ 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/ 

更新:其实这可能是路径条目进行:

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

这里添加路径刚刚通过WSGI这个路径暴露给Python解释器,而不是额外的好处.py脚本。

+0

谢谢乔J!我按照你的建议创建了.pth文件。起初,我添加了更新中包含的路径(这是包含settings.py和wsgi.py的目录),但没有奏效。接下来我尝试了一个目录(包含manage.py的目录)并且它工作正常! – pymarco

+0

对不起,这是一个全新的错误。事实证明,.pth文件是不需要的。我的错误是在我的wsgi.py文件中设置sys.path错误。最初,我将路径设置为包含settings.py的目录。正确的设置是将路径设置为项目目录(包含manage.py的目录)。这是我添加到.pth文件的相同路径,但现在只能在wsgi.py中使用。 – pymarco

相关问题