Repository: shapely/shapely (language: python)

Issue:
Move static metadata from setup.py to pyproject.toml, add sdist check
This follows on from #1376 to move static metadata from `setup.py` to `pyproject.toml` as is supported by [setuptools](https://setuptools.pypa.io/en/latest/userguide/pyproject_config.html) and described by [PEP 621](https://peps.python.org/pep-0621/). Note that with `python -m build` a message is shown:
> Support for `[tool.setuptools]` in `pyproject.toml` is still *beta*.

This also removes "wheel" from build system requirements, since it is exposed automatically by setuptools. More on that here: https://github.com/pypa/setuptools/commit/f7d30a9529378cf69054b5176249e5457aaf640a

Furthermore, after building the source distribution, use `twine check` to ensure that it looks adequate by PyPA.
Drop Python 3.6 supported (end of life Dec 2021)
The security-only support for Python 3.6 ends in Dec 2021, after Python 3.6 will be end-of-life (see [PEP 494](https://www.python.org/dev/peps/pep-0494/)). With 1.8 released as a stable version supporting Python 3.6, would it be time to drop Python 3.6 support, looking forward to the Shapely 2.0 release? Especially as Python 3.10 support is ramped up.


Discussion / hints:

I'm in two minds on when to drop Python 3.6 support, similar to @caspervdw's [comment](https://github.com/pygeos/pygeos/issues/414#issuecomment-954986554). On one end, I'd like to see a smaller CI footprint and would like to align the project closer to [NEP 29](https://numpy.org/neps/nep-0029-deprecation_policy.html) (although NumPy is py38+). But on the other end, there is not much extra burden in maintaining older Python3 compatibility. Lots of folks, including myself, are still using Ubuntu 18.04 (with EOL April 2023), which natively supports Python 3.6, NumPy 1.13 and GEOS 3.6.

Any other thoughts on this? Does anyone plan to use shapely-2.0 with Python 3.6 for at least another year? Are there any planned development features that can only be implemented with Python 3.7 or later?
I don't think we have much maintenance burden in supporting Python 3.6 for now (I don't recall an issue or difficulty while contributing related to this recently). So from that point of view, I don't feel strongly about dropping support sooner rather than later. And if there are people (even from the core team) still using it, that seems as a good reason to keep it for now.

I think we will mostly "miss out" on new features by keeping older Python support. But with Python 3.6 we eg already have f-strings and ordered dicts. And I don't directly see features in Pyton 3.7 I would really miss (we don't yet use type annotations anyway, and I don't think we have use for dataclasses)


PR #1426 to move static project metadata to `pyproject.toml` ([PEP 621](https://peps.python.org/pep-0621/)) is blocked by Python 3.6 (because setuptools 61+ support starts from Python 3.7). This seems like a good reason to drop Python 3.6 for Shapely 2.0.

Fix patch:
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index bde0ab879..d576280bf 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -109,7 +109,7 @@ jobs:
         uses: pypa/cibuildwheel@v2.3.0
         env:
           CIBW_ARCHS: ${{ matrix.arch }}
-          CIBW_SKIP: pp* *musllinux* cp310-manylinux_i686
+          CIBW_SKIP: cp36-* pp* *musllinux* cp310-manylinux_i686
           CIBW_ENVIRONMENT_LINUX:
             GEOS_VERSION=${{ env.GEOS_VERSION }}
             GEOS_INSTALL=/host${{ runner.temp }}/geos-${{ env.GEOS_VERSION }}
diff --git a/README.rst b/README.rst
index 4f013b9b1..659fde0f7 100644
--- a/README.rst
+++ b/README.rst
@@ -111,9 +111,9 @@ Requirements
 
 Shapely 2.0 requires
 
-* Python >=3.6
+* Python >=3.7
 * GEOS >=3.5
-* NumPy >=1.13
+* NumPy >=1.14
 
 Installing Shapely
 ==================
diff --git a/setup.py b/setup.py
index e11a14767..c98c8f180 100644
--- a/setup.py
+++ b/setup.py
@@ -226,8 +226,8 @@ def finalize_options(self):
     author="Sean Gillies",
     maintainer="Shapely contributors",
     packages=find_packages(include=["shapely", "shapely.*"]),
-    install_requires=["numpy>=1.13"],
-    python_requires=">=3.6",
+    install_requires=["numpy>=1.14"],
+    python_requires=">=3.7",
     extras_require={
         "test": ["pytest"],
         "docs": ["sphinx", "numpydoc"],
@@ -244,7 +244,6 @@ def finalize_options(self):
         "Operating System :: MacOS",
         "Operating System :: Microsoft :: Windows",
         "Programming Language :: Python :: 3",
-        "Programming Language :: Python :: 3.6",
         "Programming Language :: Python :: 3.7",
         "Programming Language :: Python :: 3.8",
         "Programming Language :: Python :: 3.9",


Test patch:
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index 3f97c4041..d91839a5e 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -17,9 +17,9 @@ jobs:
         geos: [3.6.5, 3.7.5, 3.8.3, 3.9.3, 3.10.3, 3.11.0, main]
         include:
           # 2017
-          - python: 3.6
+          - python: 3.7  # 3.6 is dropped
             geos: 3.6.5
-            numpy: 1.13.3
+            numpy: 1.14.6
           # 2018
           - python: 3.7
             geos: 3.7.5
@@ -49,9 +49,9 @@ jobs:
           # enable two 32-bit windows builds:
           - os: windows-2019
             architecture: x86
-            python: 3.6
-            geos: 3.6.5
-            numpy: 1.13.3
+            python: 3.7
+            geos: 3.7.5
+            numpy: 1.15.4
           - os: windows-2019
             architecture: x86
             python: 3.9