首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用烧瓶测试脚本

用烧瓶测试脚本
EN

Stack Overflow用户
提问于 2020-01-05 01:36:54
回答 1查看 87关注 0票数 0

我正在努力为我正在创建的Flask应用程序创建新的脚本。我有以下目录结构:

代码语言:javascript
复制
    /myapp
        /config.py  
        /app  
            /__init__.py
            /routes.py  
            /models.py  
            /niche_script.py  
            /templates/  
                /...
        /venv

__init__.py

代码语言:javascript
复制
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

代码语言:javascript
复制
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。我希望能够独立运行脚本,以测试一些数据库查询,而不必每次运行烧瓶应用程序。但是,就目前情况而言,如果运行独立的脚本不承认app是一个模块,我不知道如何将db导入到脚本中。

顺便提一句,仅仅在shell中完成所有这些工作是否是通常的工作流程?还是有一个更好的开发过程,我不知道

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-05 01:47:54

根据运行的位置和安装包的方式,行为将有所不同。

要使它快速、容易地工作,首先要做的就是将/myapp的完整路径添加到PYTHONPATH环境变量中。flask run命令很可能会自动地将当前的工作目录添加到python (或者您已经将其配置为特定于FLASK_APP的某个位置)。

尝试将cd-ing放入不同的目录,并查看它的不同之处。

第二个“更干净”的方法是将您的app包作为可安装的包。这意味着您为它创建了一个基本的setup.py文件,然后您可以pip install -e /path/to/myapp/,然后一切都设置为“正确的方式”,而不必处理环境变量等等。

值得一提的是,在执行此类脚本和Flask时,您必须记住,在您所做的某些事情中可能需要“应用上下文”和“请求上下文”。当你以“正常的方式”运行应用程序时,它都是由你自己管理的,但在这种情况下,你可能不得不自己去做:有大量的文档和例子,但一开始可能并不简单。从你的帖子中还不清楚你是否已经知道了,但是如果你不知道的话,告诉你这件事也没什么坏处。

一些一般性建议

我建议您将niche_script.py文件从app包中移出,这与您的问题并不严格相关。如果它只是为了测试一些东西,并且作为快速迭代某些特性的游乐场,那么它可能不应该是您的“主”代码库的一部分。

我这样做的方法是在特定目录中使用我忽略的脚本(只在我的机器上,而不是在真正的.gitignore上),然后实际测试有用的东西,而不是一些实验进入一个专用的tests/目录(我使用pytest )。

我希望这能帮到你。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59596352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档