That’s a good question that helps to dive into the philosophical nature of the question “dynamic” vs. “static” and “editable” vs. “site-packages”.
In my eyes this construct, specifically, is “static” information, because it comes from a part of the package’s source code, which forms an inherent part of the software solution needed at runtime. When the version information comes from a Git repository this is considered “dynamic”, because the information is derived from the environment “hosting the source code” at build time. It’s still integrated as static information into the metadata, which in my mental model is the canonical truth for an installed package together with the unaltered source code.
A cryptographic hash, maybe?
We could record a cryptographic hash over the entire source code of the package that could be recalculated anytime to verify the validity of the installed package, if integrity is important.
In essence, I don’t fully grasp the fuss about “dynamic” as long as the build tools convert the setup to statically recorded package information. Talking about version number generation – let’s call it “automatic” versioning – I found this to be a tremendous time-saver compared to having to update the __version__ attribute – which I used to be a big fan of – in the package’s main __init__.py file. I use scm-setuptools nowadays. My mental model about the version number has not changed, though. It’s still “static” information for me, only more conveniently updated. And this is only possible, because I bow to having to manage my source code under version control to get this convenience.
Editable is for casual users
The “editable” part of the discussion, in my strictly personal view, is a part of the less clean nature of Python, that leaves more room for freedom, though. (The comparison with Java’s Maven was great! It’s super-rigid.)
People who use editable installs either are package developers who work on various projects / packages / libraries at once and need or want to have live interaction with changing source code. Or they are “dirty hackers” (forgive the term) that like to mess with source code in production without source control and immutable infrastructure in place. The same breed of people who see Python as a “scripting” language. My colleagues at work still call the software we write “Python scripts” even though we’ve transformed everything to automatically built and neatly installed CLI applications.
Packaging is for responsible people
Yes, Python is “for adults”, and adults oftentimes take stupid decisions. But that’s part of the freedom Python offers. Not sure if we want to change this. Though, packaging tools could be strict, because package should be a clean terrain, a place where you learn good software development practices. Just my two cents.