diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index d6487b91713..1f1a4214a1f 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -28,7 +28,7 @@ jobs: strategy: matrix: os: [Ubuntu, macOS, Windows] - python-version: ["3.8", "3.9", "3.10", "3.11"] + python-version: ["3.8", "3.9", "3.10", "3.11", "3.12-dev"] include: - os: Ubuntu image: ubuntu-22.04 @@ -117,7 +117,8 @@ jobs: ref: refs/tags/${{ steps.poetry-plugin-export-version.outputs.version }} - name: Run pytest (poetry-plugin-export) - run: poetry run pytest -v poetry-plugin-export/tests/ + working-directory: ./poetry-plugin-export + run: poetry run -C .. pytest -v - name: Check for clean working tree run: | diff --git a/docs/configuration.md b/docs/configuration.md index 43be234a587..1a0199428af 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -375,6 +375,12 @@ If set to `true` the `--no-setuptools` parameter is passed to `virtualenv` on cr means when a new virtual environment is created, `setuptools` will not be installed in the environment. Poetry, for its internal operations, does not require `setuptools` and this can safely be set to `true`. +For environments using python 3.12 or later, `virtualenv` defaults to not +installing `setuptools` when creating a virtual environment. +In such environments this poetry configuration option therefore has no effect: +`setuptools` is not installed either way. +If your project relies on `setuptools`, you should declare it as a dependency. + {{% warning %}} Some development tools like IDEs, make an assumption that `setuptools` (and other) packages are always present and available within a virtual environment. This can cause some features in these tools to not work as expected. diff --git a/poetry.lock b/poetry.lock index 7452401e7cf..dc334d61ddb 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1682,4 +1682,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "12ff5da9d9bc41c06665f74354ba6f2a4383ea54665e9aa873d983a8b105c4cf" +content-hash = "0d812f44af5236a0c19333ffc633476118ce239229dc64e49b1b8c052e215a5b" diff --git a/pyproject.toml b/pyproject.toml index 73e31be5de7..0536853ed00 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -57,7 +57,7 @@ tomli = { version = "^2.0.1", python = "<3.11" } tomlkit = ">=0.11.4,<1.0.0" # trove-classifiers uses calver, so version is unclamped trove-classifiers = ">=2022.5.19" -virtualenv = "^20.22.0" +virtualenv = "^20.23.0" xattr = { version = "^0.10.0", markers = "sys_platform == 'darwin'" } [tool.poetry.group.dev.dependencies] diff --git a/tests/utils/test_env.py b/tests/utils/test_env.py index 3845a7e1177..688fa98c73d 100644 --- a/tests/utils/test_env.py +++ b/tests/utils/test_env.py @@ -1513,6 +1513,14 @@ def test_env_no_pip( if package.name != "sqlite3" } + # For python >= 3.12, virtualenv defaults to "--no-setuptools" and "--no-wheel" + # behaviour, so setting these values to False becomes meaningless. + if sys.version_info >= (3, 12): + if not flags.get("no-setuptools", True): + packages.discard("setuptools") + if not flags.get("no-wheel", True): + packages.discard("wheel") + assert installed_packages == packages