After some trial-and-error, I found some answers.
First of all, make sure your virtualenv is visible to VS Code's Python extension
Two settings appear to control where the Python extension looks for interpreters and environments, python.venvPath
and python.venvFolders
. The first one is officially documented on the settings reference. I can't find any official documentation for the second one, but there are lots of references to it on the Internet.
I set my paths as follows. We use virtualenvwrapper.

I recommend setting these at either the User or Workspace level. If you have some team members using different types of virtualenvs, or installing venvs somewhere other than the default, you might want to keep this at the User level so it can be modified by them.
Second, make sure you haven't accidentally set it somewhere else
VS Code has multiple settings levels; Default < User < Workspace < Folder.
In my case (and for many other team members) we had a python.pythonPath
setting at the Folder level, which overrides all the others. The Folder level has the highest priority.
You may need to open and edit settings.json
at each level and delete the setting. Once you have done so, VS Code should pick up the path to Python in your virtualenv automatically, meaning you don't have to set it at all.
If you still must set the python.pythonPath
manually . . .
... I recommend setting it at the Folder level and hiding ${workspaceFolder}/.vscode
from version control. This allows you to:
And again, make sure your team doesn't accidentally change this setting at the Workspace level, so you can keep your project.code-workspace
file clean in version control.