There are many approaches offered in the current documentation, but no approach seems to be "recommended" or otherwise suggested as the preferred approach to take. For a new developer looking to package their project, this can be confusing.
Looking at a few of the projects I'm familiar with, it seems that approach 3 is common.
Set the value to a __version__ global variable in a dedicated module in your project (e.g. version.py), then have setup.py read and exec the value into a variable.
Would it make sense to present this approach as more than just one among many? Or is there really no preferred way to single-source the project version, even for new projects?