如何诊断和修复启动后立即导致应用程序崩溃的flask/werkzeug重新加载错误

2024-09-29 17:22:32 发布

您现在位置:Python中文网/ 问答频道 /正文

启动应用程序会在启动后立即导致崩溃。目前还不清楚这个错误可能意味着什么,因为它刚刚加载了声称找不到的模块。你知道吗

它可能是一条红鲱鱼,但为什么它会立即重启?你知道吗

我能找到的关于此错误消息的大多数其他引用是当文件被作为脚本调用时,而不是像我已经做的那样作为模块(-m)调用时

(.virtualenv3) rob@positron:~/Projects/<my_proj>/codebase/src$ source ../../.webapp.env && python3 -m webapp.main
 * Serving Flask app "main" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: on
INFO:werkzeug: * Running on http://0.0.0.0:8002/ (Press CTRL+C to quit)
INFO:werkzeug: * Restarting with stat
/home/rob/Projects/<myproj>/.virtualenv3/bin/python3: Error while finding module specification for 'webapp.main' (ModuleNotFoundError: No module named 'webapp')

编辑1:这里的一些输出表明,调用方法肯定可以与同一个包中的python模块一起工作(尽管是一个基本测试)

(.virtualenv3) rob@positron:~/Projects/<myproj>/codebase/src$ ls -la webapp/*.py
-rw-r--r-- 1 rob rob     0 Sep  9 15:37 webapp/__init__.py
-rw-r--r-- 1 rob rob 11494 Dec 13 13:19 webapp/main.py
-rw-r--r-- 1 rob rob    19 Dec 13 13:36 webapp/test.py
(.virtualenv3) rob@positron:~/Projects/<myproj>/codebase/src$ python -m webapp.test
Hello SO  
(.virtualenv3) rob@positron:~/Projects/<myproj>/codebase/src$ python -m webapp.main
 * Serving Flask app "main" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: on
INFO:werkzeug: * Running on http://0.0.0.0:8812/ (Press CTRL+C to quit)
INFO:werkzeug: * Restarting with stat
/home/rob/Projects/<myproj>/.virtualenv3/bin/python: Error while finding module specification for 'webapp.main' (ModuleNotFoundError: No module named 'webapp')

编辑2?只是为了让werkzeug玩得开心?你知道吗

编辑3。诊断时,烧瓶正在改变过程的CWD。你知道吗

下面是一个测试文件(webapp/test.py

import os
print('cwd: ', os.getcwd())
from flask import Flask

Flask(__name__).run(port=9991, debug=True)

当处于调试模式的werkzeug重新加载应用程序时,观察os.getcwd()的输出变化

(.virtualenv3) rob@positron:~/Projects/<myproj>/codebase/src$ PYTHONPATH=`pwd` FLASK_ENV=development python -m webapp.test
cwd: /home/rob/Projects/<myproj>/codebase/src
 * Serving Flask app "test" (lazy loading)
 * Environment: development
 * Debug mode: on
 * Running on http://127.0.0.1:9991/ (Press CTRL+C to quit)
 * Restarting with stat
cwd: /home/rob/Projects/<myproj>
 * Debugger is active!
 * Debugger PIN: 134-807-518

这是因为“如果”您有dotenv可用,Flask将运行它,并假定找到的.env文件的位置是项目的根目录,并切换到该目录。你知道吗

谢谢你。不过还没有解决办法。你知道吗

https://github.com/pallets/flask/blob/master/src/flask/cli.py#L607

https://github.com/pallets/flask/issues/3444


Tags: pytestsrcflaskmainonwebappwerkzeug

热门问题