【问题标题】:Django + mod_wsgi + apache: ImportError at / No module named djproj.urlsDjango + mod_wsgi + apache:ImportError at / No module named djproj.urls
【发布时间】:2011-08-16 00:56:56
【问题描述】:

我正在尝试使用 apache 和 mod_wsgi 在我的 linode 服务器上部署我的 Django 应用程序。

file: /srv/www/example.com/djproj/django.wsgi

import os
import sys

sys.path.append('/srv/www/example.com/djproj')

os.environ['PYTHON_EGG_CACHE'] = '/srv/www/example.com/.python-egg'
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

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

file: /etc/apache2/sites-available/example.com

/etc/apache2/sites-available/example.com
ServerAdmin admin@example.com
ServerName example.com
ServerAlias www.example.com

DocumentRoot /srv/www/example.com/public_html

WSGIScriptAlias / /srv/www/example.com/djproj/django.wsgi

<Directory "/srv/www/example.com/djproj">
   Order allow,deny
   Allow from all
</Directory>

ErrorLog /srv/www/example.com/logs/error.log 
CustomLog /srv/www/example.com/logs/access.log combined

当我访问我的网站时,我收到此错误

Environment:


Request Method: GET
Request URL: http://example.com/

Django Version: 1.3
Python Version: 2.6.6
Installed Applications:
['django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.staticfiles']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware')


Traceback:
File "/usr/local/lib/python2.6/dist-packages/Django-1.3-    py2.6.egg/django/core/handlers/base.py" in get_response
  101.                             request.path_info)
File "/usr/local/lib/python2.6/dist-packages/Django-1.3-py    2.6.egg/django/core/urlresolvers.py" in resolve
  250.             for pattern in self.url_patterns:
File "/usr/local/lib/python2.6/dist-packages/Django-1.3-py2.6.egg/django/core/urlresolvers.py" in _get_url_patterns
  279.         patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "/usr/local/lib/python2.6/dist-packages/Django-1.3-py2.6.egg/django/core/urlresolvers.py" in _get_urlconf_module
  274.             self._urlconf_module = import_module(self.urlconf_name)
File "/usr/local/lib/python2.6/dist-packages/Django-1.3-py2.6.egg/django/utils/importlib.py" in import_module
  35.     __import__(name)

Exception Type: ImportError at /
Exception Value: No module named djproj.urls

我无法让它工作。想法?

【问题讨论】:

    标签: python django importerror django-wsgi


    【解决方案1】:

    我第二个 Ignacio Vazquez-Abrams 的 answer。您必须将项目目录的路径以及其父目录的路径添加到sys.path。这是我使用的 WSGI 脚本文件的示例。我将文件保存在项目目录中。

    import os
    import sys
    
    sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "../../")))
    sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "../")))
    
    os.environ["DJANGO_SETTINGS_MODULE"] = "PROJECT_NAME.settings"
    
    from django.core.handlers.wsgi import WSGIHandler
    application = WSGIHandler()
    

    【讨论】:

    • 在尝试将../../../ 插入(或附加)到路径时获取Caught VariableDoesNotExist while rendering: Failed lookup for key [0] in u'[]'
    • 哇,你是我的英雄,已经和这个战斗了 3 个小时了,没想到把东西移到路径列表的前面。我希望我能投票更多!
    • 你救了我的命!该死!我花了两天时间寻找这个解决方案。谢谢大佬!
    • 非常感谢。在过去的 4-5 个小时里,我一直在碰壁!!
    【解决方案2】:

    要么更改所有模块/包条目和导入以排除项目名称,要么将/srv/www/site.com 也放入sys.path

    【讨论】:

    • 这也是我的问题。但是为什么文档中没有提到这个!!!!!!!!!!我以为你只需要指定 DJANGO_SETTINGS_MODULE,然后 django 会处理剩下的事情。
    • 请注意,路径实际上应该是“/srv/www/site.com”,因为这与提问者在他们的问题中提出的内容相匹配
    【解决方案3】:

    第二个ayaz的回答。您指定的路径必须位于搜索路径的开头,这一点很重要,这意味着您需要使用 insert..

    这是我的。当我进行“追加”时,我遇到了间歇性问题。这使它坚如磐石。希望这会有所帮助。

    sys.path.insert(0, '/srv/www/Appname')
    sys.path.insert(1, '/srv/www')
    

    【讨论】:

    • 这可能刚刚挽救了我的生命和数小时的故障排除。
    【解决方案4】:

    尝试按照本教程进行操作 - http://singlas.in/5-step-tutorial-for-using-django-with-apache-and-mod_wsgi/

    确保将 Django 目录和 Django 项目目录都添加到系统路径中。你的 wsgi.py 应该是这样的

    import os,sys
    
    #comments
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django_project.settings")
    sys.path.append('/path/to/your/django/directory/django_project')
    sys.path.append('/path/to/your/django/directory')
    
    #comments
    from django.core.wsgi import get_wsgi_application
    application = get_wsgi_application()
    

    【讨论】:

      【解决方案5】:

      是什么为我纠正了这个错误--

      更改 settings.py 来自:

      ROOT_URLCONF = 'url'

      到这里:

      ROOT_URLCONF = 'myproject.urls'

      【讨论】:

      • 这也是我的一根刺。这就是原因。我必须搜索(egrep)我的整个网站以找出它试图从哪里获取 urls 文件。
      【解决方案6】:

      你有djproj.urls 的地方也许可以试试urls

      【讨论】:

        猜你喜欢
        • 2017-03-03
        • 1970-01-01
        • 1970-01-01
        • 2012-08-12
        • 1970-01-01
        • 1970-01-01
        • 2011-04-04
        • 2015-06-08
        • 2023-02-02
        相关资源
        最近更新 更多