This is how I started my first virtualenv for my Flask app:
$ virtualenv flask_env
$ source flask_env/bin/activate
(flask_env) $ pip install Flask
This is my first time working with this. Is it a good practice to create a new virtualenv each time I start building a new Flask app?
Short answer: Yes.
Longer answer: It’s a bit of personal question as to how you want to work. I think you’ll find that as you build more apps, each one will have different dependencies. Maybe for one app you’ll want to use wtforms. Maybe for another app you’ll use requests. Maybe for a third, you’ll need flask-sqlalchemy. If you have each app in its own virtualenv, these requirements can be managed distinctly.
If you plan on deploying to something like Heroku, you’ll find it much easier to have a virtualenv with only what that one app needs.
The only downside is if you use something like wtforms in every app you build and you decide to upgrade. You’d have to do that upgrade in each virtualenv. This might not be so bad, because you’d likely want to test how that upgrade affects each app differently anyway.
In my personal experience, I have created a virtualenv for every app, every experiment, every different thing I’ve worked on. It’s a nice compartmentalization and for me, feels akin to branching in git (though without all the merging).