Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ImportError:没有名为django.core.wsgi的模块_Python_Django_Apache_Centos_Mod Wsgi - Fatal编程技术网

Python ImportError:没有名为django.core.wsgi的模块

Python ImportError:没有名为django.core.wsgi的模块,python,django,apache,centos,mod-wsgi,Python,Django,Apache,Centos,Mod Wsgi,我正在将一个web应用程序从Windows环境移动到CentOS 5.11和Apache,在安装了所有组件之后,当我尝试加载该站点时,我将收到一个500。错误日志显示: mod_wsgi (pid=5461): Target WSGI script '/usr/local/treehouse/wsgi/index.wsgi' cannot be loaded as Python module. mod_wsgi (pid=5461): Exception occurred processing

我正在将一个web应用程序从Windows环境移动到CentOS 5.11和Apache,在安装了所有组件之后,当我尝试加载该站点时,我将收到一个
500
。错误日志显示:

mod_wsgi (pid=5461): Target WSGI script '/usr/local/treehouse/wsgi/index.wsgi' cannot be loaded as Python module.
mod_wsgi (pid=5461): Exception occurred processing WSGI script '/usr/local/treehouse/wsgi/index.wsgi'.
Traceback (most recent call last):
  File "/usr/local/treehouse/wsgi/index.wsgi", line 11, in <module>
    from django.core.wsgi import get_wsgi_application
ImportError: No module named 'django.core.wsgi'
在交互式Python解释器中,它工作得很好。下面是导致错误的脚本(您在查找这些内容的任何地方都可以看到默认的
index.wsgi
):

很明显,最后一行导致了错误,但有趣的是:最后一行仍然是问题所在,即使我在上面加上这个:

import django.core
import django.core.handlers
这两个底层软件包都可以顺利导入(
django.core.wsgi
只是对
django.core.handlers.wsgi
中某些功能的薄型包装)。只有当我尝试访问
wsgi
包时,才会出现问题。检查此脚本中的
sys.path
将显示所有正确的目录(
/usr/local/lib/python3.4/site packages
等)。同样,从交互式解释器运行完全相同的代码不会导致错误

我尝试卸载/重新安装django(
pip install django==1.6.5
),然后我将VM重置为完全干净的快照并重建/重新安装了所有内容,但仍然得到了完全相同的行为


发生了什么?

一些由
pip
下拉的django源文件以Windows行结尾保存:也就是说,它们以
\r\n
而不是
\n
结尾。在*nix系统上,这会中断受影响文件中的导入,因为它不会查找
django.core.wsgi
,而是尝试导入
django.core.wsgi\r

这就是为什么仍然可以导入
django.core.handlers
\uuuu init\uuuuu.py
文件为空,因此没有要损坏的行尾

要修复此问题,请在受影响的文件上运行
dos2unix
。我不确定有多少文件实际受到影响(除了它们中的许多文件),所以我只是用解释器中的一个快速Python脚本点击了所有文件:

import os
from os.path import abspath, join

for root, _, files in os.walk('/usr/local/lib/python3.4/site-packages/django'):
    for f in files:
        os.system('dos2unix %s' % abspath(join(root, f)))
瞧,再也没有导入错误了


故事时间 在我绝望地开始破解
django
源文件后,我偶然发现了这个问题。我通过添加以下内容编辑了django/core/_init__.py(通常为空):

from . import wsgi
我修改了
index.wsgi
以包括以下内容:

import django.core
django.core.wsgi  # no-op to see if we can access it
最后出现了一个令人着迷的新错误:

Traceback (most recent call last):
  File "/usr/local/treehouse/wsgi/index.wsgi", line 11, in <module>
    import django.core
  File "/usr/local/lib/python3.4/site-packages/django/core/__init__.py", line 1, in <module>
    from . import wsgi
  File "/usr/local/lib/python3.4/site-packages/django/core/wsgi.py", line 1, in <module>
    from django.core.handlers.wsgi import WSGIHandler
ImportError: No module named 'django.core.handlers.wsgi'
回溯(最近一次呼叫最后一次):
文件“/usr/local/treehouse/wsgi/index.wsgi”,第11行,在
导入django.core
文件“/usr/local/lib/python3.4/site packages/django/core/__init__.py”,第1行,在
从…起导入wsgi
文件“/usr/local/lib/python3.4/site packages/django/core/wsgi.py”,第1行,在
从django.core.handlers.wsgi导入WSGIHandler
ImportError:没有名为'django.core.handlers.wsgi'的模块
因此,我可以从
django/core/\uuuu init\uuuuuuuu.py
中访问
django/core/wsgi.py
。但是,
django.core.handlers.wsgi
是遥不可及的。我删除了更改以重现原始错误,但错误已经更改。现在,即使没有显式的相对导入,我也没有得到名为'django.core.handlers.wsgi'的模块

这就是它击中我的时候。我在gedit中打开了
django/core/handlers/wsgi.py
,单击一行的末尾,按空格键,删除插入内容,然后保存文件。这应该是禁止操作的。但是当我重新启动服务器时,突然导入错误转移到另一个django导入。唯一合乎逻辑的解释是行尾是错误的,通过在gedit中重新保存文件,我正在默默地修复它们

import django.core
django.core.wsgi  # no-op to see if we can access it
Traceback (most recent call last):
  File "/usr/local/treehouse/wsgi/index.wsgi", line 11, in <module>
    import django.core
  File "/usr/local/lib/python3.4/site-packages/django/core/__init__.py", line 1, in <module>
    from . import wsgi
  File "/usr/local/lib/python3.4/site-packages/django/core/wsgi.py", line 1, in <module>
    from django.core.handlers.wsgi import WSGIHandler
ImportError: No module named 'django.core.handlers.wsgi'