【问题标题】:No module named views error in Django. Is it due to Apache, wsgi.py or other?Django 中没有名为视图的模块错误。是因为 Apache、wsgi.py 还是其他原因?
【发布时间】:2014-02-19 04:14:32
【问题描述】:

我有一个在本地主机上运行良好的 Django 应用程序。但是当我在服务器上尝试它时,它给了我以下错误(如 DEBUG 输出所示):

No module named views

Request Method:     GET
Request URL:    url_to_site/accounts/login
Django Version:     1.6.1
Exception Type:     ImportError
Exception Value:    

No module named views

Exception Location:     /opt/dev/site/smsmessages/views.py in <module>, line 1
Python Executable:  /usr/bin/python
Python Version:     2.6.6
Python Path:    

['/opt/dev/myfolder/project/app',
 '/opt/dev/myfolder/project',
 '/usr/lib64/python26.zip',
 '/usr/lib64/python2.6',
 '/usr/lib64/python2.6/plat-linux2',
 '/usr/lib64/python2.6/lib-tk',
 '/usr/lib64/python2.6/lib-old',
 '/usr/lib64/python2.6/lib-dynload',
 '/usr/lib64/python2.6/site-packages',
 '/usr/lib64/python2.6/site-packages/gtk-2.0',
 '/usr/lib/python2.6/site-packages']

他的部分堆栈跟踪如下:

/opt/dev/myfolder/project/app/urls.py in <module>
    url(r'^messages/', include('smsmessages.urls', namespace='smsmessages', app_name='smsmessages')),

[some more stack trace output here...]

/opt/dev/myfolder/project/smsmessages/urls.py in <module>
    from smsmessages.views import MessageCreateView, MessageListView, MessageUpdateView, MessageDeleteView

[...]

/opt/dev/myfolder/project/smsmessages/views.py in <module>
    from braces.views import LoginRequiredMixin 

我在这个应用程序中使用Django-braces。但让我感到困惑的是,当我运行该应用程序时没有任何故障:

$ python manage.py runserver

在同一台服务器上并且:

$ curl mysite
<site's content is returned here without a glitch>

当我这样做时,导入 braces.views 似乎也有效:

$ python manage.py shell
    (InteractiveConsole)
    >>> from braces.views import *
    >>> print "no problem here"

只有当我回到 Apache 作为服务器时,我才会遇到上述错误(即使是 curl)。

这让我想知道是不是 wsgi.py 或/和 Apache ('2.2.15 (Red Hat)') 配置导致了问题。 DEBUG 消息返回的有关 wsgi 和 Apache 的部分元信息如下。

mod_wsgi.listener_port  '80'
mod_wsgi.listener_host  ''
SERVER_SOFTWARE     'Apache/2.2.15 (Red Hat)'
SCRIPT_NAME       u''
mod_ssl.var_lookup  ''
mod_wsgi.handler_script     ''
SERVER_SIGNATURE    '<address>Apache/2.2.15 (Red Hat) Server at site.com Port 80</address>\n'
REQUEST_METHOD  'GET'
PATH_INFO   u'/accounts/login'
SERVER_PROTOCOL     'HTTP/1.1'
mod_wsgi.request_handler    'wsgi-script'
wsgi.url_scheme     'http'
PATH_TRANSLATED     '/opt/dev/myfolder/project/app/wsgi.py/accounts/login'
wsgi.multiprocess   True
mod_wsgi.input_chunked  '0'
DOCUMENT_ROOT   '/var/www/html'
mod_wsgi.process_group  ''
SCRIPT_FILENAME     '/opt/dev/myfolder/project/app/wsgi.py'

wsgi.py的内容是:

import os, sys
sys.path.append('/usr/lib64/python2.6/site-packages/')

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "app.settings")

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

Apache 配置如下:

WSGIPythonPath /opt/dev/myfolder/project/

<Directory /opt/dev/myfolder/project/app>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>

<VirtualHost *:80>
Alias /static/ /opt/dev/myfolder/app/static/
ServerAdmin email@email.com
ServerName site.com
ErrorLog logs/site.com-error_log
CustomLog logs/site.com-access_log common
WSGIScriptAlias / /opt/dev/myfolder/project/app/wsgi.py

我做错了什么或遗漏了什么?有没有人看到这个错误?我已经探索了我能做的所有事情(包括 StackOverflow 上关于 No module named views 的那些,但如果有人在 Django、Apache、wsgi 和可能的 Django-braces 方面有经验,我会非常感激能告诉我这里可能出了什么问题。非常感谢很多。

【问题讨论】:

  • /opt/dev/site/smsmessages/views.py in ,第 1 行,似乎有错误,所以请出示您的 views.py。
  • 嗨@Jingo,这是一个很大的文件,但我已经把它贴在这里了pastebin.com/GHeZcSKf如果你看到任何错误请告诉我。谢谢。
  • 你有没有想过这个问题?我很好奇问题是什么……
  • 嗨@JoshuaPokotilow,是的,经过一周的互联网探索并从经验丰富的系统管理员那里获得帮助后,我发现问题的原因是 SELinux 的访问控制。当我执行“setenforce 0”时,它会起作用。这使我重新配置了对我在应用程序中安装的 python 和 django 库的访问。再次感谢您的帮助。 :)

标签: django apache django-wsgi


【解决方案1】:

我对 django-braces 没有任何经验,但我假设这是循环依赖的问题。我已经看到 mod_wsgi / Apache 而不是 Django 开发服务器出现的循环依赖问题,因为 Django 导入的模块可能不同(以不同的顺序),具体取决于您的站点的配置或部署方式。

例如,这听起来与Baffled: Django "could not import app.views" but can import app, in WSGI? 非常相似。

【讨论】:

  • 谢谢,@Joshua。听起来很像。如果取得进展,我将给出 StackOverflow 问题中提到的这个博客并发布更新。其他可能正在阅读本文的人,请继续对此发表您的想法。我想超越这个问题,以便继续测试应用程序的其余部分。再次感谢您。
  • Np。通常使用循环导入,您可以观察回溯以查看导入失败的模块是否在堆栈中被进一步引用。也就是说,我遇到过一些情况,因为动态导入了有问题的模块,所以情况并不那么明显。
猜你喜欢
  • 1970-01-01
  • 2023-03-27
  • 2011-06-14
  • 2014-02-24
  • 2014-05-16
  • 2020-10-31
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
相关资源
最近更新 更多