【问题标题】:ImportError: cannot import name 'app'ImportError:无法导入名称“app”
【发布时间】:2014-09-21 11:24:30
【问题描述】:

我已经为此工作了 5 个多小时,看起来应该很简单。我按照instructions 通过 mod_wsgi 在 apache 上设置了一个烧瓶应用程序,完成它们后我收到一个错误

ImportError: cannot import name 'app'

从行:

from web_tool import app as application

我的名为 web_tool.wsgi 的 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。

【问题讨论】:

  • 你的 app 脚本是在 /path/web_tool/src/web_tool/app.py 还是其他地方?
  • 它在 /path/web_tool/src/web_tool/web_tool.py
  • 哈哈,非常感谢您的快速评论,我导入不正确,因为我认为 wsgi 需要 web_tool 类中的实际应用程序对象,但它首先需要该类。它现在正在工作,感谢法律。
  • 您可能想写一个答案来解释您做错了什么以及如何解决它,并接受您自己的答案,如果您认为它可能会帮助其他有类似问题的人。

标签: python apache mod-wsgi wsgi


【解决方案1】:

在得到 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 答案中看到这种结构,但这可能是因为我的特定项目结构。

【讨论】:

  • 这对我也有用,但我必须在该文件夹中添加一个空白 __init__.py 文件才能工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-29
  • 1970-01-01
  • 2021-11-26
  • 2019-06-03
  • 2021-06-28
  • 2020-12-06
  • 1970-01-01
相关资源
最近更新 更多