引用Flask应用程序中的目录不起作用,除非路径是绝对的

引用Flask应用程序中的目录不起作用,除非路径是绝对的

我下载了nltk数据到我的Flask应用程序的数据目录中。视图驻留在与数据目录相同级别的另一个目录中的蓝图中。在视图中,我试图设置数据的路径,但它不起作用。

nltk.data.path.append('../nltk_data/')

这不管用。如果我用了整条路,它就能用了。

nltk.data.path.append('/home/username/myapp/app/nltk_data/')

为什么第一种形式不起作用?如何正确地引用数据的位置?


临摹微笑
浏览 399回答 1
1回答

慕桂英3389331

在Python(和大多数语言)中,代码驻留在包中的位置与运行程序时的工作目录不同。所有相对路径都相对于当前工作目录,而不是它所写入的代码文件。所以你可以使用相对路径nltk_data/即使是从蓝图,或者你会使用绝对的路径,并没有留下任何含糊不清。这个root_path属性是指应用程序(或蓝图)的包目录。加入你的相对路径,得到绝对路径。resource_path = os.path.join(app.root_path, 'enltk_data')每次调用视图时,可能都没有理由追加此文件夹。我对nltk并不特别熟悉,但可能有一种方法可以对其进行结构化,因此在创建应用程序时,您只需设置一次数据路径。project    /    app    /    blueprint                        /    data                             ^ join with root_path to get here                 ^ app.root_path always points here, no matter where cwd is ^ current working directory
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python