我有一个django应用程序(https://github.com/wjdp/nt-tickets),其根目录中的settings.py文件而不是nt-tickets子目录。这样可以正常工作,如在wsgi.py和manage.py中,以下行已被更改以反映更改:
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
我打算使用gunicorn进行部署并遇到问题。 Gunicorn忽略此行,并假设设置文件为nt_tickets.settings
。我这样开枪:
gunicorn wsgi:application
并收到此错误:
ImportError: Could not import settings 'nt_tickets.settings' (Is it on sys.path?): No module named nt_tickets.settings
我发现将--settings "settings"
放在命令的末尾可以解决问题,但为什么我必须这样做呢?当然,wsgi.py中设置的环境变量应该足够了吗?这可能看起来很小,我试图不重复自己。
完整追踪:
2013-07-10 01:12:12 [29417] [ERROR] Error handling request
Traceback (most recent call last):
File "/home/will/env/nt_tickets/local/lib/python2.7/site-packages/gunicorn/workers/sync.py", line 126, in handle_request
respiter = self.wsgi(environ, resp.start_response)
File "/home/will/env/nt_tickets/local/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 236, in __call__
self.load_middleware()
File "/home/will/env/nt_tickets/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 45, in load_middleware
for middleware_path in settings.MIDDLEWARE_CLASSES:
File "/home/will/env/nt_tickets/local/lib/python2.7/site-packages/django/conf/__init__.py", line 53, in __getattr__
self._setup(name)
File "/home/will/env/nt_tickets/local/lib/python2.7/site-packages/django/conf/__init__.py", line 48, in _setup
self._wrapped = Settings(settings_module)
File "/home/will/env/nt_tickets/local/lib/python2.7/site-packages/django/conf/__init__.py", line 134, in __init__
raise ImportError("Could not import settings '%s' (Is it on sys.path?): %s" % (self.SETTINGS_MODULE, e))
ImportError: Could not import settings 'nt_tickets.settings' (Is it on sys.path?): No module named nt_tickets.settings
答案 0 :(得分:4)
我有同样的问题,更糟糕的是,具有相同结构的其他项目效果很好。我发现django不会改变DJANGO_SETTINGS_MODULE路径,所以在wsgi.py中,我设置如下:os.environ ['DJANGO_SETTINGS_MODULE'] =“settings”它可以解决问题。
答案 1 :(得分:2)
在python3.4下,将__init__.py
文件放在我的设置目录中可以解决问题。
答案 2 :(得分:0)
我通过将 wsgi.py 文件移出django_project文件夹来解决问题。所以对于OP提到的情况('nt_tickets.settings')。他需要将wsgi.py文件移出 nt_tickets 文件夹,这应该可以解决问题。