我正在努力为我正在创建的Flask应用程序创建新脚本。我有以下目录结构:
/myapp
/config.py
/app
/__init__.py
/routes.py
/models.py
/niche_script.py
/templates/
/...
/venv
\uuuu init\uuuuu.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from config Import Config
app = Flask(__name__)
app.config.from_object(Config)
db = SQLAlchemy(app)
from app import routes, models, niche_script
niche_script.py
try:
from app import app, db
from app.models import User
print("Import 1")
except:
print("Import 2")
'''do stuff'''
if __name__="__main__":
print("do stuff")
当我使用flask run
运行应用程序并调用脚本的功能时,Import 1
被打印出来。但是,如果我尝试自己运行脚本,则会打印Import 2
。我希望能够独立运行脚本,作为测试一些数据库查询的一种手段,而不必每次都运行flask应用程序。然而,就目前情况而言,如果脚本运行单机版无法将应用程序识别为模块,我不确定如何将db导入脚本
另一方面,通常的工作流程是在shell中完成所有这一切吗?还是有一个更好的开发过程我一无所知
根据运行它的位置和安装包的方式,行为会有所不同
要让它快速、轻松地工作,首先要做的是将
/myapp
的完整路径添加到PYTHONPATH
环境变量中。flask run
命令很可能会自动将当前工作目录添加到python路径中(或者您已经将其配置为使用FLASK_APP
查找特定位置)尝试
cd
到不同的目录中,看看它有什么不同第二种“更干净”的方法是将
app
包作为可安装包。这意味着您要为它创建一个基本的setup.py
文件,然后您可以pip install -e /path/to/myapp/
,然后一切都以“正确的方式”设置,而不必处理环境变量等等值得一提的是,在执行此类脚本和Flask时,您必须记住,在您执行的某些操作中可能需要“应用程序上下文”和“请求上下文”。当你以“正常的方式”运行应用程序时,它是为你管理的,但在这种情况下,你可能不得不自己去做:有大量的文档和例子,但一开始可能并不简单。从你的帖子中不清楚你是否已经知道了,但如果你不知道,告诉你也没什么坏处
一些一般性建议
我建议的一件事与您的问题没有严格的关系,就是将
niche_script.py
文件移出app
包。如果它只是为了测试一些东西,并作为快速迭代某些特性的平台,那么它可能不应该成为“主”代码库的一部分我做这类事情的方法是在一个特定的目录中使用一个脚本,我从git中忽略它(只在我的机器上,而不是真正的
.gitignore
),然后真正测试有用的东西而不是一些实验的真正测试将进入一个专用的tests/
目录(我使用pytest
)我希望这有帮助
相关问题 更多 >
编程相关推荐