我已经为此工作了5个多小时,看起来应该很简单。我跟着instructions通过mod_wsgi在apache上设置了一个烧瓶应用程序,在完成它们后我得到一个错误
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。
答案 0 :(得分:7)
在被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
我没有在网上或任何其他SO答案中看到这种结构,但这可能是因为我的特定项目结构。