ImportError:无法导入名称'app

3 投票
1 回答
24703 浏览
提问于 2025-04-18 15:16

我已经花了超过5个小时在这个问题上,感觉应该挺简单的。我按照说明设置了一个通过mod_wsgi在apache上运行的flask应用,但完成后却遇到了一个错误,错误信息是:

ImportError: cannot import name 'app'

错误出现在:

from web_tool import app as application

我这个wsgi文件叫做web_tool.wsgi,内容大致是:

import sys  
sys.path.insert(0, "/path/web_tool/src/")
print(sys.version)
print(sys.path)

from web_tool import app as application

我的python版本和系统路径应该是正确的,我相信这一点。

然后我的虚拟主机文件,保存在apache2/sites-available/default,内容是:

WSGIPythonHome /usr/local/opt/python-3.4.1

<VirtualHost *:4000>

    ServerName my.servername.com
    WSGIDaemonProcess web_tool user=my_username group=my_group threads=5
    WSGIScriptAlias / /path/web_tool/src/web_tool/web_tool.wsgi
    WSGIApplicationGroup %{GLOBAL}

    <Directory /path/web_tool/src/web_tool/>
        WSGIProcessGroup cnt_tool
        Order deny,allow
        Allow from all
    </Directory>
</VirtualHost>

你能看到有什么错误吗?我的wsgi文件需要和我的python文件同名吗?我现在使用的是python 3.4和mod_wsgi 3.4。

1 个回答

9

在abarnert的提示下,我意识到问题并不在Flask和Apache的整体结构上,而只是我导入的结构出了点问题。所以我找到的解决办法是,首先确保我做了

from web_tool import web_tool as application

因为我的项目结构是这样的

/path/web_tool/src/web_tool/
    web_tool.py
    web_tool.wsgi

我觉得把文件夹命名为和主Python脚本一样的名字有点让人困惑,但后来我搞清楚了。现在,上面的导入还是不行,因为我遇到了模块错误,但我找到的有效方法是:

from web_tool import web_tool
application = web_tool.app

我在网上或其他StackOverflow的回答中没有看到过这种结构,可能是因为我的项目结构比较特殊。

撰写回答