ImportError:无法导入名称'app
我已经花了超过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的回答中没有看到过这种结构,可能是因为我的项目结构比较特殊。