Python 烧瓶:init.py和run.py有什么用?蓝图是大多数Flask web应用程序中使用的标准工具吗?

Python 烧瓶:init.py和run.py有什么用?蓝图是大多数Flask web应用程序中使用的标准工具吗?,python,flask,Python,Flask,我最近开始接触Flask web dev,现在可能已经学习了5门不同的课程/教程,它们似乎都有不同的做事方式/惯例。我希望我能在这里得到一些澄清 是必须的吗?我看到一些教程使用它们,而有些不使用。根据我的理解,简单的项目不需要_uinit__uuuuy.py,因为它们简单且缺少模块 我需要一张支票吗?再一次,我似乎有些教程使用它们,有些不使用,所以我对这一点感到困惑。据我所知,它似乎是用来初始化应用程序的,而_init__u;.py是用来初始化包(文件夹)的?如果是这样的话,为什么有些人只使用_

我最近开始接触Flask web dev,现在可能已经学习了5门不同的课程/教程,它们似乎都有不同的做事方式/惯例。我希望我能在这里得到一些澄清

  • 是必须的吗?我看到一些教程使用它们,而有些不使用。根据我的理解,简单的项目不需要_uinit__uuuuy.py,因为它们简单且缺少模块
  • 我需要一张支票吗?再一次,我似乎有些教程使用它们,有些不使用,所以我对这一点感到困惑。据我所知,它似乎是用来初始化应用程序的,而_init__u;.py是用来初始化包(文件夹)的?如果是这样的话,为什么有些人只使用_uinit_uuuuuuuuuuy.py
  • 蓝图是几乎所有基于flask的web应用程序中使用的标准东西吗?我这样问是因为有些课程似乎把它们作为基本概念来教授,而有些课程根本不使用它们。使用蓝图和简单地“导入”模块有什么区别?为什么有些项目使用它们而其他项目不使用它们
  • 下面的模块是否应该存在于每个模块中,以确保它不是正在运行的主模块
  • 根据蓝图的内容,我有一个项目,我用它作为烧瓶游乐场,这样我就可以在一个无用的烧瓶项目中乱搞,而不用担心我把一个真正的项目搞砸了。我目前正在导入一个“”文件,以试用SQL Alchemy。我正在学习一个关于SQL炼金术的教程,在这个教程中,他们不使用蓝图,因此只需简单地执行标准的app=Flask(_name__)操作。但是,我使用的是蓝图,有以下代码:
  • 本教程显然使用了“app.config”,但我的“app”存在于my _init__u;.py中,而不在本教程中,那么有没有在这个用户文件中使用config的方法呢?是否应该改为在uu init_uuu.py中完成


    抱歉发帖太长,提前感谢任何能帮助我的人

    我可以回答你列表中我理解的几个问题

    问题1

    init.py不是必需的文件。名为
    \uuuu init\uuuu.py
    的文件用于将磁盘上的目录标记为Python包目录。所以这实际上取决于你的项目结构。理想情况下,如果您有一个包含多个文件夹的项目,那么您可能必须将其作为python包目录

    这里有一个例子。如果你有文件

    project/my_app/__init__.py
    project/my_app/module.py
    
    您可以在
    module.py
    中作为导入代码

    from my_app import module
    

    如果删除
    \uuuu init\uuuuuuy.py
    文件,Python将不再在该目录中查找子模块,因此尝试导入模块将失败。

    问题2

    理想情况下是,
    run.py
    用于初始化或启动服务器应用程序。您还可能看到名为
    app.py
    的文件在某些地方被使用

    如果您正在创建一个
    flask
    应用程序,并希望您的api公开以供使用,则必须启动或运行flask应用程序

    app.run(debug=True)
    执行此操作

    关于
    app.py
    \uuuuu init\uuuuuu.py
    之间的区别:

    • run.py
      -->如果要启动应用程序,必须显式执行
      run.py
      文件
    • \uuuu init\uuuu.py
      -->每当您从包中导入任何内容时,init.py中的代码都会运行。这包括导入该包中的其他模块

    问题4

    简单的答案是否定的

    只有当您希望使用python文件的文件名执行python文件时,才会使用语句
    (如果_uname _=='_u main _;]:


    如果您有一个python文件,它只包含helper函数,而不执行任何其他操作,则可能不包含此语句。

    谢谢您的回答!您所说的有道理,基本上python包目录需要init.py,因为python就是这样识别包的。在您提出的同一个文件结构中,是否在项目目录下也有init.py?在我的应用程序目录下?与使用run.py而不是init.py相比,这有什么不同?是的,我可以在项目目录中也有
    \uu inti\uuuuuuuuuuuuuuupy
    。这将使我能够导入
    project/
    目录中的任何python文件。我无法理解你问题的第二部分。
    run.py
    和`init.py`有什么关系?这可能是因为我不了解正确的Flask文件结构。在您的文件结构示例中,我会将init.py放在我的项目目录中,并使用它初始化整个应用程序(而不是使用run.py)。所以我的问题是,用init.py和run.py初始化Flask应用程序有区别吗?希望这是有道理的!现在明白了。是的,有一点不同。在问题2的答案中添加解释。目前,我的Flask应用程序由Flask_组成,包含init.py和users.py,其中init.py使用app=Flask(name)创建Flask应用程序。我设置我的FLASK\u APP=FLASK\u游乐场,然后转到CLI并运行“FLASK run”。我没有跑步记录。那么在这种情况下,run.py会提供什么优势,因为我的应用程序运行起来似乎没有问题?非常感谢。这来自Python文档:
    在最简单的情况下,\uuuu init\uuuuuuuuuupy.py可以是一个空文件,但它也可以执行包的初始化代码或设置后面描述的uuuu all\uuuuuuuuuuuuuuu变量。
    因为init.py也可以用于执行任何常规Python代码,在您的情况下,启动应用程序是通过此文件完成的。您不需要
    run.py
    。我明白了,那么run.py提供init.py不提供的优势是什么呢?在大型应用程序中使用run.py的优点/目的是什么?对于大型应用程序,建议使用
    flask
    do
    project/my_app/__init__.py
    project/my_app/module.py
    
    from my_app import module