diff --git a/.appveyor/packages.yml b/.appveyor/packages.yml index 740b5e0ef..468b7594d 100644 --- a/.appveyor/packages.yml +++ b/.appveyor/packages.yml @@ -19,10 +19,6 @@ environment: - {PY_VER: "310", PY_ARCH: "64", APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019} - {PY_VER: "39", PY_ARCH: "32", APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019} - {PY_VER: "39", PY_ARCH: "64", APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019} - - {PY_VER: "38", PY_ARCH: "32", APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015} - - {PY_VER: "38", PY_ARCH: "64", APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015} - - {PY_VER: "37", PY_ARCH: "32", APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015} - - {PY_VER: "37", PY_ARCH: "64", APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015} WORKFLOW: packages @@ -41,17 +37,14 @@ environment: PERL5LIB: . # Select according to the service enabled - POSTGRES_DIR: C:\Program Files\PostgreSQL\9.6\ - - # The python used in the build process, not the one packages are built for - PYEXE: C:\Python36\python.exe + POSTGRES_DIR: C:\Program Files\PostgreSQL\13\ matrix: fast_finish: false services: # Note: if you change this service also change POSTGRES_DIR - - postgresql96 + - postgresql13 cache: # Rebuild cache if following file changes @@ -64,23 +57,23 @@ cache: # Repository gets cloned, Cache is restored install: - - "%PYEXE% scripts\\build\\appveyor.py install" + - "py scripts\\build\\appveyor.py install" # PostgreSQL server starts now build: "off" build_script: - - "%PYEXE% scripts\\build\\appveyor.py build_script" + - "py scripts\\build\\appveyor.py build_script" after_build: - - "%PYEXE% scripts\\build\\appveyor.py after_build" + - "py scripts\\build\\appveyor.py after_build" before_test: - - "%PYEXE% scripts\\build\\appveyor.py before_test" + - "py scripts\\build\\appveyor.py before_test" test_script: - - "%PYEXE% scripts\\build\\appveyor.py test_script" + - "py scripts\\build\\appveyor.py test_script" artifacts: - path: dist\psycopg2-*\*.whl diff --git a/.appveyor/tests.yml b/.appveyor/tests.yml index 0cf91dda4..f630877b5 100644 --- a/.appveyor/tests.yml +++ b/.appveyor/tests.yml @@ -14,10 +14,6 @@ environment: - {PY_VER: "310", PY_ARCH: "64", APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019} - {PY_VER: "39", PY_ARCH: "32", APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019} - {PY_VER: "39", PY_ARCH: "64", APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019} - - {PY_VER: "38", PY_ARCH: "32", APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015} - - {PY_VER: "38", PY_ARCH: "64", APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015} - - {PY_VER: "37", PY_ARCH: "32", APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015} - - {PY_VER: "37", PY_ARCH: "64", APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015} WORKFLOW: tests @@ -36,17 +32,14 @@ environment: PERL5LIB: . # Select according to the service enabled - POSTGRES_DIR: C:\Program Files\PostgreSQL\9.6\ - - # The python used in the build process, not the one packages are built for - PYEXE: C:\Python36\python.exe + POSTGRES_DIR: C:\Program Files\PostgreSQL\13\ matrix: fast_finish: false services: # Note: if you change this service also change POSTGRES_DIR - - postgresql96 + - postgresql13 cache: # Rebuild cache if following file changes @@ -59,23 +52,23 @@ cache: # Repository gets cloned, Cache is restored install: - - "%PYEXE% scripts\\build\\appveyor.py install" + - py scripts\\build\\appveyor.py install" # PostgreSQL server starts now build: "off" build_script: - - "%PYEXE% scripts\\build\\appveyor.py build_script" + - py scripts\\build\\appveyor.py build_script" after_build: - - "%PYEXE% scripts\\build\\appveyor.py after_build" + - py scripts\\build\\appveyor.py after_build" before_test: - - "%PYEXE% scripts\\build\\appveyor.py before_test" + - py scripts\\build\\appveyor.py before_test" test_script: - - "%PYEXE% scripts\\build\\appveyor.py test_script" + - py scripts\\build\\appveyor.py test_script" # vim: set ts=4 sts=4 sw=4: diff --git a/.github/workflows/packages.yml b/.github/workflows/packages.yml index f74cf8e7c..0eac1b100 100644 --- a/.github/workflows/packages.yml +++ b/.github/workflows/packages.yml @@ -27,6 +27,7 @@ jobs: - name: Upload artifacts uses: actions/upload-artifact@v4 with: + name: sdist-${{ matrix.package_name }} path: | dist/*.tar.gz @@ -64,7 +65,7 @@ jobs: matrix: platform: [manylinux, musllinux] arch: [x86_64, i686, aarch64, ppc64le] - pyver: [cp37, cp38, cp39, cp310, cp311, cp312] + pyver: [cp38, cp39, cp310, cp311, cp312, cp313] runs-on: ubuntu-latest steps: @@ -81,7 +82,7 @@ jobs: key: libpq-${{ env.LIBPQ_VERSION }}-${{ matrix.platform }}-${{ matrix.arch }} - name: Build wheels - uses: pypa/cibuildwheel@v2.16.2 + uses: pypa/cibuildwheel@v2.21.2 env: CIBW_MANYLINUX_X86_64_IMAGE: manylinux2014 CIBW_MANYLINUX_I686_IMAGE: manylinux2014 @@ -110,6 +111,7 @@ jobs: - uses: actions/upload-artifact@v4 with: + name: linux-${{matrix.pyver}}-${{matrix.platform}}_${{matrix.arch}} path: ./wheelhouse/*.whl services: @@ -128,7 +130,7 @@ jobs: build-macos: - runs-on: macos-latest + runs-on: macos-${{ matrix.macver }} if: true strategy: @@ -136,22 +138,37 @@ jobs: matrix: # These archs require an Apple M1 runner: [arm64, universal2] arch: [x86_64] - pyver: [cp37, cp38, cp39, cp310, cp311, cp312] + pyver: [cp38, cp39, cp310, cp311, cp312, cp313] + macver: ["12"] + include: + - arch: arm64 + pyver: cp310 + macver: "14" + - arch: arm64 + pyver: cp311 + macver: "14" + - arch: arm64 + pyver: cp312 + macver: "14" + - arch: arm64 + pyver: cp313 + macver: "14" steps: - name: Checkout repos uses: actions/checkout@v4 - name: Build wheels - uses: pypa/cibuildwheel@v2.16.2 + uses: pypa/cibuildwheel@v2.21.2 env: CIBW_BUILD: ${{matrix.pyver}}-macosx_${{matrix.arch}} - CIBW_ARCHS_MACOS: x86_64 + CIBW_ARCHS_MACOS: ${{matrix.arch}} CIBW_BEFORE_ALL_MACOS: ./scripts/build/wheel_macos_before_all.sh CIBW_TEST_COMMAND: >- export PYTHONPATH={project} && python -c "import tests; tests.unittest.main(defaultTest='tests.test_suite')" CIBW_ENVIRONMENT: >- + MACOSX_DEPLOYMENT_TARGET=${{ matrix.macver }}.0 PG_VERSION=16 PACKAGE_NAME=psycopg2-binary PSYCOPG2_TESTDB=postgres @@ -161,4 +178,5 @@ jobs: - name: Upload artifacts uses: actions/upload-artifact@v4 with: + name: macos-${{matrix.pyver}}-macos-${{matrix.macver}}_${{matrix.arch}} path: ./wheelhouse/*.whl diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 0554d8b4c..19baedffb 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -13,22 +13,20 @@ jobs: fail-fast: false matrix: include: - - {python: "3.7", postgres: "10"} - {python: "3.8", postgres: "12"} - {python: "3.9", postgres: "13"} - {python: "3.10", postgres: "14"} - {python: "3.11", postgres: "15"} - {python: "3.12", postgres: "16"} - - {python: "3.13-dev", postgres: "16"} + - {python: "3.13-dev", postgres: "17"} # Opposite extremes of the supported Py/PG range, other architecture - - {python: "3.7", postgres: "16", architecture: "x86"} - - {python: "3.8", postgres: "15", architecture: "x86"} - - {python: "3.9", postgres: "14", architecture: "x86"} - - {python: "3.10", postgres: "13", architecture: "x86"} - - {python: "3.11", postgres: "11", architecture: "x86"} - - {python: "3.12", postgres: "10", architecture: "x86"} - - {python: "3.13-dev", postgres: "10", architecture: "x86"} + - {python: "3.8", postgres: "17", architecture: "x86"} + - {python: "3.9", postgres: "16", architecture: "x86"} + - {python: "3.10", postgres: "15", architecture: "x86"} + - {python: "3.11", postgres: "14", architecture: "x86"} + - {python: "3.12", postgres: "13", architecture: "x86"} + - {python: "3.13-dev", postgres: "12", architecture: "x86"} env: PSYCOPG2_TESTDB: postgres diff --git a/NEWS b/NEWS index ce8c6aeab..4940a91d7 100644 --- a/NEWS +++ b/NEWS @@ -5,6 +5,7 @@ What's new in psycopg 2.9.10 (unreleased) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - Add support for Python 3.13. +- Drop support for Python 3.7. What's new in psycopg 2.9.9 diff --git a/doc/src/install.rst b/doc/src/install.rst index 00d693a03..0ff3f5d5e 100644 --- a/doc/src/install.rst +++ b/doc/src/install.rst @@ -131,8 +131,8 @@ The current `!psycopg2` implementation supports: .. NOTE: keep consistent with setup.py and the /features/ page. -- Python versions from 3.7 to 3.12 -- PostgreSQL server versions from 7.4 to 16 +- Python versions from 3.8 to 3.13 +- PostgreSQL server versions from 7.4 to 17 - PostgreSQL client library version from 9.1 .. note:: diff --git a/psycopg/python.h b/psycopg/python.h index 37de23165..f8c2c0aab 100644 --- a/psycopg/python.h +++ b/psycopg/python.h @@ -27,8 +27,8 @@ #ifndef PSYCOPG_PYTHON_H #define PSYCOPG_PYTHON_H 1 -#if PY_VERSION_HEX < 0x03070000 -#error "psycopg requires Python 3.7" +#if PY_VERSION_HEX < 0x03080000 +#error "psycopg requires Python 3.8" #endif #include diff --git a/scripts/build/appveyor.py b/scripts/build/appveyor.py index d5e444df4..6d97fa1e9 100755 --- a/scripts/build/appveyor.py +++ b/scripts/build/appveyor.py @@ -99,6 +99,7 @@ def configure_postgres(): Set up PostgreSQL config before the service starts. """ logger.info("Configuring Postgres") + opt.pg_data_dir.mkdir(parents=True, exist_ok=True) with (opt.pg_data_dir / 'postgresql.conf').open('a') as f: # allow > 1 prepared transactions for test cases print("max_prepared_transactions = 10", file=f) diff --git a/scripts/build/build_libpq.sh b/scripts/build/build_libpq.sh index 6c722336c..8a99fbe82 100755 --- a/scripts/build/build_libpq.sh +++ b/scripts/build/build_libpq.sh @@ -35,7 +35,7 @@ case "$ID" in alpine) apk upgrade - apk add --no-cache zlib-dev krb5-dev linux-pam-dev openldap-dev + apk add --no-cache zlib-dev krb5-dev linux-pam-dev openldap-dev openssl-dev ;; *) diff --git a/scripts/build/wheel_macos_before_all.sh b/scripts/build/wheel_macos_before_all.sh index 4aaee3f81..882b887fa 100755 --- a/scripts/build/wheel_macos_before_all.sh +++ b/scripts/build/wheel_macos_before_all.sh @@ -12,9 +12,10 @@ dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" prjdir="$( cd "${dir}/../.." && pwd )" brew install gnu-sed postgresql@${PG_VERSION} +brew link --overwrite postgresql@${PG_VERSION} # Start the database for testing -brew services start postgresql +brew services start postgresql@${PG_VERSION} # Wait for postgres to come up for i in $(seq 10 -1 0); do diff --git a/setup.py b/setup.py index 572d88756..be7af1228 100644 --- a/setup.py +++ b/setup.py @@ -52,7 +52,6 @@ License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL) Programming Language :: Python Programming Language :: Python :: 3 -Programming Language :: Python :: 3.7 Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 @@ -552,7 +551,7 @@ def is_py_64(): url="https://psycopg.org/", license="LGPL with exceptions", platforms=["any"], - python_requires='>=3.7', + python_requires='>=3.8', description=readme.split("\n")[0], long_description="\n".join(readme.split("\n")[2:]).lstrip(), classifiers=[x for x in classifiers.split("\n") if x], diff --git a/tox.ini b/tox.ini index ce450d3d1..c46872ddc 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist = {3.7,3.8,3.9,3.10,3.11,3.12,3.13} +envlist = {3.8,3.9,3.10,3.11,3.12,3.13} [testenv] commands = make check