一尘不染

获取Flask应用程序的根路径

flask

我正在开发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中运行测试,这显然会中断。我可以简单地推断出相对于app或tests目录的项目根目录,但是我不想对这些目录的名称或结构进行任何假设(因为多个应用程序可能作为子包托管在单个包中)。

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


阅读 1619

收藏
2020-04-05

共1个答案

一尘不染

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

filename = os.path.join(app.instance_path, 'my_folder', 'my_file.txt')
2020-04-05