Flask/Keras网络服务模块未找到错误:未找到'tensorflow_core.keras'模块。

4

我正在构建一个简单的网络服务来分类图像。

我的Keras模型已经正确分类,Flask服务也在运行。

但是当我尝试在Flask应用程序中使用Keras模型时......

from flask import Flask

from myproject.keras_model_wrapper import get_result

APP = Flask(__name__)


@APP.route('/')
def keras_result():
    return get_result()

if __name__ == 'main':
    APP.run()

当出现导入错误时。

 * Environment: development
 * Debug mode: on
 * Restarting with stat
 * Debugger is active!
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
Traceback (most recent call last):
  File "<python_path>\python\python37\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "<python_path>\python\python37\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "<project_path>\.venv\Scripts\flask.exe\__main__.py", line 9, in <module>
  File "<project_path>\.venv\lib\site-packages\flask\cli.py", line 966, in main
    cli.main(prog_name="python -m flask" if as_module else None)
  File "<project_path>\.venv\lib\site-packages\flask\cli.py", line 586, in main
    return super(FlaskGroup, self).main(*args, **kwargs)
  File "<project_path>\.venv\lib\site-packages\click\core.py", line 717, in main
    rv = self.invoke(ctx)
  File "<project_path>\.venv\lib\site-packages\click\core.py", line 1137, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "<project_path>\.venv\lib\site-packages\click\core.py", line 956, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "<project_path>\.venv\lib\site-packages\click\core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "<project_path>\.venv\lib\site-packages\click\decorators.py", line 64, in new_func
    return ctx.invoke(f, obj, *args, **kwargs)
  File "<project_path>\.venv\lib\site-packages\click\core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "<project_path>\.venv\lib\site-packages\flask\cli.py", line 860, in run_command
    extra_files=extra_files,
  File "<project_path>\.venv\lib\site-packages\werkzeug\serving.py", line 1008, in run_simple
    run_with_reloader(inner, extra_files, reloader_interval, reloader_type)
  File "<project_path>\.venv\lib\site-packages\werkzeug\_reloader.py", line 337, in run_with_reloader
    reloader.run()
  File "<project_path>\.venv\lib\site-packages\werkzeug\_reloader.py", line 202, in run
    for filename in chain(_iter_module_files(), self.extra_files):
  File "<project_path>\.venv\lib\site-packages\werkzeug\_reloader.py", line 24, in _iter_module_files
    filename = getattr(module, "__file__", None)
  File "<project_path>\.venv\lib\site-packages\tensorflow\__init__.py", line 50, in __getattr__
    module = self._load()
  File "<project_path>\.venv\lib\site-packages\tensorflow\__init__.py", line 44, in _load
    module = _importlib.import_module(self.__name__)
  File "<python_path>\python\python37\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 965, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'tensorflow_core.keras'

我不知道导入系统是否重要地在我的.venv之外进行搜索,说实话我不知道我应该寻找什么来自己解决它。欢迎任何提示。

3
我尚未完全解决这个问题,但我已经发现它与 Flask 的调试模式有关。因此,一个非常麻烦的解决方法是关闭 Flask 的调试模式。 - xanderer
1
@xanderer 是的,将调试设置为False可以使其运行。非常感谢。我会接受并评价它作为答案。 - bnrc_
1
@brnc_ 我已将其作为答案添加,并提供了有关GitHub上问题的信息。 - xanderer
1
顺带一提,在GitHub上,有人报告了Django和Falcon的类似问题。因此,尽管根据这个问题看起来与Flask有关,但可能并非如此。我也遇到了这个问题(也在使用Flask),虽然很难复现——有时应用程序可以启动并运行我的Keras模型。 - Richard Michael
@xanderer bnrc_ 你好,关闭Flask调试后,你是否成功运行了不仅是Flask应用程序,还有TensorFlow模型本身? - Marcel Mars
@MarcelMars 现在似乎一切正常工作。 - xanderer
2个回答

4

关闭调试的问题在于,应用程序在更改后停止实时重新加载。 - Udendu Abasili
2
那确实很痛苦,但重新启动总比没有运行的服务器好。 - bnrc_
@xanderer 你救了我! - N0rA

-1

针对 Flask==1.1.1 和 tensorflow==2.1.0 的完美解决方案

在 Flask 中,您应该将 "import tensorflow as tf" 放置在 "__init__.py" 文件中。

在 Django 中,您应该将 "import tensorflow as tf" 放置在 "manage.py" 文件中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接