2012-01-08 49 views
2

我已經閱讀了大量有關wsgi沒有看到Django settings.py文件問題的帖子,最好的結論是我的Django項目不是在我的PYTHONPATH。使用wsgi和virtualenv時出現django錯誤:無法導入設置

複雜的事情是,我在系統級運行Django的舊版本,但是這個項目需要在virtualenv中運行。

我已經成立了位於/ usr /本地/ pythonenv /選舉的virtualenv,我的項目位於位於/ usr /本地/ pythonenv /選/ src目錄的/ dev /選

我.wsgi文件是一個在/ usr /本地/ pythonenv /選/ src目錄的/ dev /選/配置/

我可以用$蟒蛇manage.py runserver命令

運行Django的服務器,但使用Apache和mod_wsgi的時候,我得到的錯誤:

ImportError: Could not import settings 'election.settings' (Is it on sys.path? Does it have syntax errors?): No module named election.settings 

這是我的.wsgi文件:

import os 
import sys 
import site 

sys.stdout = sys.stderr 

HERE = env_root = os.path.abspath(os.path.dirname(__file__)) 
found = False 
while env_root != '/': 
    env_root = os.path.abspath(os.path.dirname(env_root)) 
    if os.path.exists(os.path.join(env_root, 'bin', 'activate')): 
     found = True 
     break 
assert found, "didn't find a virtualenv in any parent of %s" % HERE 

sitepackages_root = os.path.join(env_root, 'lib') 
assert os.path.exists(sitepackages_root), "no such dir %s" % sitepackages_root 
for d in os.listdir(sitepackages_root): 
    if d.startswith('python'): 
     site.addsitedir(os.path.join(sitepackages_root, d, 'site-packages')) 
     break 
else: 
    raise RuntimeError("Could not find any site-packages to add in %r" % env_root) 

os.environ['DJANGO_SETTINGS_MODULE'] = 'election.settings' 
os.environ['PYTHON_EGG_CACHE'] = '/tmp/election-python-eggs' 

import django.core.handlers.wsgi 
application = django.core.handlers.wsgi.WSGIHandler() 

這裏的回溯:

[Sat Jan 07 21:54:19 2012] [error] [client 192.168.150.122] File "/usr/lib/pymodules/python2.6/django/core/handlers/base.py", line 33, in load_middleware 
[Sat Jan 07 21:54:19 2012] [error] [client 192.168.150.122]  for middleware_path in settings.MIDDLEWARE_CLASSES: 
[Sat Jan 07 21:54:19 2012] [error] [client 192.168.150.122] File "/usr/lib/pymodules/python2.6/django/utils/functional.py", line 269, in __getattr__ 
[Sat Jan 07 21:54:19 2012] [error] [client 192.168.150.122]  self._setup() 
[Sat Jan 07 21:54:19 2012] [error] [client 192.168.150.122] File "/usr/lib/pymodules/python2.6/django/conf/__init__.py", line 40, in _setup 
[Sat Jan 07 21:54:19 2012] [error] [client 192.168.150.122]  self._wrapped = Settings(settings_module) 
[Sat Jan 07 21:54:19 2012] [error] [client 192.168.150.122] File "/usr/lib/pymodules/python2.6/django/conf/__init__.py", line 75, in __init__ 
[Sat Jan 07 21:54:19 2012] [error] [client 192.168.150.122]  raise ImportError, "Could not import settings '%s' (Is it on sys.path? Does it have syntax errors?): %s" % (self.SETTINGS_MODULE, e) 
[Sat Jan 07 21:54:19 2012] [error] [client 192.168.150.122] ImportError: Could not import settings 'election.settings' (Is it on sys.path? Does it have syntax errors?): No module named election.settings 

回答

3

你在哪裏添加 '在/ usr /本地/ pythonenv /選/ src目錄的/ dev' 到sys.path的?

您還使WSGI文件的其餘部分比需要的更加複雜。

確保你去觀察:

http://code.google.com/p/modwsgi/wiki/WhereToGetHelp?tm=6#Conference_Presentations

還可以閱讀:

http://code.google.com/p/modwsgi/wiki/VirtualEnvironments

,並使用activate_this方法,如演示文稿中提到激活虛擬環境。

+0

當我將項目目錄添加到sys.path時,我開始收到錯誤信息,提示它沒有看到正確版本的Django。錯誤地配置:導入中間件時出錯django.middleware.csrf:「沒有名爲csrf的模塊」 – wmfox3 2012-01-08 13:50:25

+0

在將靈活的WSGI文件改爲Graham更簡化的方法之後,將項目目錄添加到我的sys.path並調用activate_this方法後,好好工作。謝謝。 – wmfox3 2012-01-08 14:43:22

相關問題