首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取Flask应用程序的根路径

获取Flask应用程序的根路径
EN

Stack Overflow用户
提问于 2016-04-15 22:20:12
回答 2查看 66.9K关注 0票数 23

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

假设我们有这样的目录结构

代码语言:javascript
运行
复制
/project
    /app
    /tests
    /my_folder
    manage.py

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

现在,我尝试从run文件中猜测路径:

代码语言:javascript
运行
复制
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

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-15 23:19:43

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

代码语言:javascript
运行
复制
filename = os.path.join(app.instance_path, 'my_folder', 'my_file.txt')
票数 54
EN

Stack Overflow用户

发布于 2018-06-20 03:07:17

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

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

票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36649703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档