Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用Flask测试脚本_Python_Flask - Fatal编程技术网

Python 用Flask测试脚本

Python 用Flask测试脚本,python,flask,Python,Flask,我正在努力为我正在创建的Flask应用程序创建新脚本。我有以下目录结构: /myapp /config.py /app /__init__.py /routes.py /models.py /niche_script.py /templates/ /... /venv

我正在努力为我正在创建的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
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")
niche_script.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
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\u APP
将其配置为查找特定位置)

尝试将
cd
-ing插入不同的目录,看看它有什么不同

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

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

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

我做这类事情的方法是在一个特定目录中使用一个脚本,我从git中忽略它(仅在我的机器上,而不是真正的
.gitignore
),然后真正测试有用的东西而不是一些实验的真正测试将进入一个专用的
测试/
目录(我使用
pytest


我希望这有帮助。

这非常有用!你说得很对——我已经把我的
FLASK\u应用程序设置成特定的地方。另外,我不知道“应用程序上下文”和“请求上下文”的区别,所以我将继续阅读一些文档。非常感谢。