Repository: pypa/setuptools_scm

Issue:
generated _version.py breaks on python <3.8
I have this in my `pyproject.toml`:
```
[tool.setuptools_scm]
write_to = "src/toolname/_version.py"
```
setuptools_scm 8.0.0 seems to incorrectly generate the `_version.py` file (it contains syntax errors):
```
# file generated by setuptools_scm
# don't change, don't track in version control
from __future__ import annotations
__version__ : str = version : str = '4.5.dev38+g44c9a18'
__version_tuple__ : 'tuple[int | str, ...]' = \
  version_tuple : 'tuple[int | str, ...]' = (4, 5, 'dev38', 'g44c9a18')
```

[Logs for a failed GitHub Actions run](https://github.com/marcelm/cutadapt/actions/runs/6247483075/job/16960159583).

Discussion:

Patch:
diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index ea3e6ea..9731a30 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -1,3 +1,12 @@
+
+v8.0.1
+======
+
+bugfix
+------
+
+* update version file template to work on older python versions by using type comments
+
 v8.0.0
 ======
 
diff --git a/src/setuptools_scm/_integration/dump_version.py b/src/setuptools_scm/_integration/dump_version.py
index a7ff4d3..421379b 100644
--- a/src/setuptools_scm/_integration/dump_version.py
+++ b/src/setuptools_scm/_integration/dump_version.py
@@ -15,10 +15,8 @@ TEMPLATES = {
     ".py": """\
 # file generated by setuptools_scm
 # don't change, don't track in version control
-from __future__ import annotations
-__version__ : str = version : str = {version!r}
-__version_tuple__ : 'tuple[int | str, ...]' = \\
-  version_tuple : 'tuple[int | str, ...]' = {version_tuple!r}
+__version__ = version = {version!r}  # type: str
+__version_tuple__ = version_tuple = {version_tuple!r}  # type: tuple[int | str, ...]
 """,
     ".txt": "{version}",
 }


Test patch:
diff --git a/testing/test_basic_api.py b/testing/test_basic_api.py
index fa35e2c..6fa02fe 100644
--- a/testing/test_basic_api.py
+++ b/testing/test_basic_api.py
@@ -179,10 +179,10 @@ def test_dump_version(tmp_path: Path) -> None:
     scm_version = meta("1.0", distance=42, config=c)
     dump_version(tmp_path, version, "first.py", scm_version=scm_version)
     lines = read("first.py").splitlines()
-    assert lines[3:] == [
-        "__version__ : str = version : str = '1.0.dev42'",
-        "__version_tuple__ : 'tuple[int | str, ...]' = \\",
-        "  version_tuple : 'tuple[int | str, ...]' = (1, 0, 'dev42')",
+    assert lines[-2:] == [
+        "__version__ = version = '1.0.dev42'  # type: str",
+        "__version_tuple__ = version_tuple = (1, 0, 'dev42')"
+        "  # type: tuple[int | str, ...]",
     ]
 
     version = "1.0.1+g4ac9d2c"
diff --git a/testing/test_functions.py b/testing/test_functions.py
index baf84d3..dfc22b6 100644
--- a/testing/test_functions.py
+++ b/testing/test_functions.py
@@ -1,5 +1,7 @@
 from __future__ import annotations
 
+import shutil
+import subprocess
 from pathlib import Path
 
 import pytest
@@ -108,6 +110,24 @@ def test_dump_version_modern(monkeypatch: pytest.MonkeyPatch, tmp_path: Path) ->
     assert target.read_text() == version
 
 
+def test_dump_version_on_old_python(tmp_path: Path) -> None:
+    python37 = shutil.which("python3.7")
+    if python37 is None:
+        pytest.skip("python3.7 not found")
+    from setuptools_scm._integration.dump_version import write_version_to_path
+
+    version = "1.2.3"
+    scm_version = meta(version, config=c)
+    write_version_to_path(
+        tmp_path / "VERSION.py", template=None, version=version, scm_version=scm_version
+    )
+    subprocess.run(
+        [python37, "-c", "import VERSION;print(VERSION.version)"],
+        cwd=tmp_path,
+        check=True,
+    )
+
+
 def test_has_command() -> None:
     with pytest.warns(RuntimeWarning, match="yadayada"):
         assert not has_command("yadayada_setuptools_aint_ne")