【问题标题】:cannot setup apache 2.2 with mod_wsgi and python 3.3?无法使用 mod_wsgi 和 python 3.3 设置 apache 2.2?
【发布时间】:2013-12-23 15:50:03
【问题描述】:

这是我尝试使用 Python 3.3、Apache 2.2 进行设置并在 http://www.lfd.uci.edu/~gohlke/pythonlibs/ 使用 mod_wsgi-3.4.ap22.win32-py3.3.zip 时出现的错误日志

 mod_wsgi (pid=4940): Target WSGI script 'C:/www/h.wsgi' cannot be loaded as Python module.
 mod_wsgi (pid=4940): Exception occurred processing WSGI script 'C:/www/h.wsgi'.
 Traceback (most recent call last):\r
   File "C:\\Python33\\Lib\\pkgutil.py", line 504, in find_loader\r
     return importlib.find_loader(fullname, path)\r
   File "C:\\Python33\\Lib\\importlib\\__init__.py", line 64, in find_loader\r
     loader = sys.modules[name].__loader__\r
 AttributeError: 'module' object has no attribute '__loader__'\r
 \r
The above exception was the direct cause of the following exception:\r
 \r
 Traceback (most recent call last):\r
   File "C:/www/h.wsgi", line 5, in <module>\r
     application = Flask(__name__)\r
   File "C:\\Python33\\lib\\site-packages\\flask\\app.py", line 331, in __init__\r
     instance_path = self.auto_find_instance_path()\r
   File "C:\\Python33\\lib\\site-packages\\flask\\app.py", line 622, in auto_find_instance_path\r
     prefix, package_path = find_package(self.import_name)\r
   File "C:\\Python33\\lib\\site-packages\\flask\\helpers.py", line 661, in find_package\r
     loader = pkgutil.get_loader(root_mod_name)\r
   File "C:\\Python33\\Lib\\pkgutil.py", line 482, in get_loader\r
     return find_loader(fullname)\r
   File "C:\\Python33\\Lib\\pkgutil.py", line 510, in find_loader\r
     raise ImportError(msg.format(fullname, type(ex), ex)) from ex\r
 ImportError: Error while finding loader for '_mod_wsgi_293471048e599ca28a13db229cd884c8' (<class 'AttributeError'>: 'module' object has no attribute '__loader__')\r

和浏览器显示“内部服务器错误”。

我不知道为什么,因为当我尝试使用 Python 2.7、Apache 2.2 和 mod_wsgi-3.4.ap22.win32-py2.7.zip 进行设置时,没问题

有人帮帮我,非常感谢!

附注:

httpd.conf 设置

<VirtualHost *:80>
        ServerName webmaster@localhost
        WSGIScriptAlias / C:/www/h.wsgi
        <Directory "C:/www">
                Order allow,deny
                Allow from all
        </Directory>
</VirtualHost>

还有我的应用

from flask import Flask

application = Flask(__name__)

@application.route('/')
def hello_world():
    return "Hello"

if __name__ == '__main__':
    application.run()

当我更改为 python 2.7 时它工作正常

【问题讨论】:

  • FWIW 我能够通过使用单独的文件并将应用程序导入其中来解决此问题:wsgi.py: from my_app import app as application

标签: flask mod-wsgi


【解决方案1】:

我建议在#pocoo IRC 频道上询问这个问题:

因为这就是 Flask 开发人员所在的位置。 Flask 似乎依赖于 Python 3.3 下模块的 __loader__ 属性,但 mod_wsgi 目前没有添加。由于新模块导入器的工作方式,Apache/mod_wsgi 可能需要开始添加一个,但也不确定 Flask 是否应该容忍它不存在。

在此处提供任何详细信息。

【讨论】:

  • 好的,谢谢 Graham Dumpleton,我会在这里提供任何详细信息
【解决方案2】:

我遇到了同样的问题,这似乎是与 Python 3.3 相关的问题,如下面的补丁所示: https://mail.python.org/pipermail/python-checkins/2014-March/128573.html

更新到 Python 3.4 似乎是一种选择。我还发现了这个解决方法,它现在似乎有效: http://librelist.com/browser//flask/2013/9/18/problem-debugging-flask-under-python-3-3/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    • 2014-05-11
    • 1970-01-01
    • 1970-01-01
    • 2011-09-24
    相关资源
    最近更新 更多