【问题标题】:Get root path of Flask application获取 Flask 应用程序的根路径
【发布时间】:2016-04-15 14:20:11
【问题描述】:

我正在开发一个 Flask 扩展,我想在文件系统上的项目根路径中创建一个目录。

假设我们有这个目录结构

/project
    /app
    /tests
    /my_folder
    manage.py

my_folder 应该由扩展程序动态创建,扩展程序是一个测试实用程序,并将被测应用程序包装在 /tests 目录中。但是,我正在努力在我的扩展程序中确定项目的根路径。

目前,我正在尝试从运行文件中猜测路径:

def root_path(self):
    # Infer the root path from the run file in the project root (e.g. manage.py)
    fn = getattr(sys.modules['__main__'], '__file__')
    root_path = os.path.abspath(os.path.dirname(fn))
    return root_path

一旦从 IDE 而不是 manage.py 中运行测试,这显然会中断。我可以简单地推断出项目相对于应用程序或测试目录的根目录,但我不想对这些目录的名称或结构做出任何假设(因为多个应用程序可能作为子包托管在一个包中)。

我想知道是否有针对此类问题的最佳实践或 Flask 对象提供的未记录方法(例如 get_root_path)。

【问题讨论】:

    标签: python flask


    【解决方案1】:

    app.root_path 包含应用程序的根路径。这是determined,基于传递给Flask 的名称。通常,您应该使用instance path (app.instance_path) 而不是根路径,因为实例路径不在包代码中。

    filename = os.path.join(app.instance_path, 'my_folder', 'my_file.txt')
    

    【讨论】:

      【解决方案2】:

      app.root_path 是包含您的应用代码的根目录的绝对路径。

      app.instance_path 是实例文件夹的绝对路径。 os.path.dirname(app.instance_path) 是实例文件夹上方的目录。 在开发过程中,这与根路径相邻或相同,具体取决于您的项目布局。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-07
        • 1970-01-01
        • 2011-09-08
        • 1970-01-01
        • 2012-10-23
        相关资源
        最近更新 更多