ImportError : wsgi와 함께 django를 사용할 때 'mofin.settings'설정을 가져올 수 없습니다.
내 프로젝트 'mofin'에 대한 설정 파일을 가져 오기 위해 wsgi를 얻을 수 없습니다.
아파치 오류 로그의 오류 목록은 다음과 같습니다.
mod_wsgi (pid=4001): Exception occurred within WSGI script '/var/www/wsgi-scripts/django.wsgi'.
Traceback (most recent call last):
File "/usr/lib/python2.5/site-packages/django/core/handlers/wsgi.py", line 228, in __call__
self.load_middleware()
File "/usr/lib/python2.5/site-packages/django/core/handlers/base.py", line 31, in load_middleware
for middleware_path in settings.MIDDLEWARE_CLASSES:
File "/usr/lib/python2.5/site-packages/django/conf/__init__.py", line 28, in __getattr__
self._import_settings()
File "/usr/lib/python2.5/site-packages/django/conf/__init__.py", line 59, in _import_settings
self._target = Settings(settings_module)
File "/usr/lib/python2.5/site-packages/django/conf/__init__.py", line 94, in __init__
raise ImportError, "Could not import settings '%s' (Is it on sys.path? Does it have syntax errors?): %s" % (self.SETTINGS_MODULE, e)
ImportError: Could not import settings 'mofin.settings' (Is it on sys.path? Does it have syntax errors?): No module named mofin.settings
"안녕하세요!" 여기에 나열된 wsgi 앱 ( http://code.google.com/p/modwsgi/wiki/QuickConfigurationGuide )이 제대로 작동합니다.
settings.py 파일은 애플리케이션과 마찬가지로 python manage.py (runserver | shell | syncdb | test store)와 함께 잘로드됩니다.
다음은 내 wsgi 파일입니다.
import os
import sys
sys.path.append('/home/django/mofin/trunk')
sys.path.append('/home/django/mofin/trunk/mofin')
print >> sys.stderr, sys.path
os.environ['DJANGO_SETTINGS_MODULE'] = 'mofin.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
오류 로그에 인쇄 된 sys.path는 다음과 같습니다.
[ '/usr/lib/python25.zip', '/usr/lib/python2.5', '/usr/lib/python2.5/plat-linux2', '/usr/lib/python2.5/lib- tk ','/usr/lib/python2.5/lib-dynload ','/usr/lib/python2.5/site-packages ','/usr/lib/python2.5/site-packages/gtk-2.0 ','/ home / django / mofin / trunk ','/ home / django / mofin / trunk / mofin ']
manage.py로 대화 형 셸을 열면 sys.path는
[ '/ home / django / mofin / trunk / mofin', '/usr/lib/python25.zip', '/usr/lib/python2.5', '/usr/lib/python2.5/plat-linux2' , '/usr/lib/python2.5/lib-tk', '/usr/lib/python2.5/lib-dynload', '/usr/lib/python2.5/site-packages', '/ usr / lib / python2.5 / site-packages / gtk-2.0 ']
내 django 설정 파일은 다음과 같습니다. # mofin 프로젝트에 대한 Django 설정.
DEBUG = True
TEMPLATE_DEBUG = DEBUG
ADMINS = (
# ('Dan xxxx', 'xxxx@yyyyyyyyyy.com'),
)
MANAGERS = ADMINS
DATABASE_ENGINE = 'mysql' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
DATABASE_NAME = 'mofin' # Or path to database file if using sqlite3.
DATABASE_USER = 'aaaaaa' # Not used with sqlite3.
DATABASE_PASSWORD = 'bbbbbb' # Not used with sqlite3.
DATABASE_HOST = '' # Set to empty string for localhost. Not used with sqlite3.
DATABASE_PORT = '' # Set to empty string for default. Not used with sqlite3.
# Local time zone for this installation. Choices can be found here:
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
# although not all choices may be available on all operating systems.
# If running in a Windows environment this must be set to the same as your
# system time zone.
TIME_ZONE = 'Europe/London'
# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'en-GB'
SITE_ID = 1
# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
USE_I18N = True
# Absolute path to the directory that holds media.
# Example: "/home/media/media.lawrence.com/"
MEDIA_ROOT = '/home/django/media/'
# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash if there is a path component (optional in other cases).
# Examples: "http://media.lawrence.com", "http://example.com/media/"
MEDIA_URL = 'http://mofin.mywebsite.co.uk/media/'
# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a
# trailing slash.
# Examples: "http://foo.com/media/", "/media/".
ADMIN_MEDIA_PREFIX = '/admin_media/'
# Make this unique, and don't share it with anybody.
SECRET_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.load_template_source',
'django.template.loaders.app_directories.load_template_source',
# 'django.template.loaders.eggs.load_template_source',
)
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
)
ROOT_URLCONF = 'mofin.urls'
TEMPLATE_DIRS = (
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
)
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.admin',
'mofin.store'
)
프로젝트와 이름이 같은 응용 프로그램 (init 파일이있는 프로젝트의 하위 디렉터리)이있는 경우에도 발생할 수 있습니다. settings.py 파일이 프로젝트 폴더에있을 수 있지만 django 시스템의 일부가 먼저 프로젝트와 동일한 이름으로 프로젝트 내부의 모듈을 찾고 거기에서 settings.py를 찾을 수없는 것 같습니다. , 잘못된 메시지와 함께 실패합니다.
-uniquename1
---settings.py
---manage.py
---application1
-----file.py
-----file2.py
---uniquename1 (problem, rename this to some other unique name)
-----file.py
-----file2.py
이 문제가있는 다른 사람을 확인하기위한 다른 방법입니다. Django 1.3 및 기타에 적용됩니다.
비슷한 권한 문제가 있었고 settings.py에 올바른 권한이 있었지만 .pyc는 그렇지 않았습니다 !!! 그러니 조심하세요.
이 문제에 대한 추가 답변을 추가하는 것뿐입니다. 나는 똑같은 문제가 있었지만 파일 권한이 아닙니다. "path / to / project"를 추가했지만 "path / to"도 추가하지 않았습니다. Linked는 답을 보여준 mod_wsgi의 Django 통합 설명 입니다.
대답을 찾았습니다 ... 파일 권한. / home / django는 700으로 설정되었습니다. 즉, django 만 내용을 볼 수 있습니다. apache는 Apache로 실행되므로 / home / django를 지나칠 수 없습니다.
나는 django를로드하기 전에 apache의 wsgi 스크립트에서해야 할 일에 대한 후행 슬래시가 필요하다고 생각합니다.
import os
import sys
sys.path.append('/home/django/mofin/trunk/')
sys.path.append('/home/django/mofin/trunk/mofin/')
print >> sys.stderr, sys.path
os.environ['DJANGO_SETTINGS_MODULE'] = 'mofin.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
나의 경우에는
import os
import sys
if os.uname()[1] == 'vivien':
sys.path.append('/home/www/sitebuilder.blacknight.ie/web/')
os.environ['DJANGO_SETTINGS_MODULE'] = 'gibo.dev_settings'
elif os.uname()[1] == 'thingy':
sys.path.append('/home/www/sitebuilder.blacknight.ie/web/')
os.environ['DJANGO_SETTINGS_MODULE'] = 'gibo.dev_settings'
else:
sys.path.append('/home/www/sitebuilder.blacknight.ie/web/')
os.environ['DJANGO_SETTINGS_MODULE'] = 'gibo.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
이 문제의 또 다른 원인은 응용 프로그램의 이름을 다른 파이썬 모듈과 동일하게 지정할 수 없다는 것입니다. 예를 들어, 나는 이미 파이썬 모듈 site
이라는 것을 거의 깨닫지 못하면서 mine이라고 불렀습니다 site
.
You can check this by starting python, and running import site
, help(site)
, and it will show you it isn't using your module. This of course gives you errors when django tries to import site.settings
which doesn't exist.
Possible problem:
you forgot the __init__.py file, which must be in your project and in all directories which you consider a python module for import.
Other thing you could try is to add the path directly into the manage.py file, like :
import sys
...
...
sys.path.insert(0, '/home/django/mofin/trunk')
I hope it helps
I had the same problem but another solution :
My project folder was named exactly as one of my application.
I had :
/home/myApp
/home/myApp/settings.py
/home/myApp/manage.py
/home/myApp/rights.py
/home/myApp/static/
/home/myApp/static/
/home/myApp/myApp/model.py
/home/myApp/myApp/admin.py
/home/myApp/myApp/views.py
This kind of tree doesn't seems to be possible easily. I changed the name of my project root folder and the problem was solved!
(I wrote up this same answer for Django deployment problem in Apache/mod_wsgi. ImportError: Could not import settings 'site.settings' in case someone only finds this question.)
This doesn't appear to be the problem in your case, but I ran smack into the same ImportError when I used the WSGIPythonPath directive (instead of the .wsgi file) to set up sys.path
. That worked fine until I switched to running WSGI in daemon mode. Once you do that, you have to use the python-path
argument to the WSGIDaemonProcess directive instead.
In my case, I had a circular import that was causing this error. From settings.py
I was importing one function in another module, and from that module I was importing a settings variable. To fix it, instead of directly importing from settings, I did this:
from django.conf import settings
Let me add and my experience for that issue. After head banging for few hours and try all from the above answers I found that few lines in settings.py file cause the problem:
from south.modelsinspector import add_introspection_rules
add_introspection_rules([], ["^dynamicsites.fields.FolderNameField"])
add_introspection_rules([], ["^dynamicsites.fields.SubdomainListField"])
After that I made copy of the settings.py, named scripts_settings.py whithout that lines, and used that file and everything is ok now.
At first look I'd say the python path is wrong but compared to interactive shell it looks ok. So maybe try this:
from django.core.management import setup_environ
from mofin import settings
setup_environ(settings)
I was going to say that you can just insert/append your project directory to your sys.path in your wsgi file but if your settings file is at
/home/django/mofin/trunk/mofin/settings.py
Then you should be good there.
Is it on sys.path? Does it have syntax errors?
That pretty much sums up what you are looking for.
Interesting that the error propagates though:
for middleware_path in settings.MIDDLEWARE_CLASSES:
but you have what appears to be the exact default.
You might want to check which python interpreter is pointed to by wsgi. Are you intending to use a virtualenv but wsgi is looking at your system install?
You can also set the user and group that wsgi is running under. I use something like:
WSGIDaemonProcess mysite.com user=skyl group=skyl processes=n threads=N python-path=/home/skyl/pinax/pinax-env2/lib/python2.6/site-packages
I had a similar problem, solved it with the following snippet in my python:
ALLDIRS = ['/var/www/MarkerDB/']
import sys
import site
# Remember original sys.path.
prev_sys_path = list(sys.path)
# Add each new site-packages directory.
for directory in ALLDIRS:
site.addsitedir(directory)
# Reorder sys.path so new directories at the front.
new_sys_path = []
for item in list(sys.path):
if item not in prev_sys_path:
new_sys_path.append(item)
sys.path.remove(item)
sys.path[:0] = new_sys_pat
Source: http://code.google.com/p/modwsgi/wiki/VirtualEnvironments#Application_Environments
I just had this error and the solution was to enable my virtual environment via myvenv/source/activate.
'code' 카테고리의 다른 글
이미지 처리의 핵심 포인트는 무엇입니까? (0) | 2020.11.24 |
---|---|
JavaScript에서 LINQ SelectMany ()와 동등한 작업을 수행하는 방법 (0) | 2020.11.24 |
자바 스크립트 캡처 브라우저 바로 가기 (ctrl + t / n / w) (0) | 2020.11.24 |
헤더 필드가있는 CSV 파일을 각 행의 속성으로 구문 분석 (0) | 2020.11.23 |
Python에서 로그 파일을 추적하려면 어떻게해야합니까? (0) | 2020.11.23 |