我是烧瓶和pycharm的新手。基本上我写了一个休息webservice,最初PyCharm将它作为python脚本运行。一切都很好。但是在我实现了pycharm后,它会将app.py检测为烧瓶应用程序。
在app.py中本地启动应用程序的部分如下:
if __name__ == '__main__':
from db import db
db.init_app(app)
if app.config['DEBUG']:
@app.before_first_request
def create_tables():
db.create_all()
app.run(port=5000)
问题是当我尝试运行app.py时似乎没有执行此部分。我还有run.py
用于在Web服务器上通过uwsgi运行应用程序。
当我启动app.py
时,这是 pycharm 的控制台输出:
FLASK_APP = app.py
FLASK_ENV = development
FLASK_DEBUG = 0
In folder /home/username/PycharmProjects/psychotest
/home/aydar/PycharmProjects/psychotest/venv/bin/python -m flask run
* Serving Flask app "app.py"
* Environment: development
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
我已将打印语句添加到if __name__=='main'
块中,这些块从不打印。似乎pycharm也会使用/home/username/PycharmProjects/psychotest/venv/bin/python -m flask run
启动烧瓶。另外你可以看到DEBUG
是假的,即使我在app.py的主体中明确地将debug设置为true,如下所示:
app = Flask(__name__)
app.config['DEBUG'] = True
只需python app.py
即可通过终端完成所有工作。如何更改Pycharm的这种行为?这让我很烦,因为每当我尝试通过烧瓶从数据库中获取某些内容时,我都会收到sqlalchemy错误。错误示例:
'The sqlalchemy extension was not registered to the current ' \
AssertionError: The sqlalchemy extension was not registered to the current application. Please make sure to call init_app() first.
答案 0 :(得分:2)
基于this回答,因为PyCharm将其检测为烧瓶应用,if __name__ == '__main__':
块永远不会被击中,所以您可能希望将db.init_app(app)
移到该块之外(进口也是)
答案 1 :(得分:0)
您可以编辑由Pycharm运行的配置。
您可以在右上角找到它。有一个选择框,您可以选择当前配置。
然后不要将-m flask run
用作参数,而只使用app.py
。
答案 2 :(得分:0)
实际上我能够解决问题。虽然重新格式化app.py
,即db.init_app()
移出__name__=='__main__'
,但仍有效 - 但这对我来说并不理想。因为我已经设置了工作流程,而且我不想仅为PyCharm更改app.py的执行逻辑。
解决方案是在设置中禁用烧瓶集成 - >语言和框架。现在一切正常。