Apache 阿帕奇&x2B;WSGI要运行Flask,请获取Python importorror:“;无法导入名称…”;或;没有名为“的模块”;

Apache 阿帕奇&x2B;WSGI要运行Flask,请获取Python importorror:“;无法导入名称…”;或;没有名为“的模块”;,apache,python-3.x,module,flask,wsgi,Apache,Python 3.x,Module,Flask,Wsgi,亲爱的SO用户您好,欢迎来到我的第一个问题 我目前正在考虑使用Apache和mod_wsgi部署一个Flask应用程序。所有的代码都是用Python 3.4编写的,因此我必须遵循几个/来使用我的Python版本(因为apt get install为您提供了与Python 2.7兼容的3.4版本,您必须在Python 3 virtualenv中使用pip将其编译为4.x版本) Apache服务器error.log显示了Apache/2.4.10(Debian)mod_wsgi/4.4.13 Pyt

亲爱的SO用户您好,欢迎来到我的第一个问题

我目前正在考虑使用Apache和
mod_wsgi
部署一个Flask应用程序。所有的代码都是用Python 3.4编写的,因此我必须遵循几个/来使用我的Python版本(因为apt get install为您提供了与Python 2.7兼容的3.4版本,您必须在Python 3 virtualenv中使用pip将其编译为4.x版本)

Apache服务器error.log显示了
Apache/2.4.10(Debian)mod_wsgi/4.4.13 Python/3.4.2的配置
,因此这似乎工作正常

我的问题在于将应用程序导入.wsgi文件中。教程通常从FlaskApp导入应用程序作为应用程序执行
考虑到它们的文件树,这在一个最小的应用程序中可以正常工作,我尝试了它,没有任何问题

我的应用程序稍微复杂一点,使用manage.py文件在本地主机上运行,这可能是尝试在Apache上部署时出现问题的一部分

从我在无数SO问题和其他网站的问题中发现的情况来看,这很可能来自:

  • 权限问题(如果执行当前脚本的用户对要导入的脚本没有读取权限)
  • sys.path
    问题(如果顶级文件夹不在
    sys.path
    中,Python 3将无法看到它)
主要是出于沮丧,我最终在/var/www/中使用了
chmod 744 LongAppName
,从而获得了drwxrwxr-x权限。 我的文件树如下所示:

drwxrwxr-x LongAppName
    drwxr-xr-x LongAppName
        drwxr--r-- ShorterAppName
            -rw-r--r-- app.py
            -rw-r--r-- commands.py
            -rw-r--r-- __init__.py
            drwxr--r-- static
            drwxr--r-- templates
            <irrelevant files>
        -rw-r--r-- __init__.py
        -rw-r--r-- manage.py
        drwxr-xr-x venv
        <more irrelevent files>
    -rwxr-xr-x longappname.wsgi
Python似乎找不到LongAppName.ShorterAppName.app,我不知道为什么

从我尝试测试不同于我最初编写的代码的替代方案的次数来看,我开始忘记什么是好的,什么可能导致问题,所以我需要您的帮助来解决这个问题


提前谢谢

您的某些目录权限现在是可疑的。你有:

    drwxr--r-- ShorterAppName
最好使用:

    drwxr-xr-x ShorterAppName
对于静态模板和模板也是如此


我们真正需要看到的是从Apache错误日志回溯的Python异常详细信息。

感谢您的回复,目录确实需要可执行,在我对LongAppName的所有子目录使用
chmod a+x
后,错误消息发生了更改。我现在收到的错误消息是:
[Wed Aug 19 08:23:38.650234 2015][wsgi:error][pid 1953:tid 139798123620096][client 192.168.0.17:51452]TypeError:u call_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuo()从1到2个位置参数中获取,但给出了3个
我不确定是哪一个,但它很可能来自于使用manage.py文件启动应用程序的方式。您想查看文件的内容,还是我应该问另一个问题?需要查看异常的完整回溯,以便查看发生此情况的位置。以下是回溯:
[mpm_事件:注意][pid 2998:tid 140561778562944]AH00489:Apache/2.4.10(Debian)mod_wsgi/4.4.13 Python/3.4.2已配置--恢复正常操作[core:notice][pid 2998:tid 140561778562944]AH00094:命令行:'/usr/sbin/apache2'[wsgi:error][pid 3001:tid 140561554056960][client 192.168.0.17:52081]mod u wsgi(pid=3001):处理wsgi脚本'/var/www/LongAppName/LongAppName.wsgi时发生异常。[wsgi:error][pid 3001:tid 140561554056960][client 192.168.0.17:52081]TypeError:_call__()接受1到2个位置参数,但给出了3个
无论“manager”是什么,它都不能用作wsgi应用程序。您通常会使用
Flask()
应用程序对象。我确实认为这可能是问题所在<代码>管理器是在my app.py中创建的,如下所示:
来自flask导入flask app=flask(_name__)app.debug=True来自flask.ext.script导入管理器=管理器(app)
    drwxr-xr-x ShorterAppName