Refering to a directory in a Flask app doesn’t work unless the path is absolute

I downloaded nltk data into the data directory in my Flask app. The views reside in a blueprint in another directory on the same level as the data directory. In the view I’m trying to set the path to the data, but it doesn’t work.

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

This doesn’t work. If I use the whole path, it does work.

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

Why does the first form not work? How can I refer to the location of the data correctly?

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

In Python (and most languages), where the code resides in a package is different than what the working directory is when running a program. All relative paths are relative to the current working directory, not the code file it’s written in. So you would use the relative path nltk_data/ even from a blueprint, or you would use the absolute path and leave no ambiguity.

The root_path attribute on an app (or blueprint) refers to the package directory for the app (or blueprint). Join your relative path to that to get the absolute path.

resource_path = os.path.join(app.root_path, 'enltk_data')

There’s probably no reason to be appending this folder every time you call a view. I’m not familiar with nltk specifically, but there’s probably a way to structure this so you set up the data path once when you create your app.


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


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x