启动我的应用程序会导致启动后立即崩溃。目前尚不清楚该错误可能意味着什么,因为它刚刚加载了它声称找不到的模块。
这可能是一条红鲱鱼,但是为什么它会立即重新启动?
我可以找到的大多数其他有关此错误消息的引用是当文件被作为脚本而不是像我已经那样被作为模块(-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')
Edit 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')
Edit 2。 PYTHONPATH=$(pwd) python -m ....
使它起作用,但是为什么需要这样做?只是为了让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文件的位置是项目的根目录并切换到该目录。
感谢Flask。尚无修复。
https://github.com/pallets/flask/blob/master/src/flask/cli.py#L607
添加FLASK_SKIP_DOTENV=1
跳过os.chdir()