Flask('application')与Flask(__ name__)

nal*_*zok 13 python import module package flask

在官方快速入门中,建议__name__在使用单个模块时使用:

  1. ...如果您使用单个模块(如本例所示),您应该使用,__name__因为根据它是作为应用程序启动还是作为模块导入,名称将不同('__main__'与实际导入名称相对)....

但是,在他们的API文档中,当我的应用程序是一个时,建议使用硬编码:

所以你在那里提供的很重要.如果您使用单个模块,__name__则始终是正确的值.但是,如果您使用的是软件包,通常建议在那里对软件包的名称进行硬编码.

我可以理解为什么硬编码我的包的名称更好,但为什么不硬编码单个模块的名称?或者,换句话说,Flask当它收到__main__第一个参数时,可以得到什么信息?我无法看到这如何使Flask更容易找到资源......

dav*_*ism 16

__name__只是获取应用程序定义位置的导入名称的便捷方式.Flask使用导入名称来了解查找资源,模板,静态文件,实例文件夹等的位置.使用包时,如果您定义了应用程序,__init__.py那么__name__仍将指向相对于资源位置的"正确"位置是.但是,如果您在别处定义它,例如mypackage/app.py,那么使用__name__将告诉Flask查找相对于的资源mypackage.app而不是mypackage.

使用__name__与"硬编码"不正交,它只是使用包名称的快捷方式.并且没有理由说该名称应该是基础包,它完全取决于您的项目结构.