diff --git a/.github/FUNDING.yml b/.github/FUNDING.yaml
similarity index 100%
rename from .github/FUNDING.yml
rename to .github/FUNDING.yaml
diff --git a/.github/dependabot.yml b/.github/dependabot.yaml
similarity index 76%
rename from .github/dependabot.yml
rename to .github/dependabot.yaml
index 123014908..5e4251f20 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yaml
@@ -4,3 +4,5 @@ updates:
directory: "/"
schedule:
interval: "daily"
+ cooldown:
+ default-days: 7
diff --git a/.github/release.yml b/.github/release.yaml
similarity index 100%
rename from .github/release.yml
rename to .github/release.yaml
diff --git a/.github/workflows/check.yaml b/.github/workflows/check.yaml
index c6e6ba93b..bab7c6f92 100644
--- a/.github/workflows/check.yaml
+++ b/.github/workflows/check.yaml
@@ -17,6 +17,8 @@ jobs:
if: github.event_name != 'schedule' || github.repository_owner == 'pypa'
runs-on: ${{ matrix.os }}
timeout-minutes: 40
+ permissions:
+ contents: read
strategy:
fail-fast: false
matrix:
@@ -35,11 +37,15 @@ jobs:
- pypy-3.9
- pypy-3.8
- graalpy-24.1
+ - rp
os:
- ubuntu-24.04
- macos-15
- windows-2025
include:
+ - { os: macos-15, py: "brew@3.14" }
+ - { os: macos-15, py: "brew@3.13" }
+ - { os: macos-15, py: "brew@3.12" }
- { os: macos-15, py: "brew@3.11" }
- { os: macos-15, py: "brew@3.10" }
- { os: macos-15, py: "brew@3.9" }
@@ -50,34 +56,58 @@ jobs:
- { os: windows-2025, py: "pypy-3.8" }
steps:
- name: 🚀 Install uv
- uses: astral-sh/setup-uv@v4
+ uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7
- name: 📥 Checkout code
- uses: actions/checkout@v4
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
fetch-depth: 0
+ persist-credentials: false
- name: 🏷️ Fetch upstream tags for versioning
shell: bash
run: |
git fetch --force --tags https://github.com/pypa/virtualenv.git
- name: 🐍 Setup Python for tox
- uses: actions/setup-python@v5
+ uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
with:
python-version: "3.14"
- name: 📦 Install tox with this virtualenv
shell: bash
run: |
- if [[ "${{ matrix.py }}" == "3.13t" || "${{ matrix.py }}" == "3.14t" ]]; then
- uv tool install --no-managed-python --python 3.14 "tox>=4.32" --with .
+ if [[ "${{ matrix.py }}" == "3.13t" || "${{ matrix.py }}" == "3.14t" || "${{ matrix.py }}" == "rp" ]]; then
+ uv tool install --no-managed-python --python 3.14 "tox>=4.45" --with .
else
- uv tool install --no-managed-python --python 3.14 "tox>=4.32" --with tox-uv --with .
+ uv tool install --no-managed-python --python 3.14 "tox>=4.45" --with tox-uv --with .
fi
- name: 🐍 Setup Python for test ${{ matrix.py }}
- uses: actions/setup-python@v5
- if: ${{ !startsWith(matrix.py, 'brew@') }}
+ uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
+ if: ${{ !startsWith(matrix.py, 'brew@') && matrix.py != 'rp' }}
with:
python-version: ${{ matrix.py }}
+ - name: 🦀 Setup RustPython
+ if: matrix.py == 'rp'
+ shell: bash
+ env:
+ GH_TOKEN: ${{ github.token }}
+ run: |
+ tag=$(gh release list --repo RustPython/RustPython --limit 1 --json tagName -q '.[0].tagName')
+ if [ "${{ runner.os }}" = "Linux" ]; then
+ asset="rustpython-release-Linux-x86_64-unknown-linux-gnu"
+ elif [ "${{ runner.os }}" = "macOS" ]; then
+ asset="rustpython-release-macOS-aarch64-apple-darwin"
+ elif [ "${{ runner.os }}" = "Windows" ]; then
+ asset="rustpython-release-Windows-x86_64-pc-windows-msvc.exe"
+ fi
+ gh release download "$tag" --repo RustPython/RustPython --pattern "$asset" --dir "$RUNNER_TEMP"
+ if [ "${{ runner.os }}" = "Windows" ]; then
+ cp "$RUNNER_TEMP/$asset" "/c/ProgramData/chocolatey/bin/rustpython.exe"
+ else
+ chmod +x "$RUNNER_TEMP/$asset"
+ sudo mv "$RUNNER_TEMP/$asset" /usr/local/bin/rustpython
+ fi
- name: 🛠️ Install OS dependencies
shell: bash
+ env:
+ GH_TOKEN: ${{ github.token }}
run: |
if [ "${{ runner.os }}" = "Linux" ]; then
sudo apt-get install -y software-properties-common
@@ -95,7 +125,10 @@ jobs:
fi
brew install fish tcsh nushell || brew upgrade fish tcsh nushell
elif [ "${{ runner.os }}" = "Windows" ]; then
- choco install nushell
+ nu_version=$(gh release view --repo nushell/nushell --json tagName -q .tagName)
+ gh release download "$nu_version" --repo nushell/nushell --pattern "*-x86_64-pc-windows-msvc.zip" --dir "$RUNNER_TEMP"
+ 7z x "$RUNNER_TEMP/nu-${nu_version#v}-x86_64-pc-windows-msvc.zip" -o"$RUNNER_TEMP/nushell" -y
+ cp "$RUNNER_TEMP/nushell/nu.exe" "/c/ProgramData/chocolatey/bin/nu.exe"
fi
- name: 🧬 Pick environment to run
shell: bash
@@ -103,7 +136,7 @@ jobs:
py="${{ matrix.py }}"
if [[ "$py" == brew@* ]]; then
brew_version="${py#brew@}"
- echo "TOX_DISCOVER=/opt/homebrew/bin/python${brew_version}" >> "$GITHUB_ENV"
+ echo "UV_PYTHON=/opt/homebrew/bin/python${brew_version}" >> "$GITHUB_ENV"
py="$brew_version"
fi
[[ "$py" == graalpy-* ]] && py="graalpy"
@@ -122,6 +155,8 @@ jobs:
name: 🔎 check ${{ matrix.tox_env }} - ${{ matrix.os }}
if: github.event_name != 'schedule' || github.repository_owner == 'pypa'
runs-on: ${{ matrix.os }}
+ permissions:
+ contents: read
strategy:
fail-fast: false
matrix:
@@ -132,20 +167,25 @@ jobs:
- dev
- docs
- readme
+ - type
+ - type-3.8
- upgrade
- zipapp
exclude:
- - { os: windows-2025, tox_env: readme }
- { os: windows-2025, tox_env: docs }
+ - { os: windows-2025, tox_env: readme }
+ - { os: windows-2025, tox_env: type }
+ - { os: windows-2025, tox_env: type-3.8 }
steps:
- name: 🚀 Install uv
- uses: astral-sh/setup-uv@v4
+ uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7
- name: 📦 Install tox
- run: uv tool install --python-preference only-managed --python 3.14 "tox>=4.32" --with tox-uv
+ run: uv tool install --python-preference only-managed --python 3.14 "tox>=4.45" --with tox-uv
- name: 📥 Checkout code
- uses: actions/checkout@v4
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
fetch-depth: 0
+ persist-credentials: false
- name: 🏷️ Fetch upstream tags for versioning
shell: bash
run: |
@@ -154,3 +194,5 @@ jobs:
run: tox run -vv --notest --skip-missing-interpreters false -e ${{ matrix.tox_env }}
- name: 🏃 Run check for ${{ matrix.tox_env }}
run: tox run --skip-pkg-install -e ${{ matrix.tox_env }}
+ env:
+ UPGRADE_ADVISORY: ${{ matrix.tox_env == 'upgrade' && '1' || '' }}
diff --git a/.github/workflows/pre-release.yaml b/.github/workflows/pre-release.yaml
new file mode 100644
index 000000000..20c08fa34
--- /dev/null
+++ b/.github/workflows/pre-release.yaml
@@ -0,0 +1,45 @@
+name: Pre-release
+on:
+ workflow_dispatch:
+ inputs:
+ bump:
+ description: "Version bump type"
+ required: true
+ type: choice
+ options:
+ - auto
+ - major
+ - minor
+ - patch
+ default: auto
+
+jobs:
+ pre-release:
+ runs-on: ubuntu-24.04
+ environment: release
+ permissions:
+ contents: write
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
+ with:
+ fetch-depth: 0
+ token: ${{ secrets.GH_RELEASE_TOKEN }}
+ persist-credentials: false
+ - name: Install the latest version of uv
+ uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7
+ with:
+ enable-cache: true
+ cache-dependency-glob: "pyproject.toml"
+ github-token: ${{ secrets.GITHUB_TOKEN }}
+ - name: Set up Python
+ run: uv python install 3.14
+ - name: Configure git identity from token owner
+ env:
+ GH_TOKEN: ${{ secrets.GH_RELEASE_TOKEN }}
+ run: |
+ user_info=$(gh api /user)
+ git config user.name "$(echo "$user_info" | jq -r '.name // .login')"
+ git config user.email "$(echo "$user_info" | jq -r '.id')+$(echo "$user_info" | jq -r '.login')@users.noreply.github.com"
+ - name: Generate changelog, commit, tag, and push
+ run: uv tool run --with tox-uv tox r -e release -- --version "${{ inputs.bump }}"
diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml
index def30f5d9..d5eb557a4 100644
--- a/.github/workflows/release.yaml
+++ b/.github/workflows/release.yaml
@@ -1,7 +1,7 @@
-name: Release to PyPI
+name: Release
on:
push:
- tags: ["*"]
+ tags: ["*.*.*"]
env:
dists-artifact-name: python-package-distributions
@@ -9,41 +9,114 @@ env:
jobs:
build:
runs-on: ubuntu-24.04
+ permissions:
+ contents: read
steps:
- - name: 📥 Checkout code
- uses: actions/checkout@v4
+ - name: Checkout code
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
fetch-depth: 0
- - name: 🚀 Install the latest version of uv
- uses: astral-sh/setup-uv@v4
+ persist-credentials: false
+ - name: Install the latest version of uv
+ uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7
with:
- enable-cache: true
+ enable-cache: false
cache-dependency-glob: "pyproject.toml"
github-token: ${{ secrets.GITHUB_TOKEN }}
- - name: 📦 Build package
+ - name: Set up Python
+ run: uv python install 3.14
+ - name: Build sdist and wheel
run: uv build --python 3.14 --python-preference only-managed --sdist --wheel . --out-dir dist
- - name: 📦 Store the distribution packages
- uses: actions/upload-artifact@v4
+ - name: Build zipapp
+ run: uv tool run --with tox-uv tox r -e zipapp
+ - name: Store the distribution packages
+ uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7
with:
name: ${{ env.dists-artifact-name }}
path: dist/*
+ - name: Store the zipapp
+ uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7
+ with:
+ name: virtualenv-zipapp
+ path: virtualenv.pyz
- release:
- needs:
- - build
+ publish:
+ needs: build
runs-on: ubuntu-24.04
environment:
name: release
url: https://pypi.org/project/virtualenv/${{ github.ref_name }}
permissions:
+ contents: write
id-token: write
steps:
- - name: 📥 Download all the dists
- uses: actions/download-artifact@v4
+ - name: Download all the dists
+ uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
with:
name: ${{ env.dists-artifact-name }}
path: dist/
- - name: 🚀 Publish to PyPI
- uses: pypa/gh-action-pypi-publish@v1.13.0
+ - name: Publish to PyPI
+ uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0
with:
attestations: true
+ - name: Download the zipapp
+ uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
+ with:
+ name: virtualenv-zipapp
+ - name: Create GitHub Release
+ run: gh release create "$GITHUB_REF_NAME" virtualenv.pyz --generate-notes
+ env:
+ GH_TOKEN: ${{ github.token }}
+ - name: Update get-virtualenv
+ env:
+ GH_TOKEN: ${{ secrets.GH_RELEASE_TOKEN }}
+ run: |
+ git clone https://x-access-token:${GH_TOKEN}@github.com/pypa/get-virtualenv.git
+ cp virtualenv.pyz get-virtualenv/public/virtualenv.pyz
+ echo -n "${GITHUB_REF_NAME}" > get-virtualenv/public/version.txt
+ cd get-virtualenv
+ user_info=$(gh api /user)
+ git config user.name "$(echo "$user_info" | jq -r '.name // .login')"
+ git config user.email "$(echo "$user_info" | jq -r '.id')+$(echo "$user_info" | jq -r '.login')@users.noreply.github.com"
+ git add public/virtualenv.pyz public/version.txt
+ git commit -m "update virtualenv to ${GITHUB_REF_NAME}"
+ git push origin main
+
+ rollback:
+ if: ${{ always() && needs.build.result == 'success' && needs.publish.result == 'failure' }}
+ needs:
+ - build
+ - publish
+ runs-on: ubuntu-24.04
+ environment: release
+ permissions:
+ contents: write
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
+ with:
+ fetch-depth: 0
+ token: ${{ secrets.GH_RELEASE_TOKEN }} # zizmor: ignore[artipacked]
+ - name: Delete GitHub Release if created
+ env:
+ GH_TOKEN: ${{ secrets.GH_RELEASE_TOKEN }}
+ run: gh release delete "${GITHUB_REF_NAME}" --yes --cleanup-tag || true
+ - name: Delete remote tag
+ run: git push origin --delete "${GITHUB_REF_NAME}" || true
+ - name: Reset release commit on main
+ run: |
+ git checkout main
+ git reset --hard HEAD~1
+ git push origin main --force
+ - name: Rollback get-virtualenv if updated
+ env:
+ GH_TOKEN: ${{ secrets.GH_RELEASE_TOKEN }}
+ run: |
+ git clone https://x-access-token:${GH_TOKEN}@github.com/pypa/get-virtualenv.git
+ cd get-virtualenv
+ current_version=$(cat public/version.txt)
+ if [ "$current_version" = "${GITHUB_REF_NAME}" ]; then
+ gh release delete "$current_version" --yes --cleanup-tag || true
+ git reset --hard HEAD~1
+ git push origin main --force
+ fi
diff --git a/.github/workflows/upgrade.yaml b/.github/workflows/upgrade.yaml
new file mode 100644
index 000000000..29c49ade2
--- /dev/null
+++ b/.github/workflows/upgrade.yaml
@@ -0,0 +1,97 @@
+name: Upgrade embedded dependencies
+on:
+ schedule:
+ - cron: "0 10 * * *" # daily at 10:00 UTC
+ workflow_dispatch:
+
+permissions:
+ contents: read
+
+jobs:
+ upgrade:
+ name: Upgrade embedded pip/setuptools/wheel
+ if: github.repository_owner == 'pypa'
+ runs-on: ubuntu-24.04
+ environment: upgrade
+ permissions:
+ contents: write
+ pull-requests: write
+ steps:
+ - name: Install uv
+ uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7
+ - name: Install tox
+ run: uv tool install --python-preference only-managed --python 3.14 "tox>=4.32" --with tox-uv
+ - name: Checkout code
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
+ with:
+ fetch-depth: 0
+ ssh-key: ${{ secrets.DEPLOY_KEY }} # zizmor: ignore[artipacked]
+ - name: Fetch upstream tags for versioning
+ run: git fetch --force --tags https://github.com/pypa/virtualenv.git
+ - name: Run upgrade
+ id: upgrade
+ env:
+ UPGRADE_ADVISORY: "1"
+ run: |
+ tox run -e upgrade
+ if [ -n "$(git diff --name-only)" ]; then
+ echo "changed=true" >> "$GITHUB_OUTPUT"
+ echo "### Embedded dependency changes" >> "$GITHUB_STEP_SUMMARY"
+ git diff --stat >> "$GITHUB_STEP_SUMMARY"
+ else
+ echo "changed=false" >> "$GITHUB_OUTPUT"
+ echo "### All embedded dependencies are up to date" >> "$GITHUB_STEP_SUMMARY"
+ fi
+ - name: Check PyPI release age
+ if: steps.upgrade.outputs.changed == 'true'
+ id: age-check
+ run: |
+ cutoff=$(( $(date +%s) - 7 * 24 * 3600 ))
+ too_new=false
+ for whl in $(git diff --name-only -- 'src/virtualenv/seed/wheels/embed/*.whl'); do
+ pkg=$(basename "$whl" | cut -d- -f1)
+ version=$(basename "$whl" | cut -d- -f2)
+ upload_time=$(curl -sf "https://pypi.org/pypi/${pkg}/${version}/json" | jq -r '.urls[0].upload_time_iso_8601 // empty')
+ if [ -z "$upload_time" ]; then
+ echo "::warning::Could not fetch release date for ${pkg}==${version}"
+ continue
+ fi
+ release_epoch=$(date -d "$upload_time" +%s)
+ if [ "$release_epoch" -gt "$cutoff" ]; then
+ echo "::notice::${pkg}==${version} released less than 7 days ago (${upload_time})"
+ too_new=true
+ fi
+ done
+ if [ "$too_new" = "true" ]; then
+ echo "skip=true" >> "$GITHUB_OUTPUT"
+ echo "### Skipped — some packages released less than 7 days ago" >> "$GITHUB_STEP_SUMMARY"
+ else
+ echo "skip=false" >> "$GITHUB_OUTPUT"
+ fi
+ - name: Create Pull Request
+ if: steps.upgrade.outputs.changed == 'true' && steps.age-check.outputs.skip != 'true'
+ id: cpr
+ uses: peter-evans/create-pull-request@c0f553fe549906ede9cf27b5156039d195d2ece0 # v8
+ with:
+ commit-message: "Upgrade embedded dependencies"
+ branch: auto/upgrade-embedded-deps
+ delete-branch: true
+ title: "Upgrade embedded pip/setuptools/wheel"
+ body: |
+ Automated upgrade of embedded pip, setuptools, and wheel dependencies.
+
+ This PR was created automatically by the [upgrade workflow](https://github.com/${{ github.repository }}/actions/workflows/upgrade.yaml).
+ labels: |
+ dependencies
+ - name: Rename changelog with PR number
+ if: steps.cpr.outputs.pull-request-number
+ run: |
+ pr_number="${STEPS_CPR_OUTPUTS_PULL_REQUEST_NUMBER}"
+ git fetch origin auto/upgrade-embedded-deps
+ git checkout auto/upgrade-embedded-deps
+ mv docs/changelog/u.bugfix.rst "docs/changelog/${pr_number}.bugfix.rst"
+ git add docs/changelog/
+ git commit -m "Rename changelog to ${pr_number}.bugfix.rst"
+ git push
+ env:
+ STEPS_CPR_OUTPUTS_PULL_REQUEST_NUMBER: ${{ steps.cpr.outputs.pull-request-number }}
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 7fa5d3484..41d5512fd 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -5,26 +5,25 @@ repos:
- id: end-of-file-fixer
- id: trailing-whitespace
- repo: https://github.com/python-jsonschema/check-jsonschema
- rev: 0.36.1
+ rev: 0.37.1
hooks:
- id: check-github-workflows
args: ["--verbose"]
- repo: https://github.com/codespell-project/codespell
- rev: v2.4.1
+ rev: v2.4.2
hooks:
- id: codespell
args: ["--write-changes"]
- - repo: https://github.com/tox-dev/tox-ini-fmt
- rev: "1.7.1"
+ - repo: https://github.com/tox-dev/tox-toml-fmt
+ rev: "v1.9.1"
hooks:
- - id: tox-ini-fmt
- args: ["-p", "fix"]
+ - id: tox-toml-fmt
- repo: https://github.com/tox-dev/pyproject-fmt
- rev: "v2.12.1"
+ rev: "v2.20.0"
hooks:
- id: pyproject-fmt
- repo: https://github.com/astral-sh/ruff-pre-commit
- rev: "v0.14.14"
+ rev: "v0.15.8"
hooks:
- id: ruff-format
- id: ruff
@@ -36,6 +35,16 @@ repos:
additional_dependencies:
- prettier@3.3.3
- "@prettier/plugin-xml@3.4.1"
+ - repo: https://github.com/LilSpazJoekp/docstrfmt
+ rev: v2.0.2
+ hooks:
+ - id: docstrfmt
+ args: ["-l", "120"]
+ additional_dependencies: ["sphinx>=9.1"]
+ - repo: https://github.com/zizmorcore/zizmor-pre-commit
+ rev: v1.23.1
+ hooks:
+ - id: zizmor
- repo: meta
hooks:
- id: check-hooks-apply
diff --git a/.readthedocs.yml b/.readthedocs.yml
index ab3011302..60e9a43d0 100644
--- a/.readthedocs.yml
+++ b/.readthedocs.yml
@@ -1,15 +1,8 @@
version: 2
build:
- os: ubuntu-22.04
- tools:
- python: "3"
-python:
- install:
- - method: pip
- path: .
- extra_requirements:
- - docs
-sphinx:
- builder: html
- configuration: docs/conf.py
- fail_on_warning: true
+ os: ubuntu-lts-latest
+ tools: {}
+ commands:
+ - curl -LsSf https://astral.sh/uv/install.sh | sh
+ - ~/.local/bin/uv tool install tox --with tox-uv -p 3.14 --managed-python
+ - ~/.local/bin/tox run -e docs --
diff --git a/docs/_static/rtd-search.js b/docs/_static/rtd-search.js
new file mode 100644
index 000000000..133e1e31c
--- /dev/null
+++ b/docs/_static/rtd-search.js
@@ -0,0 +1,11 @@
+document.addEventListener("DOMContentLoaded", () => {
+ const searchInput = document.querySelector(
+ ".sidebar-search input[type='search']",
+ );
+ if (searchInput) {
+ searchInput.addEventListener("focus", () => {
+ document.dispatchEvent(new CustomEvent("readthedocs-search-show"));
+ searchInput.blur();
+ });
+ }
+});
diff --git a/docs/_static/virtualenv.png b/docs/_static/virtualenv.png
new file mode 100644
index 000000000..1f729837d
Binary files /dev/null and b/docs/_static/virtualenv.png differ
diff --git a/docs/_static/virtualenv.svg b/docs/_static/virtualenv.svg
new file mode 100644
index 000000000..090396002
--- /dev/null
+++ b/docs/_static/virtualenv.svg
@@ -0,0 +1,30 @@
+
diff --git a/docs/changelog.rst b/docs/changelog.rst
index d2d3f109b..67737dbab 100644
--- a/docs/changelog.rst
+++ b/docs/changelog.rst
@@ -1,1077 +1,1422 @@
-Release History
-===============
+#################
+ Release History
+#################
-.. include:: _draft.rst
+.. towncrier-draft-entries:: [UNRELEASED DRAFT]
.. towncrier release notes start
-v20.36.1 (2026-01-09)
----------------------
+**********************
+ v21.2.0 (2026-03-09)
+**********************
+
+Features - 21.2.0
+=================
+
+- Update embed wheel generator (``tasks/upgrade_wheels.py``) to include type annotations in generated output - by
+ :user:`rahuldevikar`. (:issue:`3075`)
+
+Bugfixes - 21.2.0
+=================
+
+- Pass ``--without-scm-ignore-files`` to subprocess venv on Python 3.13+ so virtualenv controls ``.gitignore`` creation,
+ fixing flaky ``test_create_no_seed`` and ``--no-vcs-ignore`` being ignored in subprocess path - by
+ :user:`gaborbernat`. (:issue:`3089`)
+- Use ``BASH_SOURCE[0]`` instead of ``$0`` in the bash activate script relocation fallback, fixing incorrect ``PATH``
+ when sourcing the activate script from a different directory - by :user:`gaborbernat`. (:issue:`3090`)
+
+**********************
+ v21.1.0 (2026-02-27)
+**********************
+
+Features - 21.1.0
+=================
+
+- Add comprehensive type annotations across the entire codebase and ship a PEP 561 ``py.typed`` marker so downstream
+ consumers and type checkers recognize virtualenv as an inline-typed package - by :user:`rahuldevikar`. (:issue:`3075`)
+
+**********************
+ v21.0.0 (2026-02-25)
+**********************
+
+Deprecations and Removals - 21.0.0
+==================================
+
+- The Python discovery logic has been extracted into a standalone ``python-discovery`` package on PyPI (`documentation
+ `_) and is now consumed as a dependency. If you previously imported
+ discovery internals directly (e.g. ``from virtualenv.discovery.py_info import PythonInfo``), switch to ``from
+ python_discovery import PythonInfo``. Backward-compatibility re-export shims are provided at
+ ``virtualenv.discovery.py_info``, ``virtualenv.discovery.py_spec``, and ``virtualenv.discovery.cached_py_info``,
+ however these are considered unsupported and may be removed in a future release - by :user:`gaborbernat`.
+ (:issue:`3070`)
+
+***********************
+ v20.39.1 (2026-02-25)
+***********************
+
+Features - 20.39.1
+==================
+
+- Add support for creating virtual environments with RustPython - by :user:`elmjag`. (:issue:`3010`)
+
+***********************
+ v20.39.0 (2026-02-23)
+***********************
+
+Features - 20.39.0
+==================
+
+- Automatically resolve version manager shims (pyenv, mise, asdf) to the real Python binary during discovery, preventing
+ incorrect interpreter selection when shims are on ``PATH`` - by :user:`gaborbernat`. (:issue:`3049`)
+- Add architecture (ISA) awareness to Python discovery — users can now specify a CPU architecture suffix in the
+ ``--python`` spec string (e.g. ``cpython3.12-64-arm64``) to distinguish between interpreters that share the same
+ version and bitness but target different architectures. Uses ``sysconfig.get_platform()`` as the data source, with
+ cross-platform normalization (``amd64`` ↔ ``x86_64``, ``aarch64`` ↔ ``arm64``). Omitting the suffix preserves existing
+ behavior - by :user:`rahuldevikar`. (:issue:`3059`)
+
+***********************
+ v20.38.0 (2026-02-19)
+***********************
+
+Features - 20.38.0
+==================
+
+- Store app data (pip/setuptools/wheel caches) under the OS cache directory (``platformdirs.user_cache_dir``) instead of
+ the data directory (``platformdirs.user_data_dir``). Existing app data at the old location is automatically migrated
+ on first use. This ensures cached files that can be redownloaded are placed in the standard cache location (e.g.
+ ``~/.cache`` on Linux, ``~/Library/Caches`` on macOS) where they are excluded from backups and can be cleaned by
+ system tools - by :user:`rahuldevikar`. (:issue:`1884`) (:issue:`1884`)
+- Add ``PKG_CONFIG_PATH`` environment variable support to all activation scripts (Bash, Batch, PowerShell, Fish, C
+ Shell, Nushell, and Python). The virtualenv's ``lib/pkgconfig`` directory is now automatically prepended to
+ ``PKG_CONFIG_PATH`` on activation and restored on deactivation, enabling packages that use ``pkg-config`` during
+ build/install to find their configuration files - by :user:`rahuldevikar`. (:issue:`2637`)
+- Upgrade embedded pip to ``26.0.1`` from ``25.3`` and setuptools to ``82.0.0``, ``75.3.4`` from ``75.3.2``, ``80.9.0``
+ - by :user:`rahuldevikar`. (:issue:`3027`)
+- Replace ``ty: ignore`` comments with proper type narrowing using assertions and explicit None checks - by
+ :user:`rahuldevikar`. (:issue:`3029`)
+
+Bugfixes - 20.38.0
+==================
+
+- Exclude pywin32 DLLs (``pywintypes*.dll``, ``pythoncom*.dll``) from being copied to the Scripts directory during
+ virtualenv creation on Windows. This fixes compatibility issues with pywin32, which expects its DLLs to be installed
+ in ``site-packages/pywin32_system32`` by its own post-install script - by :user:`rahuldevikar`. (:issue:`2662`)
+- Preserve symlinks in ``pyvenv.cfg`` paths to match ``venv`` behavior. Use ``os.path.abspath()`` instead of
+ ``os.path.realpath()`` to normalize paths without resolving symlinks, fixing issues with Python installations accessed
+ via symlinked directories (common in network-mounted filesystems) - by :user:`rahuldevikar`. Fixes :issue:`2770`.
+ (:issue:`2770`)
+- Fix Windows activation scripts to properly quote ``python.exe`` path, preventing failures when Python is installed in
+ a path with spaces (e.g., ``C:\Program Files``) and a file named ``C:\Program`` exists on the filesystem - by
+ :user:`rahuldevikar`. (:issue:`2985`)
+- Fix ``bash -u`` (``set -o nounset``) compatibility in bash activation script by using ``${PKG_CONFIG_PATH:-}`` and
+ ``${PKG_CONFIG_PATH:+:${PKG_CONFIG_PATH}}`` to handle unset ``PKG_CONFIG_PATH`` - by :user:`Fridayai700`.
+ (:issue:`3044`)
+- Gracefully handle corrupted on-disk cache and invalid JSON from Python interrogation subprocess instead of crashing
+ with unhandled ``JSONDecodeError`` or ``KeyError`` - by :user:`gaborbernat`. (:issue:`3054`)
+
+***********************
+ v20.36.1 (2026-01-09)
+***********************
Bugfixes - 20.36.1
-~~~~~~~~~~~~~~~~~~
-- Fix TOCTOU vulnerabilities in app_data and lock directory creation that could be exploited via symlink attacks - reported by :user:`tsigouris007`, fixed by :user:`gaborbernat`. (:issue:`3013`)
+==================
-v20.36.0 (2026-01-07)
----------------------
+- Fix TOCTOU vulnerabilities in app_data and lock directory creation that could be exploited via symlink attacks -
+ reported by :user:`tsigouris007`, fixed by :user:`gaborbernat`. (:issue:`3013`)
+
+***********************
+ v20.36.0 (2026-01-07)
+***********************
Features - 20.36.0
-~~~~~~~~~~~~~~~~~~
-- Add support for PEP 440 version specifiers in the ``--python`` flag. Users can now specify Python versions using operators like ``>=``, ``<=``, ``~=``, etc. For example: ``virtualenv --python=">=3.12" myenv`` `. (:issue:`2994`)
+==================
+
+- Add support for PEP 440 version specifiers in the ``--python`` flag. Users can now specify Python versions using
+ operators like ``>=``, ``<=``, ``~=``, etc. For example: ``virtualenv --python=">=3.12" myenv`` `. (:issue:`2994`)
-v20.35.4 (2025-10-28)
----------------------
+***********************
+ v20.35.4 (2025-10-28)
+***********************
Bugfixes - 20.35.4
-~~~~~~~~~~~~~~~~~~
-- Fix race condition in ``_virtualenv.py`` when file is overwritten during import, preventing ``NameError`` when ``_DISTUTILS_PATCH`` is accessed - by :user:`gracetyy`. (:issue:`2969`)
+==================
+
+- Fix race condition in ``_virtualenv.py`` when file is overwritten during import, preventing ``NameError`` when
+ ``_DISTUTILS_PATCH`` is accessed - by :user:`gracetyy`. (:issue:`2969`)
- Upgrade embedded wheels:
- * pip to ``25.3`` from ``25.2`` (:issue:`2989`)
+ - pip to ``25.3`` from ``25.2`` (:issue:`2989`)
-v20.35.3 (2025-10-10)
----------------------
+***********************
+ v20.35.3 (2025-10-10)
+***********************
Bugfixes - 20.35.3
-~~~~~~~~~~~~~~~~~~
+==================
+
- Accept RuntimeError in `test_too_many_open_files`, by :user:`esafak` (:issue:`2935`)
-v20.35.2 (2025-10-10)
----------------------
+***********************
+ v20.35.2 (2025-10-10)
+***********************
Bugfixes - 20.35.2
-~~~~~~~~~~~~~~~~~~
+==================
+
- Revert out changes related to the extraction of the discovery module - by :user:`gaborbernat`. (:issue:`2978`)
-v20.35.1 (2025-10-09)
----------------------
+***********************
+ v20.35.1 (2025-10-09)
+***********************
Bugfixes - 20.35.1
-~~~~~~~~~~~~~~~~~~
+==================
+
- Patch get_interpreter to handle missing cache and app_data - by :user:`esafak` (:issue:`2972`)
- Fix backwards incompatible changes to ``PythonInfo`` - by :user:`gaborbernat`. (:issue:`2975`)
-v20.35.0 (2025-10-08)
----------------------
+***********************
+ v20.35.0 (2025-10-08)
+***********************
Features - 20.35.0
-~~~~~~~~~~~~~~~~~~
+==================
+
- Add AppData and Cache protocols to discovery for decoupling - by :user:`esafak`. (:issue:`2074`)
- Ensure python3.exe and python3 on Windows for Python 3 - by :user:`esafak`. (:issue:`2774`)
Bugfixes - 20.35.0
-~~~~~~~~~~~~~~~~~~
+==================
+
- Replaced direct references to tcl/tk library paths with getattr - by :user:`esafak` (:issue:`2944`)
- Restore absolute import of fs_is_case_sensitive - by :user:`esafak`. (:issue:`2955`)
-v20.34.0 (2025-08-13)
----------------------
+***********************
+ v20.34.0 (2025-08-13)
+***********************
Features - 20.34.0
-~~~~~~~~~~~~~~~~~~
-- Abstract out caching in discovery - by :user:`esafak`.
- Decouple `FileCache` from `py_info` (discovery) - by :user:`esafak`.
- Remove references to py_info in FileCache - by :user:`esafak`.
- Decouple discovery from creator plugins - by :user:`esafak`.
- Decouple discovery by duplicating info utils - by :user:`esafak`. (:issue:`2074`)
+==================
+
+- Abstract out caching in discovery - by :user:`esafak`. Decouple `FileCache` from `py_info` (discovery) - by
+ :user:`esafak`. Remove references to py_info in FileCache - by :user:`esafak`. Decouple discovery from creator plugins
+ - by :user:`esafak`. Decouple discovery by duplicating info utils - by :user:`esafak`. (:issue:`2074`)
- Add PyPy 3.11 support. Contributed by :user:`esafak`. (:issue:`2932`)
Bugfixes - 20.34.0
-~~~~~~~~~~~~~~~~~~
+==================
+
- Upgrade embedded wheel pip to ``25.2`` from ``25.1.1`` - by :user:`gaborbernat`. (:issue:`2333`)
- Accept RuntimeError in `test_too_many_open_files`, by :user:`esafak` (:issue:`2935`)
- Python in PATH takes precedence over uv-managed python. Contributed by :user:`edgarrmondragon`. (:issue:`2952`)
-v20.33.1 (2025-08-05)
----------------------
+***********************
+ v20.33.1 (2025-08-05)
+***********************
Bugfixes - 20.33.1
-~~~~~~~~~~~~~~~~~~
-- Correctly unpack _get_tcl_tk_libs() response in PythonInfo.
- Contributed by :user:`esafak`. (:issue:`2930`)
-- Restore `py_info.py` timestamp in `test_py_info_cache_invalidation_on_py_info_change`
- Contributed by :user:`esafak`. (:issue:`2933`)
+==================
+
+- Correctly unpack _get_tcl_tk_libs() response in PythonInfo. Contributed by :user:`esafak`. (:issue:`2930`)
+- Restore `py_info.py` timestamp in `test_py_info_cache_invalidation_on_py_info_change` Contributed by :user:`esafak`.
+ (:issue:`2933`)
-v20.33.0 (2025-08-03)
----------------------
+***********************
+ v20.33.0 (2025-08-03)
+***********************
Features - 20.33.0
-~~~~~~~~~~~~~~~~~~
-- Added support for Tcl and Tkinter. You're welcome.
- Contributed by :user:`esafak`. (:issue:`425`)
+==================
+
+- Added support for Tcl and Tkinter. You're welcome. Contributed by :user:`esafak`. (:issue:`425`)
Bugfixes - 20.33.0
-~~~~~~~~~~~~~~~~~~
-- Prevent logging setup when --help is passed, fixing a flaky test.
- Contributed by :user:`esafak`. (:issue:`u`)
-- Fix cache invalidation for PythonInfo by hashing `py_info.py`.
- Contributed by :user:`esafak`. (:issue:`2467`)
-- When no discovery plugins are found, the application would crash with a StopIteration.
- This change catches the StopIteration and raises a RuntimeError with a more informative message.
- Contributed by :user:`esafak`. (:issue:`2493`)
-- Stop `--try-first-with` overriding absolute `--python` paths.
- Contributed by :user:`esafak`. (:issue:`2659`)
-- Force UTF-8 encoding for pip download
- Contributed by :user:`esafak`. (:issue:`2780`)
-- Creating a virtual environment on a filesystem without symlink-support would fail even with `--copies`
- Make `fs_supports_symlink` perform a real symlink creation check on all platforms.
- Contributed by :user:`esafak`. (:issue:`2786`)
+==================
+
+- Prevent logging setup when --help is passed, fixing a flaky test. Contributed by :user:`esafak`. (:issue:`u`)
+- Fix cache invalidation for PythonInfo by hashing `py_info.py`. Contributed by :user:`esafak`. (:issue:`2467`)
+- When no discovery plugins are found, the application would crash with a StopIteration. This change catches the
+ StopIteration and raises a RuntimeError with a more informative message. Contributed by :user:`esafak`.
+ (:issue:`2493`)
+- Stop `--try-first-with` overriding absolute `--python` paths. Contributed by :user:`esafak`. (:issue:`2659`)
+- Force UTF-8 encoding for pip download Contributed by :user:`esafak`. (:issue:`2780`)
+- Creating a virtual environment on a filesystem without symlink-support would fail even with `--copies` Make
+ `fs_supports_symlink` perform a real symlink creation check on all platforms. Contributed by :user:`esafak`.
+ (:issue:`2786`)
- Add a note to the user guide recommending the use of a specific Python version when creating virtual environments.
Contributed by :user:`esafak`. (:issue:`2808`)
-- Fix 'Too many open files' error due to a file descriptor leak in virtualenv's locking mechanism.
- Contributed by :user:`esafak`. (:issue:`2834`)
-- Support renamed Windows venv redirector (`venvlauncher.exe` and `venvwlauncher.exe`) on Python 3.13
- Contributed by :user:`esafak`. (:issue:`2851`)
+- Fix 'Too many open files' error due to a file descriptor leak in virtualenv's locking mechanism. Contributed by
+ :user:`esafak`. (:issue:`2834`)
+- Support renamed Windows venv redirector (`venvlauncher.exe` and `venvwlauncher.exe`) on Python 3.13 Contributed by
+ :user:`esafak`. (:issue:`2851`)
- Resolve Nushell activation script deprecation warnings by dynamically selecting the ``--optional`` flag for Nushell
- ``get`` command on version 0.106.0 and newer, while retaining the deprecated ``-i`` flag for older versions to maintain
- compatibility. Contributed by :user:`gaborbernat`. (:issue:`2910`)
+ ``get`` command on version 0.106.0 and newer, while retaining the deprecated ``-i`` flag for older versions to
+ maintain compatibility. Contributed by :user:`gaborbernat`. (:issue:`2910`)
-v20.32.0 (2025-07-20)
----------------------
+***********************
+ v20.32.0 (2025-07-20)
+***********************
Features - 20.32.0
-~~~~~~~~~~~~~~~~~~
+==================
+
- Warn on incorrect invocation of Nushell activation script - by :user:`esafak`. (:issue:`nushell_activation`)
- Discover uv-managed Python installations (:issue:`2901`)
Bugfixes - 20.32.0
-~~~~~~~~~~~~~~~~~~
+==================
+
- Ignore missing absolute paths for python discovery - by :user:`esafak` (:issue:`2870`)
- Upgrade embedded setuptools to ``80.9.0`` from ``80.3.1`` - by :user:`gaborbernat`. (:issue:`2900`)
-v20.31.2 (2025-05-08)
----------------------
+***********************
+ v20.31.2 (2025-05-08)
+***********************
No significant changes.
-
-v20.31.1 (2025-05-05)
----------------------
+***********************
+ v20.31.1 (2025-05-05)
+***********************
Bugfixes - 20.31.1
-~~~~~~~~~~~~~~~~~~
+==================
+
- Upgrade embedded wheels:
- * pip to ``25.1.1`` from ``25.1``
- * setuptools to ``80.3.1`` from ``78.1.0`` (:issue:`2880`)
+ - pip to ``25.1.1`` from ``25.1``
+ - setuptools to ``80.3.1`` from ``78.1.0`` (:issue:`2880`)
-v20.31.0 (2025-05-05)
----------------------
+***********************
+ v20.31.0 (2025-05-05)
+***********************
Features - 20.31.0
-~~~~~~~~~~~~~~~~~~
-- No longer bundle ``wheel`` wheels (except on Python 3.8), ``setuptools`` includes native ``bdist_wheel`` support. Update ``pip`` to ``25.1``. (:issue:`2868`)
+==================
+
+- No longer bundle ``wheel`` wheels (except on Python 3.8), ``setuptools`` includes native ``bdist_wheel`` support.
+ Update ``pip`` to ``25.1``. (:issue:`2868`)
Bugfixes - 20.31.0
-~~~~~~~~~~~~~~~~~~
-- ``get_embed_wheel()`` no longer fails with a :exc:`TypeError` when it is
- called with an unknown *distribution*. (:issue:`2877`)
+==================
+
+- ``get_embed_wheel()`` no longer fails with a :exc:`TypeError` when it is called with an unknown *distribution*.
+ (:issue:`2877`)
- Fix ``HelpFormatter`` error with Python 3.14.0b1. (:issue:`2878`)
-v20.30.0 (2025-03-31)
----------------------
+***********************
+ v20.30.0 (2025-03-31)
+***********************
Features - 20.30.0
-~~~~~~~~~~~~~~~~~~
+==================
+
- Add support for `GraalPy `_. (:issue:`2832`)
Bugfixes - 20.30.0
-~~~~~~~~~~~~~~~~~~
+==================
+
- Upgrade embedded wheels:
- * setuptools to ``78.1.0`` from ``75.3.2`` (:issue:`2863`)
+ - setuptools to ``78.1.0`` from ``75.3.2`` (:issue:`2863`)
-v20.29.3 (2025-03-06)
----------------------
+***********************
+ v20.29.3 (2025-03-06)
+***********************
Bugfixes - 20.29.3
-~~~~~~~~~~~~~~~~~~
+==================
+
- Ignore unreadable directories in ``PATH``. (:issue:`2794`)
-v20.29.2 (2025-02-10)
----------------------
+***********************
+ v20.29.2 (2025-02-10)
+***********************
Bugfixes - 20.29.2
-~~~~~~~~~~~~~~~~~~
+==================
+
- Remove old virtualenv wheel from the source distribution - by :user:`gaborbernat`. (:issue:`2841`)
- Upgrade embedded wheel pip to ``25.0.1`` from ``24.3.1`` - by :user:`gaborbernat`. (:issue:`2843`)
-v20.29.1 (2025-01-17)
----------------------
+***********************
+ v20.29.1 (2025-01-17)
+***********************
Bugfixes - 20.29.1
-~~~~~~~~~~~~~~~~~~
+==================
+
- Fix PyInfo cache incompatibility warnings - by :user:`robsdedude`. (:issue:`2827`)
-v20.29.0 (2025-01-15)
----------------------
+***********************
+ v20.29.0 (2025-01-15)
+***********************
Features - 20.29.0
-~~~~~~~~~~~~~~~~~~
+==================
+
- Add support for selecting free-threaded Python interpreters, e.g., `python3.13t`. (:issue:`2809`)
Bugfixes - 20.29.0
-~~~~~~~~~~~~~~~~~~
+==================
+
- Upgrade embedded wheels:
- * setuptools to ``75.8.0`` from ``75.6.0`` (:issue:`2823`)
+ - setuptools to ``75.8.0`` from ``75.6.0`` (:issue:`2823`)
-v20.28.1 (2025-01-02)
----------------------
+***********************
+ v20.28.1 (2025-01-02)
+***********************
Bugfixes - 20.28.1
-~~~~~~~~~~~~~~~~~~
+==================
+
- Skip tcsh tests on broken tcsh versions - by :user:`gaborbernat`. (:issue:`2814`)
-v20.28.0 (2024-11-25)
----------------------
+***********************
+ v20.28.0 (2024-11-25)
+***********************
Features - 20.28.0
-~~~~~~~~~~~~~~~~~~
+==================
+
- Write CACHEDIR.TAG file on creation - by "user:`neilramsay`. (:issue:`2803`)
-v20.27.2 (2024-11-25)
----------------------
+***********************
+ v20.27.2 (2024-11-25)
+***********************
Bugfixes - 20.27.2
-~~~~~~~~~~~~~~~~~~
+==================
+
- Upgrade embedded wheels:
- * setuptools to ``75.3.0`` from ``75.2.0`` (:issue:`2798`)
+ - setuptools to ``75.3.0`` from ``75.2.0`` (:issue:`2798`)
+
- Upgrade embedded wheels:
- * wheel to ``0.45.0`` from ``0.44.0``
- * setuptools to ``75.5.0`` (:issue:`2800`)
+ - wheel to ``0.45.0`` from ``0.44.0``
+ - setuptools to ``75.5.0`` (:issue:`2800`)
+
- no longer forcibly echo off during windows batch activation (:issue:`2801`)
- Upgrade embedded wheels:
- * setuptools to ``75.6.0`` from ``75.5.0``
- * wheel to ``0.45.1`` from ``0.45.0`` (:issue:`2804`)
+ - setuptools to ``75.6.0`` from ``75.5.0``
+ - wheel to ``0.45.1`` from ``0.45.0`` (:issue:`2804`)
-v20.27.1 (2024-10-28)
----------------------
+***********************
+ v20.27.1 (2024-10-28)
+***********************
Bugfixes - 20.27.1
-~~~~~~~~~~~~~~~~~~
+==================
+
- Upgrade embedded wheels:
- * pip to ``24.3.1`` from ``24.2`` (:issue:`2789`)
+ - pip to ``24.3.1`` from ``24.2`` (:issue:`2789`)
-v20.27.0 (2024-10-17)
----------------------
+***********************
+ v20.27.0 (2024-10-17)
+***********************
Features - 20.27.0
-~~~~~~~~~~~~~~~~~~
+==================
+
- Drop 3.7 support as the CI environments no longer allow it running - by :user:`gaborbernat`. (:issue:`2758`)
Bugfixes - 20.27.0
-~~~~~~~~~~~~~~~~~~
-- When a ``$PATH`` entry cannot be checked for existence, skip it instead of terminating - by :user:`hroncok`. (:issue:`2782`)
-- Upgrade embedded wheels:
+==================
- * setuptools to ``75.2.0`` from ``75.1.0``
- * Removed pip of ``24.0``
- * Removed setuptools of ``68.0.0``
- * Removed wheel of ``0.42.0``
+- When a ``$PATH`` entry cannot be checked for existence, skip it instead of terminating - by :user:`hroncok`.
+ (:issue:`2782`)
+- Upgrade embedded wheels:
+ - setuptools to ``75.2.0`` from ``75.1.0``
+ - Removed pip of ``24.0``
+ - Removed setuptools of ``68.0.0``
+ - Removed wheel of ``0.42.0``
- by :user:`gaborbernat`. (:issue:`2783`)
+
- Fix zipapp is broken on Windows post distlib ``0.3.9`` - by :user:`gaborbernat`. (:issue:`2784`)
-v20.26.6 (2024-09-27)
----------------------
+***********************
+ v20.26.6 (2024-09-27)
+***********************
Bugfixes - 20.26.6
-~~~~~~~~~~~~~~~~~~
-- Properly quote string placeholders in activation script templates to mitigate
- potential command injection - by :user:`y5c4l3`. (:issue:`2768`)
+==================
+
+- Properly quote string placeholders in activation script templates to mitigate potential command injection - by
+ :user:`y5c4l3`. (:issue:`2768`)
-v20.26.5 (2024-09-17)
----------------------
+***********************
+ v20.26.5 (2024-09-17)
+***********************
Bugfixes - 20.26.5
-~~~~~~~~~~~~~~~~~~
+==================
+
- Upgrade embedded wheels: setuptools to ``75.1.0`` from ``74.1.2`` - by :user:`gaborbernat`. (:issue:`2765`)
-v20.26.4 (2024-09-07)
----------------------
+***********************
+ v20.26.4 (2024-09-07)
+***********************
Bugfixes - 20.26.4
-~~~~~~~~~~~~~~~~~~
+==================
+
- no longer create `()` output in console during activation of a virtualenv by .bat file. (:issue:`2728`)
- Upgrade embedded wheels:
- * wheel to ``0.44.0`` from ``0.43.0``
- * pip to ``24.2`` from ``24.1``
- * setuptools to ``74.1.2`` from ``70.1.0`` (:issue:`2760`)
+ - wheel to ``0.44.0`` from ``0.43.0``
+ - pip to ``24.2`` from ``24.1``
+ - setuptools to ``74.1.2`` from ``70.1.0`` (:issue:`2760`)
-v20.26.3 (2024-06-21)
----------------------
+***********************
+ v20.26.3 (2024-06-21)
+***********************
Bugfixes - 20.26.3
-~~~~~~~~~~~~~~~~~~
+==================
+
- Upgrade embedded wheels:
- * setuptools to ``70.1.0`` from ``69.5.1``
- * pip to ``24.1`` from ``24.0`` (:issue:`2741`)
+ - setuptools to ``70.1.0`` from ``69.5.1``
+ - pip to ``24.1`` from ``24.0`` (:issue:`2741`)
-v20.26.2 (2024-05-13)
----------------------
+***********************
+ v20.26.2 (2024-05-13)
+***********************
Bugfixes - 20.26.2
-~~~~~~~~~~~~~~~~~~
-- ``virtualenv.pyz`` no longer fails when zipapp path contains a symlink - by :user:`HandSonic` and :user:`petamas`. (:issue:`1949`)
+==================
+
+- ``virtualenv.pyz`` no longer fails when zipapp path contains a symlink - by :user:`HandSonic` and :user:`petamas`.
+ (:issue:`1949`)
- Fix bad return code from activate.sh if hashing is disabled - by :user:'fenkes-ibm'. (:issue:`2717`)
-v20.26.1 (2024-04-29)
----------------------
+***********************
+ v20.26.1 (2024-04-29)
+***********************
Bugfixes - 20.26.1
-~~~~~~~~~~~~~~~~~~
+==================
+
- fix PATH-based Python discovery on Windows - by :user:`ofek`. (:issue:`2712`)
-v20.26.0 (2024-04-23)
----------------------
+***********************
+ v20.26.0 (2024-04-23)
+***********************
Bugfixes - 20.26.0
-~~~~~~~~~~~~~~~~~~
-- allow builtin discovery to discover specific interpreters (e.g. ``python3.12``) given an unspecific spec (e.g. ``python3``) - by :user:`flying-sheep`. (:issue:`2709`)
+==================
-v20.25.3 (2024-04-17)
----------------------
+- allow builtin discovery to discover specific interpreters (e.g. ``python3.12``) given an unspecific spec (e.g.
+ ``python3``) - by :user:`flying-sheep`. (:issue:`2709`)
+
+***********************
+ v20.25.3 (2024-04-17)
+***********************
Bugfixes - 20.25.3
-~~~~~~~~~~~~~~~~~~
+==================
+
- Python 3.13.0a6 renamed pathmod to parser. (:issue:`2702`)
-v20.25.2 (2024-04-16)
----------------------
+***********************
+ v20.25.2 (2024-04-16)
+***********************
Bugfixes - 20.25.2
-~~~~~~~~~~~~~~~~~~
+==================
+
- Upgrade embedded wheels:
- setuptools of ``69.1.0`` to ``69.5.1``
- wheel of ``0.42.0`` to ``0.43.0`` (:issue:`2699`)
-v20.25.1 (2024-02-21)
----------------------
+***********************
+ v20.25.1 (2024-02-21)
+***********************
Bugfixes - 20.25.1
-~~~~~~~~~~~~~~~~~~
+==================
+
- Upgrade embedded wheels:
- * setuptools to ``69.0.3`` from ``69.0.2``
- * pip to ``23.3.2`` from ``23.3.1`` (:issue:`2681`)
+ - setuptools to ``69.0.3`` from ``69.0.2``
+ - pip to ``23.3.2`` from ``23.3.1`` (:issue:`2681`)
+
- Upgrade embedded wheels:
- pip ``23.3.2`` to ``24.0``,
- setuptools ``69.0.3`` to ``69.1.0``. (:issue:`2691`)
Misc - 20.25.1
-~~~~~~~~~~~~~~
+==============
+
- :issue:`2688`
-v20.25.0 (2023-12-01)
----------------------
+***********************
+ v20.25.0 (2023-12-01)
+***********************
Features - 20.25.0
-~~~~~~~~~~~~~~~~~~
+==================
+
- The tests now pass on the CI with Python 3.13.0a2 - by :user:`hroncok`. (:issue:`2673`)
Bugfixes - 20.25.0
-~~~~~~~~~~~~~~~~~~
+==================
+
- Upgrade embedded wheels:
- * wheel to ``0.41.3`` from ``0.41.2`` (:issue:`2665`)
+ - wheel to ``0.41.3`` from ``0.41.2`` (:issue:`2665`)
+
- Upgrade embedded wheels:
- * wheel to ``0.42.0`` from ``0.41.3``
- * setuptools to ``69.0.2`` from ``68.2.2`` (:issue:`2669`)
+ - wheel to ``0.42.0`` from ``0.41.3``
+ - setuptools to ``69.0.2`` from ``68.2.2`` (:issue:`2669`)
-v20.24.6 (2023-10-23)
----------------------
+***********************
+ v20.24.6 (2023-10-23)
+***********************
Bugfixes - 20.24.6
-~~~~~~~~~~~~~~~~~~
+==================
+
- Use get_hookimpls method instead of the private attribute in tests. (:issue:`2649`)
- Upgrade embedded wheels:
- * setuptools to ``68.2.2`` from ``68.2.0``
- * pip to ``23.3.1`` from ``23.2.1`` (:issue:`2656`)
-
+ - setuptools to ``68.2.2`` from ``68.2.0``
+ - pip to ``23.3.1`` from ``23.2.1`` (:issue:`2656`)
-v20.24.5 (2023-09-08)
----------------------
+***********************
+ v20.24.5 (2023-09-08)
+***********************
Bugfixes - 20.24.5
-~~~~~~~~~~~~~~~~~~
+==================
+
- Declare PyPy 3.10 support - by :user:`cclauss`. (:issue:`2638`)
- Brew on macOS no longer allows copy builds - disallow choosing this by :user:`gaborbernat`. (:issue:`2640`)
- Upgrade embedded wheels:
- * setuptools to ``68.2.0`` from ``68.1.2`` (:issue:`2642`)
-
+ - setuptools to ``68.2.0`` from ``68.1.2`` (:issue:`2642`)
-v20.24.4 (2023-08-30)
----------------------
+***********************
+ v20.24.4 (2023-08-30)
+***********************
Bugfixes - 20.24.4
-~~~~~~~~~~~~~~~~~~
-- Upgrade embedded wheels:
+==================
- * setuptools to ``68.1.2`` from ``68.1.0`` on ``3.8+``
- * wheel to ``0.41.2`` from ``0.41.1`` on ``3.7+`` (:issue:`2628`)
+- Upgrade embedded wheels:
+ - setuptools to ``68.1.2`` from ``68.1.0`` on ``3.8+``
+ - wheel to ``0.41.2`` from ``0.41.1`` on ``3.7+`` (:issue:`2628`)
-v20.24.3 (2023-08-11)
----------------------
+***********************
+ v20.24.3 (2023-08-11)
+***********************
Bugfixes - 20.24.3
-~~~~~~~~~~~~~~~~~~
+==================
+
- Fixed ResourceWarning on exit caused by periodic update subprocess (:issue:`2472`)
- Upgrade embedded wheels:
- * wheel to ``0.41.1`` from ``0.41.0`` (:issue:`2622`)
+ - wheel to ``0.41.1`` from ``0.41.0`` (:issue:`2622`)
Misc - 20.24.3
-~~~~~~~~~~~~~~
-- :issue:`2610`
+==============
+- :issue:`2610`
-v20.24.2 (2023-07-24)
----------------------
+***********************
+ v20.24.2 (2023-07-24)
+***********************
Bugfixes - 20.24.2
-~~~~~~~~~~~~~~~~~~
-- Upgrade embedded wheels:
+==================
- * pip to ``23.2.1`` from ``23.2``
- * wheel to ``0.41.0`` from ``0.40.0`` (:issue:`2614`)
+- Upgrade embedded wheels:
+ - pip to ``23.2.1`` from ``23.2``
+ - wheel to ``0.41.0`` from ``0.40.0`` (:issue:`2614`)
-v20.24.1 (2023-07-19)
----------------------
+***********************
+ v20.24.1 (2023-07-19)
+***********************
Bugfixes - 20.24.1
-~~~~~~~~~~~~~~~~~~
-- Upgrade embedded wheels:
+==================
- * pip to ``23.2`` from ``23.1.2`` - by :user:`arielkirkwood` (:issue:`2611`)
+- Upgrade embedded wheels:
+ - pip to ``23.2`` from ``23.1.2`` - by :user:`arielkirkwood` (:issue:`2611`)
-v20.24.0 (2023-07-14)
----------------------
+***********************
+ v20.24.0 (2023-07-14)
+***********************
Features - 20.24.0
-~~~~~~~~~~~~~~~~~~
-- Export the prompt prefix as ``VIRTUAL_ENV_PROMPT`` when activating a virtual
- environment - by :user:`jimporter`. (:issue:`2194`)
+==================
+
+- Export the prompt prefix as ``VIRTUAL_ENV_PROMPT`` when activating a virtual environment - by :user:`jimporter`.
+ (:issue:`2194`)
Bugfixes - 20.24.0
-~~~~~~~~~~~~~~~~~~
+==================
+
- Fix test suite - by :user:`gaborbernat`. (:issue:`2592`)
- Upgrade embedded wheels:
- * setuptools to ``68.0.0`` from ``67.8.0`` (:issue:`2607`)
-
+ - setuptools to ``68.0.0`` from ``67.8.0`` (:issue:`2607`)
-v20.23.1 (2023-06-16)
----------------------
+***********************
+ v20.23.1 (2023-06-16)
+***********************
Bugfixes - 20.23.1
-~~~~~~~~~~~~~~~~~~
-- update and simplify nushell activation script, fixes an issue on Windows resulting in consecutive command not found - by :user:`melMass`. (:issue:`2572`)
-- Upgrade embedded wheels:
+==================
- * setuptools to ``67.8.0`` from ``67.7.2`` (:issue:`2588`)
+- update and simplify nushell activation script, fixes an issue on Windows resulting in consecutive command not found -
+ by :user:`melMass`. (:issue:`2572`)
+- Upgrade embedded wheels:
+ - setuptools to ``67.8.0`` from ``67.7.2`` (:issue:`2588`)
-v20.23.0 (2023-04-27)
----------------------
+***********************
+ v20.23.0 (2023-04-27)
+***********************
Features - 20.23.0
-~~~~~~~~~~~~~~~~~~
+==================
+
- Do not install ``wheel`` and ``setuptools`` seed packages for Python 3.12+. To restore the old behavior use:
- for ``wheel`` use ``VIRTUALENV_WHEEL=bundle`` environment variable or ``--wheel=bundle`` CLI flag,
- for ``setuptools`` use ``VIRTUALENV_SETUPTOOLS=bundle`` environment variable or ``--setuptools=bundle`` CLI flag.
By :user:`chrysle`. (:issue:`2487`)
+
- 3.12 support - by :user:`gaborbernat`. (:issue:`2558`)
Bugfixes - 20.23.0
-~~~~~~~~~~~~~~~~~~
-- Prevent ``PermissionError`` when using venv creator on systems that deliver files without user write
- permission - by :user:`kulikjak`. (:issue:`2543`)
-- Upgrade setuptools to ``67.7.2`` from ``67.6.1`` and pip to ``23.1.2`` from ``23.1`` - by :user:`szleb`. (:issue:`2560`)
+==================
+- Prevent ``PermissionError`` when using venv creator on systems that deliver files without user write permission - by
+ :user:`kulikjak`. (:issue:`2543`)
+- Upgrade setuptools to ``67.7.2`` from ``67.6.1`` and pip to ``23.1.2`` from ``23.1`` - by :user:`szleb`.
+ (:issue:`2560`)
-v20.22.0 (2023-04-19)
----------------------
+***********************
+ v20.22.0 (2023-04-19)
+***********************
Features - 20.22.0
-~~~~~~~~~~~~~~~~~~
+==================
+
- Drop support for creating Python <=3.6 (including 2) interpreters. Removed pip of ``20.3.4``, ``21.3.1``; wheel of
``0.37.1``; setuptools of ``59.6.0``, ``44.1.1``, ``50.3.2``- by :user:`gaborbernat`. (:issue:`2548`)
-
-v20.21.1 (2023-04-19)
----------------------
+***********************
+ v20.21.1 (2023-04-19)
+***********************
Bugfixes - 20.21.1
-~~~~~~~~~~~~~~~~~~
+==================
+
- Add ``tox.ini`` to sdist - by :user:`mtelka`. (:issue:`2511`)
- Move the use of 'let' in nushell to ensure compatibility with future releases of nushell, where 'let' no longer
assumes that its initializer is a full expressions. (:issue:`2527`)
-- The nushell command 'str collect' has been superseded by the 'str join' command. The activate.nu script has
- been updated to reflect this change. (:issue:`2532`)
+- The nushell command 'str collect' has been superseded by the 'str join' command. The activate.nu script has been
+ updated to reflect this change. (:issue:`2532`)
- Upgrade embedded wheels:
- * wheel to ``0.40.0`` from ``0.38.4``
- * setuptools to ``67.6.1`` from ``67.4.0``
- * pip to ``23.1`` from ``23.0.1`` (:issue:`2546`)
+ - wheel to ``0.40.0`` from ``0.38.4``
+ - setuptools to ``67.6.1`` from ``67.4.0``
+ - pip to ``23.1`` from ``23.0.1`` (:issue:`2546`)
-
-v20.21.0 (2023-03-12)
----------------------
+***********************
+ v20.21.0 (2023-03-12)
+***********************
Features - 20.21.0
-~~~~~~~~~~~~~~~~~~
+==================
+
- Make closure syntax explicitly starts with {||. (:issue:`2512`)
Bugfixes - 20.21.0
-~~~~~~~~~~~~~~~~~~
-- Add ``print`` command to nushell print_prompt to ensure compatibility with future release of nushell,
- where intermediate commands no longer print their result to stdout. (:issue:`2514`)
-- Do not assume the default encoding. (:issue:`2515`)
-- Make ``ReentrantFileLock`` thread-safe and,
- thereby, fix race condition in ``virtualenv.cli_run`` - by :user:`radoering`. (:issue:`2516`)
+==================
+- Add ``print`` command to nushell print_prompt to ensure compatibility with future release of nushell, where
+ intermediate commands no longer print their result to stdout. (:issue:`2514`)
+- Do not assume the default encoding. (:issue:`2515`)
+- Make ``ReentrantFileLock`` thread-safe and, thereby, fix race condition in ``virtualenv.cli_run`` - by
+ :user:`radoering`. (:issue:`2516`)
-v20.20.0 (2023-02-28)
----------------------
+***********************
+ v20.20.0 (2023-02-28)
+***********************
Features - 20.20.0
-~~~~~~~~~~~~~~~~~~
-- Change environment variable existence check in Nushell activation script to not use deprecated command. (:issue:`2506`)
+==================
+
+- Change environment variable existence check in Nushell activation script to not use deprecated command.
+ (:issue:`2506`)
Bugfixes - 20.20.0
-~~~~~~~~~~~~~~~~~~
-- Discover CPython implementations distributed on Windows by any organization - by :user:`faph`. (:issue:`2504`)
-- Upgrade embedded setuptools to ``67.4.0`` from ``67.1.0`` and pip to ``23.0.1`` from ``23.0`` - by :user:`gaborbernat`. (:issue:`2510`)
+==================
+- Discover CPython implementations distributed on Windows by any organization - by :user:`faph`. (:issue:`2504`)
+- Upgrade embedded setuptools to ``67.4.0`` from ``67.1.0`` and pip to ``23.0.1`` from ``23.0`` - by
+ :user:`gaborbernat`. (:issue:`2510`)
-v20.19.0 (2023-02-07)
----------------------
+***********************
+ v20.19.0 (2023-02-07)
+***********************
Features - 20.19.0
-~~~~~~~~~~~~~~~~~~
-- Allow platformdirs version ``3`` - by :user:`cdce8p`. (:issue:`2499`)
+==================
+- Allow platformdirs version ``3`` - by :user:`cdce8p`. (:issue:`2499`)
-v20.18.0 (2023-02-06)
----------------------
+***********************
+ v20.18.0 (2023-02-06)
+***********************
Features - 20.18.0
-~~~~~~~~~~~~~~~~~~
+==================
+
- Drop ``3.6`` runtime support (can still create ``2.7+``) - by :user:`gaborbernat`. (:issue:`2489`)
Bugfixes - 20.18.0
-~~~~~~~~~~~~~~~~~~
+==================
+
- Fix broken prompt in Nushell when activating virtual environment - by :user:`kubouc`. (:issue:`2481`)
- Bump embedded pip to ``23.0`` and setuptools to ``67.1`` - by :user:`gaborbernat`. (:issue:`2489`)
-
-v20.17.1 (2022-12-05)
----------------------
+***********************
+ v20.17.1 (2022-12-05)
+***********************
Bugfixes - 20.17.1
-~~~~~~~~~~~~~~~~~~
-- A ``py`` or ``python`` spec means any Python rather than ``CPython`` - by :user:`gaborbernat`. (`#2460 `_)
-- Make ``activate.nu`` respect ``VIRTUAL_ENV_DISABLE_PROMPT`` and not set the prompt if requested - by :user:`m-lima`. (`#2461 `_)
+==================
+- A ``py`` or ``python`` spec means any Python rather than ``CPython`` - by :user:`gaborbernat`. (`#2460
+ `_)
+- Make ``activate.nu`` respect ``VIRTUAL_ENV_DISABLE_PROMPT`` and not set the prompt if requested - by :user:`m-lima`.
+ (`#2461 `_)
-v20.17.0 (2022-11-27)
----------------------
+***********************
+ v20.17.0 (2022-11-27)
+***********************
Features - 20.17.0
-~~~~~~~~~~~~~~~~~~
-- Change Nushell activation script to be a module meant to be activated as an overlay. (`#2422 `_)
-- Update operator used in Nushell activation script to be compatible with future versions. (`#2450 `_)
+==================
+
+- Change Nushell activation script to be a module meant to be activated as an overlay. (`#2422
+ `_)
+- Update operator used in Nushell activation script to be compatible with future versions. (`#2450
+ `_)
Bugfixes - 20.17.0
-~~~~~~~~~~~~~~~~~~
-- Do not use deprecated API from ``importlib.resources`` on Python 3.10 or later - by :user:`gaborbernat`. (`#2448 `_)
-- Upgrade embedded setuptools to ``65.6.3`` from ``65.5.1`` - by :user:`gaborbernat`. (`#2451 `_)
+==================
+- Do not use deprecated API from ``importlib.resources`` on Python 3.10 or later - by :user:`gaborbernat`. (`#2448
+ `_)
+- Upgrade embedded setuptools to ``65.6.3`` from ``65.5.1`` - by :user:`gaborbernat`. (`#2451
+ `_)
-v20.16.7 (2022-11-12)
----------------------
+***********************
+ v20.16.7 (2022-11-12)
+***********************
Bugfixes - 20.16.7
-~~~~~~~~~~~~~~~~~~
-- Use parent directory of python executable for pyvenv.cfg "home" value per PEP 405 - by :user:`vfazio`. (`#2440 `_)
-- In POSIX virtual environments, try alternate binary names if ``sys._base_executable`` does not exist - by :user:`vfazio`. (`#2442 `_)
-- Upgrade embedded wheel to ``0.38.4`` and pip to ``22.3.1`` from ``22.3`` and setuptools to ``65.5.1`` from
- ``65.5.0`` - by :user:`gaborbernat`. (`#2443 `_)
+==================
+- Use parent directory of python executable for pyvenv.cfg "home" value per PEP 405 - by :user:`vfazio`. (`#2440
+ `_)
+- In POSIX virtual environments, try alternate binary names if ``sys._base_executable`` does not exist - by
+ :user:`vfazio`. (`#2442 `_)
+- Upgrade embedded wheel to ``0.38.4`` and pip to ``22.3.1`` from ``22.3`` and setuptools to ``65.5.1`` from ``65.5.0``
+ - by :user:`gaborbernat`. (`#2443 `_)
-v20.16.6 (2022-10-25)
----------------------
+***********************
+ v20.16.6 (2022-10-25)
+***********************
Features - 20.16.6
-~~~~~~~~~~~~~~~~~~
+==================
+
- Drop unneeded shims for PyPy3 directory structure (`#2426 `_)
Bugfixes - 20.16.6
-~~~~~~~~~~~~~~~~~~
-- Fix selected scheme on debian derivatives for python 3.10 when ``python3-distutils`` is not installed or the ``venv`` scheme is not available - by :user:`asottile`. (`#2350 `_)
-- Allow the test suite to pass even with the original C shell (rather than ``tcsh``) - by :user:`kulikjak`. (`#2418 `_)
-- Fix fallback handling of downloading wheels for bundled packages - by :user:`schaap`. (`#2429 `_)
-- Upgrade embedded setuptools to ``65.5.0`` from ``65.3.0`` and pip to ``22.3`` from ``22.2.2`` - by :user:`gaborbernat`. (`#2434 `_)
+==================
+- Fix selected scheme on debian derivatives for python 3.10 when ``python3-distutils`` is not installed or the ``venv``
+ scheme is not available - by :user:`asottile`. (`#2350 `_)
+- Allow the test suite to pass even with the original C shell (rather than ``tcsh``) - by :user:`kulikjak`. (`#2418
+ `_)
+- Fix fallback handling of downloading wheels for bundled packages - by :user:`schaap`. (`#2429
+ `_)
+- Upgrade embedded setuptools to ``65.5.0`` from ``65.3.0`` and pip to ``22.3`` from ``22.2.2`` - by
+ :user:`gaborbernat`. (`#2434 `_)
-v20.16.5 (2022-09-07)
----------------------
+***********************
+ v20.16.5 (2022-09-07)
+***********************
Bugfixes - 20.16.5
-~~~~~~~~~~~~~~~~~~
-- Do not turn echo off for subsequent commands in batch activators
- (``activate.bat`` and ``deactivate.bat``) - by :user:`pawelszramowski`. (`#2411 `_)
+==================
+- Do not turn echo off for subsequent commands in batch activators (``activate.bat`` and ``deactivate.bat``) - by
+ :user:`pawelszramowski`. (`#2411 `_)
-v20.16.4 (2022-08-29)
----------------------
+***********************
+ v20.16.4 (2022-08-29)
+***********************
Bugfixes - 20.16.4
-~~~~~~~~~~~~~~~~~~
-- Bump embed setuptools to ``65.3`` - by :user:`gaborbernat`. (`#2405 `_)
+==================
+- Bump embed setuptools to ``65.3`` - by :user:`gaborbernat`. (`#2405
+ `_)
-v20.16.3 (2022-08-04)
----------------------
+***********************
+ v20.16.3 (2022-08-04)
+***********************
Bugfixes - 20.16.3
-~~~~~~~~~~~~~~~~~~
-- Upgrade embedded pip to ``22.2.2`` from ``22.2.1`` and setuptools to ``63.4.1`` from ``63.2.0`` - by :user:`gaborbernat`. (`#2395 `_)
+==================
+- Upgrade embedded pip to ``22.2.2`` from ``22.2.1`` and setuptools to ``63.4.1`` from ``63.2.0`` - by
+ :user:`gaborbernat`. (`#2395 `_)
-v20.16.2 (2022-07-27)
----------------------
+***********************
+ v20.16.2 (2022-07-27)
+***********************
Bugfixes - 20.16.2
-~~~~~~~~~~~~~~~~~~
-- Bump embedded pip from ``22.2`` to ``22.2.1`` - by :user:`gaborbernat`. (`#2391 `_)
+==================
+- Bump embedded pip from ``22.2`` to ``22.2.1`` - by :user:`gaborbernat`. (`#2391
+ `_)
-v20.16.1 (2022-07-26)
----------------------
+***********************
+ v20.16.1 (2022-07-26)
+***********************
Features - 20.16.1
-~~~~~~~~~~~~~~~~~~
-- Update Nushell activation scripts to version 0.67 - by :user:`kubouch`. (`#2386 `_)
+==================
+- Update Nushell activation scripts to version 0.67 - by :user:`kubouch`. (`#2386
+ `_)
-v20.16.0 (2022-07-25)
----------------------
+***********************
+ v20.16.0 (2022-07-25)
+***********************
Features - 20.16.0
-~~~~~~~~~~~~~~~~~~
-- Drop support for running under Python 2 (still can generate Python 2 environments) - by :user:`gaborbernat`. (`#2382 `_)
-- Upgrade embedded pip to ``22.2`` from ``22.1.2`` and setuptools to ``63.2.0`` from ``62.6.0`` -
- by :user:`gaborbernat`. (`#2383 `_)
+==================
+- Drop support for running under Python 2 (still can generate Python 2 environments) - by :user:`gaborbernat`. (`#2382
+ `_)
+- Upgrade embedded pip to ``22.2`` from ``22.1.2`` and setuptools to ``63.2.0`` from ``62.6.0`` - by
+ :user:`gaborbernat`. (`#2383 `_)
-v20.15.1 (2022-06-28)
----------------------
+***********************
+ v20.15.1 (2022-06-28)
+***********************
Bugfixes - 20.15.1
-~~~~~~~~~~~~~~~~~~
-- Fix the incorrect operation when ``setuptools`` plugins output something into ``stdout``. (`#2335 `_)
-- CPython3Windows creator ignores missing ``DLLs`` dir. (`#2368 `_)
+==================
+- Fix the incorrect operation when ``setuptools`` plugins output something into ``stdout``. (`#2335
+ `_)
+- CPython3Windows creator ignores missing ``DLLs`` dir. (`#2368 `_)
-v20.15.0 (2022-06-25)
----------------------
+***********************
+ v20.15.0 (2022-06-25)
+***********************
Features - 20.15.0
-~~~~~~~~~~~~~~~~~~
-- Support for Windows embeddable Python package: includes ``python.zip`` in the creator sources
- - by :user:`reksarka`. (`#1774 `_)
+==================
+
+- Support for Windows embeddable Python package: includes ``python.zip`` in the creator sources - by
+ :user:`reksarka`. (`#1774 `_)
Bugfixes - 20.15.0
-~~~~~~~~~~~~~~~~~~
-- Upgrade embedded setuptools to ``62.3.3`` from ``62.6.0`` and pip to ``22.1.2`` from ``22.0.4``
- - by :user:`gaborbernat`. (`#2348 `_)
-- Use ``shlex.quote`` instead of deprecated ``pipes.quote`` in Python 3 - by :user:`frenzymadness`. (`#2351 `_)
-- Fix Windows PyPy 3.6 - by :user:`reksarka`. (`#2363 `_)
+==================
+- Upgrade embedded setuptools to ``62.3.3`` from ``62.6.0`` and pip to ``22.1.2`` from ``22.0.4`` - by
+ :user:`gaborbernat`. (`#2348 `_)
+- Use ``shlex.quote`` instead of deprecated ``pipes.quote`` in Python 3 - by :user:`frenzymadness`. (`#2351
+ `_)
+- Fix Windows PyPy 3.6 - by :user:`reksarka`. (`#2363 `_)
-v20.14.1 (2022-04-11)
----------------------
+***********************
+ v20.14.1 (2022-04-11)
+***********************
Features - 20.14.1
-~~~~~~~~~~~~~~~~~~
-- Support for creating a virtual environment from a Python 2.7 framework on macOS 12 - by :user:`nickhutchinson`. (`#2284 `_)
+==================
+
+- Support for creating a virtual environment from a Python 2.7 framework on macOS 12 - by :user:`nickhutchinson`.
+ (`#2284 `_)
Bugfixes - 20.14.1
-~~~~~~~~~~~~~~~~~~
-- Upgrade embedded setuptools to ``62.1.0`` from ``61.0.0`` - by :user:`gaborbernat`. (`#2327 `_)
+==================
+- Upgrade embedded setuptools to ``62.1.0`` from ``61.0.0`` - by :user:`gaborbernat`. (`#2327
+ `_)
-v20.14.0 (2022-03-25)
----------------------
+***********************
+ v20.14.0 (2022-03-25)
+***********************
Features - 20.14.0
-~~~~~~~~~~~~~~~~~~
-- Support Nushell activation scripts with nu version ``0.60`` - by :user:`kubouch`. (`#2321 `_)
+==================
+
+- Support Nushell activation scripts with nu version ``0.60`` - by :user:`kubouch`. (`#2321
+ `_)
Bugfixes - 20.14.0
-~~~~~~~~~~~~~~~~~~
-- Upgrade embedded setuptools to ``61.0.0`` from ``60.10.0`` - by :user:`gaborbernat`. (`#2322 `_)
+==================
-v20.13.4 (2022-03-18)
----------------------
+- Upgrade embedded setuptools to ``61.0.0`` from ``60.10.0`` - by :user:`gaborbernat`. (`#2322
+ `_)
+
+***********************
+ v20.13.4 (2022-03-18)
+***********************
Bugfixes - 20.13.4
-~~~~~~~~~~~~~~~~~~
-- Improve performance of python startup inside created virtualenvs - by :user:`asottile`. (`#2317 `_)
-- Upgrade embedded setuptools to ``60.10.0`` from ``60.9.3`` - by :user:`gaborbernat`. (`#2320 `_)
+==================
+
+- Improve performance of python startup inside created virtualenvs - by :user:`asottile`. (`#2317
+ `_)
+- Upgrade embedded setuptools to ``60.10.0`` from ``60.9.3`` - by :user:`gaborbernat`. (`#2320
+ `_)
-v20.13.3 (2022-03-07)
----------------------
+***********************
+ v20.13.3 (2022-03-07)
+***********************
Bugfixes - 20.13.3
-~~~~~~~~~~~~~~~~~~
-- Avoid symlinking the contents of ``/usr`` into PyPy3.8+ virtualenvs - by :user:`stefanor`. (`#2310 `_)
-- Bump embed pip from ``22.0.3`` to ``22.0.4`` - by :user:`gaborbernat`. (`#2311 `_)
+==================
+- Avoid symlinking the contents of ``/usr`` into PyPy3.8+ virtualenvs - by :user:`stefanor`. (`#2310
+ `_)
+- Bump embed pip from ``22.0.3`` to ``22.0.4`` - by :user:`gaborbernat`. (`#2311
+ `_)
-v20.13.2 (2022-02-24)
----------------------
+***********************
+ v20.13.2 (2022-02-24)
+***********************
Bugfixes - 20.13.2
-~~~~~~~~~~~~~~~~~~
-- Upgrade embedded setuptools to ``60.9.3`` from ``60.6.0`` - by :user:`gaborbernat`. (`#2306 `_)
+==================
+- Upgrade embedded setuptools to ``60.9.3`` from ``60.6.0`` - by :user:`gaborbernat`. (`#2306
+ `_)
-v20.13.1 (2022-02-05)
----------------------
+***********************
+ v20.13.1 (2022-02-05)
+***********************
Bugfixes - 20.13.1
-~~~~~~~~~~~~~~~~~~
-- fix "execv() arg 2 must contain only strings" error on M1 MacOS (`#2282 `_)
-- Upgrade embedded setuptools to ``60.5.0`` from ``60.2.0`` - by :user:`asottile`. (`#2289 `_)
-- Upgrade embedded pip to ``22.0.3`` and setuptools to ``60.6.0`` - by :user:`gaborbernat` and :user:`asottile`. (`#2294 `_)
+==================
+- fix "execv() arg 2 must contain only strings" error on M1 MacOS (`#2282
+ `_)
+- Upgrade embedded setuptools to ``60.5.0`` from ``60.2.0`` - by :user:`asottile`. (`#2289
+ `_)
+- Upgrade embedded pip to ``22.0.3`` and setuptools to ``60.6.0`` - by :user:`gaborbernat` and :user:`asottile`. (`#2294
+ `_)
-v20.13.0 (2022-01-02)
----------------------
+***********************
+ v20.13.0 (2022-01-02)
+***********************
Features - 20.13.0
-~~~~~~~~~~~~~~~~~~
-- Add downloaded wheel information in the relevant JSON embed file to
- prevent additional downloads of the same wheel. - by :user:`mayeut`. (`#2268 `_)
+==================
+
+- Add downloaded wheel information in the relevant JSON embed file to prevent additional downloads of the same wheel. -
+ by :user:`mayeut`. (`#2268 `_)
Bugfixes - 20.13.0
-~~~~~~~~~~~~~~~~~~
-- Fix ``AttributeError: 'bool' object has no attribute 'error'`` when creating a
- Python 2.x virtualenv on macOS - by ``moreati``. (`#2269 `_)
-- Fix ``PermissionError: [Errno 1] Operation not permitted`` when creating a
- Python 2.x virtualenv on macOS/arm64 - by ``moreati``. (`#2271 `_)
+==================
+- Fix ``AttributeError: 'bool' object has no attribute 'error'`` when creating a Python 2.x virtualenv on macOS - by
+ ``moreati``. (`#2269 `_)
+- Fix ``PermissionError: [Errno 1] Operation not permitted`` when creating a Python 2.x virtualenv on macOS/arm64 - by
+ ``moreati``. (`#2271 `_)
-v20.12.1 (2022-01-01)
----------------------
+***********************
+ v20.12.1 (2022-01-01)
+***********************
Bugfixes - 20.12.1
-~~~~~~~~~~~~~~~~~~
-- Try using previous updates of ``pip``, ``setuptools`` & ``wheel``
- when inside an update grace period rather than always falling back
- to embedded wheels - by :user:`mayeut`. (`#2265 `_)
-- New patch versions of ``pip``, ``setuptools`` & ``wheel`` are now
- returned in the expected timeframe. - by :user:`mayeut`. (`#2266 `_)
-- Manual upgrades of ``pip``, ``setuptools`` & ``wheel`` are
- not discarded by a periodic update - by :user:`mayeut`. (`#2267 `_)
+==================
+- Try using previous updates of ``pip``, ``setuptools`` & ``wheel`` when inside an update grace period rather than
+ always falling back to embedded wheels - by :user:`mayeut`. (`#2265
+ `_)
+- New patch versions of ``pip``, ``setuptools`` & ``wheel`` are now returned in the expected timeframe. - by
+ :user:`mayeut`. (`#2266 `_)
+- Manual upgrades of ``pip``, ``setuptools`` & ``wheel`` are not discarded by a periodic update - by :user:`mayeut`.
+ (`#2267 `_)
-v20.12.0 (2021-12-31)
----------------------
+***********************
+ v20.12.0 (2021-12-31)
+***********************
Features - 20.12.0
-~~~~~~~~~~~~~~~~~~
-- Sign the python2 exe on Darwin arm64 - by :user:`tmspicer`. (`#2233 `_)
+==================
+
+- Sign the python2 exe on Darwin arm64 - by :user:`tmspicer`. (`#2233
+ `_)
Bugfixes - 20.12.0
-~~~~~~~~~~~~~~~~~~
-- Fix ``--download`` option - by :user:`mayeut`. (`#2120 `_)
-- Upgrade embedded setuptools to ``60.2.0`` from ``60.1.1`` - by :user:`gaborbernat`. (`#2263 `_)
+==================
+- Fix ``--download`` option - by :user:`mayeut`. (`#2120 `_)
+- Upgrade embedded setuptools to ``60.2.0`` from ``60.1.1`` - by :user:`gaborbernat`. (`#2263
+ `_)
-v20.11.2 (2021-12-29)
----------------------
+***********************
+ v20.11.2 (2021-12-29)
+***********************
Bugfixes - 20.11.2
-~~~~~~~~~~~~~~~~~~
-- Fix installation of pinned versions of ``pip``, ``setuptools`` & ``wheel`` - by :user:`mayeut`. (`#2203 `_)
+==================
+- Fix installation of pinned versions of ``pip``, ``setuptools`` & ``wheel`` - by :user:`mayeut`. (`#2203
+ `_)
-v20.11.1 (2021-12-29)
----------------------
+***********************
+ v20.11.1 (2021-12-29)
+***********************
Bugfixes - 20.11.1
-~~~~~~~~~~~~~~~~~~
-- Bump embed setuptools to ``60.1.1`` from ``60.1.0`` - by :user:`gaborbernat`. (`#2258 `_)
+==================
+- Bump embed setuptools to ``60.1.1`` from ``60.1.0`` - by :user:`gaborbernat`. (`#2258
+ `_)
-v20.11.0 (2021-12-28)
----------------------
+***********************
+ v20.11.0 (2021-12-28)
+***********************
Features - 20.11.0
-~~~~~~~~~~~~~~~~~~
-- Avoid deprecation warning from py-filelock argument - by :user:`ofek`. (`#2237 `_)
-- Upgrade embedded setuptools to ``61.1.0`` from ``58.3.0`` - by :user:`gaborbernat`. (`#2240 `_)
-- Drop the runtime dependency of ``backports.entry-points-selectable`` - by :user:`hroncok`. (`#2246 `_)
-- Fish: PATH variables should not be quoted when being set - by :user:`d3dave`. (`#2248 `_)
+==================
+- Avoid deprecation warning from py-filelock argument - by :user:`ofek`. (`#2237
+ `_)
+- Upgrade embedded setuptools to ``61.1.0`` from ``58.3.0`` - by :user:`gaborbernat`. (`#2240
+ `_)
+- Drop the runtime dependency of ``backports.entry-points-selectable`` - by :user:`hroncok`. (`#2246
+ `_)
+- Fish: PATH variables should not be quoted when being set - by :user:`d3dave`. (`#2248
+ `_)
-v20.10.0 (2021-11-01)
----------------------
+***********************
+ v20.10.0 (2021-11-01)
+***********************
Features - 20.10.0
-~~~~~~~~~~~~~~~~~~
+==================
+
- If a ``"venv"`` install scheme exists in ``sysconfig``, virtualenv now uses it to create new virtual environments.
- This allows Python distributors, such as Fedora, to patch/replace the default install scheme without affecting
- the paths in new virtual environments.
- A similar technique `was proposed to Python, for the venv module `_ - by ``hroncok`` (`#2208 `_)
-- The activated virtualenv prompt is now always wrapped in parentheses. This
- affects venvs created with the ``--prompt`` attribute, and matches virtualenv's
- behavior on par with venv. (`#2224 `_)
+ This allows Python distributors, such as Fedora, to patch/replace the default install scheme without affecting the
+ paths in new virtual environments. A similar technique `was proposed to Python, for the venv module
+ `_ - by ``hroncok`` (`#2208 `_)
+- The activated virtualenv prompt is now always wrapped in parentheses. This affects venvs created with the ``--prompt``
+ attribute, and matches virtualenv's behavior on par with venv. (`#2224
+ `_)
Bugfixes - 20.10.0
-~~~~~~~~~~~~~~~~~~
-- Fix broken prompt set up by activate.bat - by :user:`SiggyBar`. (`#2225 `_)
+==================
+- Fix broken prompt set up by activate.bat - by :user:`SiggyBar`. (`#2225
+ `_)
-v20.9.0 (2021-10-23)
---------------------
+**********************
+ v20.9.0 (2021-10-23)
+**********************
Features - 20.9.0
-~~~~~~~~~~~~~~~~~
-- Special-case ``--prompt .`` to the name of the current directory - by :user:`rkm`. (`#2220 `_)
+=================
+
+- Special-case ``--prompt .`` to the name of the current directory - by :user:`rkm`. (`#2220
+ `_)
- Add libffi-8.dll to pypy windows `#2218 `_ - by :user:`mattip`
Bugfixes - 20.9.0
-~~~~~~~~~~~~~~~~~
-- Fixed path collision that could lead to a PermissionError or writing to system
- directories when using PyPy3.8 - by :user:`mgorny`. (`#2182 `_)
+=================
+
+- Fixed path collision that could lead to a PermissionError or writing to system directories when using PyPy3.8 - by
+ :user:`mgorny`. (`#2182 `_)
- Upgrade embedded setuptools to ``58.3.0`` from ``58.1.0`` and pip to ``21.3.1`` from ``21.2.4`` - by
:user:`gaborbernat`. (`#2205 `_)
-- Remove stray closing parenthesis in activate.bat - by :user:`SiggyBar`. (`#2221 `_)
-
+- Remove stray closing parenthesis in activate.bat - by :user:`SiggyBar`. (`#2221
+ `_)
-v20.8.1 (2021-09-24)
---------------------
+**********************
+ v20.8.1 (2021-09-24)
+**********************
Bugfixes - 20.8.1
-~~~~~~~~~~~~~~~~~
-- Fixed a bug where while creating a venv on top of an existing one, without cleaning, when seeded
- wheel version mismatch occurred, multiple ``.dist-info`` directories may be present, confounding entrypoint
- discovery - by :user:`arcivanov` (`#2185 `_)
-- Bump embed setuptools from ``58.0.4`` to ``58.1.0`` - by :user:`gaborbernat`. (`#2195 `_)
+=================
+
+- Fixed a bug where while creating a venv on top of an existing one, without cleaning, when seeded wheel version
+ mismatch occurred, multiple ``.dist-info`` directories may be present, confounding entrypoint discovery - by
+ :user:`arcivanov` (`#2185 `_)
+- Bump embed setuptools from ``58.0.4`` to ``58.1.0`` - by :user:`gaborbernat`. (`#2195
+ `_)
Misc - 20.8.1
-~~~~~~~~~~~~~
-- `#2189 `_
+=============
+- `#2189 `_
-v20.8.0 (2021-09-16)
---------------------
+**********************
+ v20.8.0 (2021-09-16)
+**********************
-* upgrade embedded setuptools to ``58.0.4`` from ``57.4.0`` and pip to ``21.2.4`` from ``21.2.3``
-* Add nushell activation script
+- upgrade embedded setuptools to ``58.0.4`` from ``57.4.0`` and pip to ``21.2.4`` from ``21.2.3``
+- Add nushell activation script
-v20.7.2 (2021-08-10)
---------------------
+**********************
+ v20.7.2 (2021-08-10)
+**********************
Bugfixes - 20.7.2
-~~~~~~~~~~~~~~~~~
-- Upgrade embedded pip to ``21.2.3`` from ``21.2.2`` and wheel to ``0.37.0`` from ``0.36.2`` - by :user:`gaborbernat`. (`#2168 `_)
+=================
+- Upgrade embedded pip to ``21.2.3`` from ``21.2.2`` and wheel to ``0.37.0`` from ``0.36.2`` - by :user:`gaborbernat`.
+ (`#2168 `_)
-v20.7.1 (2021-08-09)
---------------------
+**********************
+ v20.7.1 (2021-08-09)
+**********************
Bugfixes - 20.7.1
-~~~~~~~~~~~~~~~~~
-- Fix unpacking dictionary items in PythonInfo.install_path (`#2165 `_)
+=================
+- Fix unpacking dictionary items in PythonInfo.install_path (`#2165 `_)
-v20.7.0 (2021-07-31)
---------------------
+**********************
+ v20.7.0 (2021-07-31)
+**********************
Bugfixes - 20.7.0
-~~~~~~~~~~~~~~~~~
-- upgrade embedded pip to ``21.2.2`` from ``21.1.3`` and setuptools to ``57.4.0`` from ``57.1.0`` - by :user:`gaborbernat` (`#2159 `_)
+=================
+
+- upgrade embedded pip to ``21.2.2`` from ``21.1.3`` and setuptools to ``57.4.0`` from ``57.1.0`` - by
+ :user:`gaborbernat` (`#2159 `_)
Deprecations and Removals - 20.7.0
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- Removed ``xonsh`` activator due to this breaking fairly often the CI and lack of support from those packages
- maintainers, upstream is encouraged to continue supporting the project as a
- `plugin `_ - by :user:`gaborbernat`. (`#2160 `_)
+==================================
+- Removed ``xonsh`` activator due to this breaking fairly often the CI and lack of support from those packages
+ maintainers, upstream is encouraged to continue supporting the project as a `plugin
+ `_ - by :user:`gaborbernat`. (`#2160
+ `_)
-v20.6.0 (2021-07-14)
---------------------
+**********************
+ v20.6.0 (2021-07-14)
+**********************
Features - 20.6.0
-~~~~~~~~~~~~~~~~~
-- Support Python interpreters without ``distutils`` (fallback to ``syconfig`` in these cases) - by :user:`gaborbernat`. (`#1910 `_)
+=================
+- Support Python interpreters without ``distutils`` (fallback to ``syconfig`` in these cases) - by :user:`gaborbernat`.
+ (`#1910 `_)
-v20.5.0 (2021-07-13)
---------------------
+**********************
+ v20.5.0 (2021-07-13)
+**********************
Features - 20.5.0
-~~~~~~~~~~~~~~~~~
-- Plugins now use 'selectable' entry points - by :user:`jaraco`. (`#2093 `_)
+=================
+
+- Plugins now use 'selectable' entry points - by :user:`jaraco`. (`#2093
+ `_)
- add libffi-7.dll to the hard-coded list of dlls for PyPy (`#2141 `_)
-- Use the better maintained ``platformdirs`` instead of ``appdirs`` - by :user:`gaborbernat`. (`#2142 `_)
+- Use the better maintained ``platformdirs`` instead of ``appdirs`` - by :user:`gaborbernat`. (`#2142
+ `_)
Bugfixes - 20.5.0
-~~~~~~~~~~~~~~~~~
-- Bump pip the embedded pip ``21.1.3`` and setuptools to ``57.1.0`` - by :user:`gaborbernat`. (`#2135 `_)
+=================
+
+- Bump pip the embedded pip ``21.1.3`` and setuptools to ``57.1.0`` - by :user:`gaborbernat`. (`#2135
+ `_)
Deprecations and Removals - 20.5.0
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- Drop python ``3.4`` support as it has been over 2 years since EOL - by :user:`gaborbernat`. (`#2141 `_)
+==================================
+- Drop python ``3.4`` support as it has been over 2 years since EOL - by :user:`gaborbernat`. (`#2141
+ `_)
-v20.4.7 (2021-05-24)
---------------------
+**********************
+ v20.4.7 (2021-05-24)
+**********************
Bugfixes - 20.4.7
-~~~~~~~~~~~~~~~~~
-- Upgrade embedded pip to ``21.1.2`` and setuptools to ``57.0.0`` - by :user:`gaborbernat`. (`#2123 `_)
+=================
+- Upgrade embedded pip to ``21.1.2`` and setuptools to ``57.0.0`` - by :user:`gaborbernat`. (`#2123
+ `_)
-v20.4.6 (2021-05-05)
---------------------
+**********************
+ v20.4.6 (2021-05-05)
+**********************
Bugfixes - 20.4.6
-~~~~~~~~~~~~~~~~~
-- Fix ``site.getsitepackages()`` broken on python2 on debian - by :user:`freundTech`. (`#2105 `_)
+=================
+- Fix ``site.getsitepackages()`` broken on python2 on debian - by :user:`freundTech`. (`#2105
+ `_)
-v20.4.5 (2021-05-05)
---------------------
+**********************
+ v20.4.5 (2021-05-05)
+**********************
Bugfixes - 20.4.5
-~~~~~~~~~~~~~~~~~
-- Bump pip to ``21.1.1`` from ``21.0.1`` - by :user:`gaborbernat`. (`#2104 `_)
-- Fix ``site.getsitepackages()`` ignoring ``--system-site-packages`` on python2 - by :user:`freundTech`. (`#2106 `_)
+=================
+- Bump pip to ``21.1.1`` from ``21.0.1`` - by :user:`gaborbernat`. (`#2104
+ `_)
+- Fix ``site.getsitepackages()`` ignoring ``--system-site-packages`` on python2 - by :user:`freundTech`. (`#2106
+ `_)
-v20.4.4 (2021-04-20)
---------------------
+**********************
+ v20.4.4 (2021-04-20)
+**********************
Bugfixes - 20.4.4
-~~~~~~~~~~~~~~~~~
-- Built in discovery class is always preferred over plugin supplied classes. (`#2087 `_)
-- Upgrade embedded setuptools to ``56.0.0`` by :user:`gaborbernat`. (`#2094 `_)
+=================
+- Built in discovery class is always preferred over plugin supplied classes. (`#2087
+ `_)
+- Upgrade embedded setuptools to ``56.0.0`` by :user:`gaborbernat`. (`#2094
+ `_)
-v20.4.3 (2021-03-16)
---------------------
+**********************
+ v20.4.3 (2021-03-16)
+**********************
Bugfixes - 20.4.3
-~~~~~~~~~~~~~~~~~
-- Bump embedded setuptools from ``52.0.0`` to ``54.1.2`` - by :user:`gaborbernat` (`#2069 `_)
-- Fix PyPy3 stdlib on Windows is incorrect - by :user:`gaborbernat`. (`#2071 `_)
+=================
+- Bump embedded setuptools from ``52.0.0`` to ``54.1.2`` - by :user:`gaborbernat` (`#2069
+ `_)
+- Fix PyPy3 stdlib on Windows is incorrect - by :user:`gaborbernat`. (`#2071
+ `_)
-v20.4.2 (2021-02-01)
---------------------
+**********************
+ v20.4.2 (2021-02-01)
+**********************
Bugfixes - 20.4.2
-~~~~~~~~~~~~~~~~~
-- Running virtualenv ``--upgrade-embed-wheels`` crashes - by :user:`gaborbernat`. (`#2058 `_)
+=================
+- Running virtualenv ``--upgrade-embed-wheels`` crashes - by :user:`gaborbernat`. (`#2058
+ `_)
-v20.4.1 (2021-01-31)
---------------------
+**********************
+ v20.4.1 (2021-01-31)
+**********************
Bugfixes - 20.4.1
-~~~~~~~~~~~~~~~~~
-- Bump embedded pip and setuptools packages to latest upstream supported (``21.0.1`` and ``52.0.0``) - by :user:`gaborbernat`. (`#2060 `_)
+=================
+- Bump embedded pip and setuptools packages to latest upstream supported (``21.0.1`` and ``52.0.0``) - by
+ :user:`gaborbernat`. (`#2060 `_)
-v20.4.0 (2021-01-19)
---------------------
+**********************
+ v20.4.0 (2021-01-19)
+**********************
Features - 20.4.0
-~~~~~~~~~~~~~~~~~
+=================
+
- On the programmatic API allow passing in the environment variable dictionary to use, defaults to ``os.environ`` if not
specified - by :user:`gaborbernat`. (`#2054 `_)
Bugfixes - 20.4.0
-~~~~~~~~~~~~~~~~~
-- Upgrade embedded setuptools to ``51.3.3`` from ``51.1.2`` - by :user:`gaborbernat`. (`#2055 `_)
+=================
+- Upgrade embedded setuptools to ``51.3.3`` from ``51.1.2`` - by :user:`gaborbernat`. (`#2055
+ `_)
-v20.3.1 (2021-01-13)
---------------------
+**********************
+ v20.3.1 (2021-01-13)
+**********************
Bugfixes - 20.3.1
-~~~~~~~~~~~~~~~~~
-- Bump embed pip to ``20.3.3``, setuptools to ``51.1.1`` and wheel to ``0.36.2`` - by :user:`gaborbernat`. (`#2036 `_)
-- Allow unfunctioning of pydoc to fail freely so that virtualenvs can be
- activated under Zsh with set -e (since otherwise ``unset -f`` and
- ``unfunction`` exit with 1 if the function does not exist in Zsh) - by
- :user:`d125q`. (`#2049 `_)
-- Drop cached python information if the system executable is no longer present (for example when the executable is a
- shim and the mapped executable is replaced - such is the case with pyenv) - by :user:`gaborbernat`. (`#2050 `_)
+=================
+- Bump embed pip to ``20.3.3``, setuptools to ``51.1.1`` and wheel to ``0.36.2`` - by :user:`gaborbernat`. (`#2036
+ `_)
+- Allow unfunctioning of pydoc to fail freely so that virtualenvs can be activated under Zsh with set -e (since
+ otherwise ``unset -f`` and ``unfunction`` exit with 1 if the function does not exist in Zsh) - by :user:`d125q`.
+ (`#2049 `_)
+- Drop cached python information if the system executable is no longer present (for example when the executable is a
+ shim and the mapped executable is replaced - such is the case with pyenv) - by :user:`gaborbernat`. (`#2050
+ `_)
-v20.3.0 (2021-01-10)
---------------------
+**********************
+ v20.3.0 (2021-01-10)
+**********************
Features - 20.3.0
-~~~~~~~~~~~~~~~~~
+=================
+
- The builtin discovery takes now a ``--try-first-with`` argument and is first attempted as valid interpreters. One can
- use this to force discovery of a given python executable when the discovery order/mechanism raises errors -
- by :user:`gaborbernat`. (`#2046 `_)
+ use this to force discovery of a given python executable when the discovery order/mechanism raises errors - by
+ :user:`gaborbernat`. (`#2046 `_)
Bugfixes - 20.3.0
-~~~~~~~~~~~~~~~~~
-- On Windows python ``3.7+`` distributions where the exe shim is missing fallback to the old ways - by :user:`gaborbernat`. (`#1986 `_)
-- When discovering interpreters on Windows, via the PEP-514, prefer ``PythonCore`` releases over other ones. virtualenv
- is used via pip mostly by this distribution, so prefer it over other such as conda - by :user:`gaborbernat`. (`#2046 `_)
+=================
+- On Windows python ``3.7+`` distributions where the exe shim is missing fallback to the old ways - by
+ :user:`gaborbernat`. (`#1986 `_)
+- When discovering interpreters on Windows, via the PEP-514, prefer ``PythonCore`` releases over other ones. virtualenv
+ is used via pip mostly by this distribution, so prefer it over other such as conda - by :user:`gaborbernat`. (`#2046
+ `_)
-v20.2.2 (2020-12-07)
---------------------
+**********************
+ v20.2.2 (2020-12-07)
+**********************
Bugfixes - 20.2.2
-~~~~~~~~~~~~~~~~~
-- Bump pip to ``20.3.1``, setuptools to ``51.0.0`` and wheel to ``0.36.1`` - by :user:`gaborbernat`. (`#2029 `_)
+=================
+- Bump pip to ``20.3.1``, setuptools to ``51.0.0`` and wheel to ``0.36.1`` - by :user:`gaborbernat`. (`#2029
+ `_)
-v20.2.1 (2020-11-23)
---------------------
+**********************
+ v20.2.1 (2020-11-23)
+**********************
No significant changes.
-
-v20.2.0 (2020-11-21)
---------------------
+**********************
+ v20.2.0 (2020-11-21)
+**********************
Features - 20.2.0
-~~~~~~~~~~~~~~~~~
-- Optionally skip VCS ignore directive for entire virtualenv directory, using option :option:`no-vcs-ignore`, by default ``False``. (`#2003 `_)
-- Add ``--read-only-app-data`` option to allow for creation based on an existing
- app data cache which is non-writable. This may be useful (for example) to
- produce a docker image where the app-data is pre-populated.
+=================
+
+- Optionally skip VCS ignore directive for entire virtualenv directory, using option :option:`no-vcs-ignore`, by default
+ ``False``. (`#2003 `_)
+- Add ``--read-only-app-data`` option to allow for creation based on an existing app data cache which is non-writable.
+ This may be useful (for example) to produce a docker image where the app-data is pre-populated.
.. code-block:: dockerfile
@@ -1087,114 +1432,147 @@ Features - 20.2.0
Patch by :user:`asottile`. (`#2009 `_)
Bugfixes - 20.2.0
-~~~~~~~~~~~~~~~~~
-- Fix processing of the ``VIRTUALENV_PYTHON`` environment variable and make it
- multi-value as well (separated by comma) - by :user:`pneff`. (`#1998 `_)
+=================
+- Fix processing of the ``VIRTUALENV_PYTHON`` environment variable and make it multi-value as well (separated by comma)
+ - by :user:`pneff`. (`#1998 `_)
-v20.1.0 (2020-10-25)
---------------------
+**********************
+ v20.1.0 (2020-10-25)
+**********************
Features - 20.1.0
-~~~~~~~~~~~~~~~~~
+=================
+
- The python specification can now take one or more values, first found is used to create the virtual environment - by
:user:`gaborbernat`. (`#1995 `_)
-
-v20.0.35 (2020-10-15)
----------------------
+***********************
+ v20.0.35 (2020-10-15)
+***********************
Bugfixes - 20.0.35
-~~~~~~~~~~~~~~~~~~
-- Bump embedded setuptools from ``50.3.0`` to ``50.3.1`` - by :user:`gaborbernat`. (`#1982 `_)
-- After importing virtualenv passing cwd to a subprocess calls breaks with ``invalid directory`` - by :user:`gaborbernat`. (`#1983 `_)
+==================
+- Bump embedded setuptools from ``50.3.0`` to ``50.3.1`` - by :user:`gaborbernat`. (`#1982
+ `_)
+- After importing virtualenv passing cwd to a subprocess calls breaks with ``invalid directory`` - by
+ :user:`gaborbernat`. (`#1983 `_)
-v20.0.34 (2020-10-12)
----------------------
+***********************
+ v20.0.34 (2020-10-12)
+***********************
Bugfixes - 20.0.34
-~~~~~~~~~~~~~~~~~~
-- Align with venv module when creating virtual environments with builtin creator on Windows 3.7 and later
- - by :user:`gaborbernat`. (`#1782 `_)
-- Handle Cygwin path conversion in the activation script - by :user:`davidcoghlan`. (`#1969 `_)
+==================
+- Align with venv module when creating virtual environments with builtin creator on Windows 3.7 and later - by
+ :user:`gaborbernat`. (`#1782 `_)
+- Handle Cygwin path conversion in the activation script - by :user:`davidcoghlan`. (`#1969
+ `_)
-v20.0.33 (2020-10-04)
----------------------
+***********************
+ v20.0.33 (2020-10-04)
+***********************
Bugfixes - 20.0.33
-~~~~~~~~~~~~~~~~~~
-- Fix ``None`` type error in cygwin if POSIX path in dest - by :user:`danyeaw`. (`#1962 `_)
-- Fix Python 3.4 incompatibilities (added back to the CI) - by :user:`gaborbernat`. (`#1963 `_)
+==================
+- Fix ``None`` type error in cygwin if POSIX path in dest - by :user:`danyeaw`. (`#1962
+ `_)
+- Fix Python 3.4 incompatibilities (added back to the CI) - by :user:`gaborbernat`. (`#1963
+ `_)
-v20.0.32 (2020-10-01)
----------------------
+***********************
+ v20.0.32 (2020-10-01)
+***********************
Bugfixes - 20.0.32
-~~~~~~~~~~~~~~~~~~
-- For activation scripts always use UNIX line endings (unless it's BATCH shell related) - by :user:`saytosid`. (`#1818 `_)
-- Upgrade embedded pip to ``20.2.1`` and setuptools to ``49.4.0`` - by :user:`gaborbernat`. (`#1918 `_)
-- Avoid spawning new windows when doing seed package upgrades in the background on Windows - by :user:`gaborbernat`. (`#1928 `_)
-- Fix a bug that reading and writing on the same file may cause race on multiple processes. (`#1938 `_)
-- Upgrade embedded setuptools to ``50.2.0`` and pip to ``20.2.3`` - by :user:`gaborbernat`. (`#1939 `_)
-- Provide correct path for bash activator in cygwin or msys2 - by :user:`danyeaw`. (`#1940 `_)
-- Relax importlib requirement to allow version<3 - by :user:`usamasadiq` (`#1953 `_)
-- pth files were not processed on CPython2 if $PYTHONPATH was pointing to site-packages/ - by :user:`navytux`. (`#1959 `_) (`#1960 `_)
-
-
-v20.0.31 (2020-08-17)
----------------------
+==================
+
+- For activation scripts always use UNIX line endings (unless it's BATCH shell related) - by :user:`saytosid`. (`#1818
+ `_)
+- Upgrade embedded pip to ``20.2.1`` and setuptools to ``49.4.0`` - by :user:`gaborbernat`. (`#1918
+ `_)
+- Avoid spawning new windows when doing seed package upgrades in the background on Windows - by :user:`gaborbernat`.
+ (`#1928 `_)
+- Fix a bug that reading and writing on the same file may cause race on multiple processes. (`#1938
+ `_)
+- Upgrade embedded setuptools to ``50.2.0`` and pip to ``20.2.3`` - by :user:`gaborbernat`. (`#1939
+ `_)
+- Provide correct path for bash activator in cygwin or msys2 - by :user:`danyeaw`. (`#1940
+ `_)
+- Relax importlib requirement to allow version<3 - by :user:`usamasadiq` (`#1953
+ `_)
+- pth files were not processed on CPython2 if $PYTHONPATH was pointing to site-packages/ - by :user:`navytux`. (`#1959
+ `_) (`#1960 `_)
+
+***********************
+ v20.0.31 (2020-08-17)
+***********************
Bugfixes - 20.0.31
-~~~~~~~~~~~~~~~~~~
-- Upgrade embedded pip to ``20.2.1``, setuptools to ``49.6.0`` and wheel to ``0.35.1`` - by :user:`gaborbernat`. (`#1918 `_)
+==================
+- Upgrade embedded pip to ``20.2.1``, setuptools to ``49.6.0`` and wheel to ``0.35.1`` - by :user:`gaborbernat`. (`#1918
+ `_)
-v20.0.30 (2020-08-04)
----------------------
+***********************
+ v20.0.30 (2020-08-04)
+***********************
Bugfixes - 20.0.30
-~~~~~~~~~~~~~~~~~~
-- Upgrade pip to ``20.2.1`` and setuptools to ``49.2.1`` - by :user:`gaborbernat`. (`#1915 `_)
+==================
+- Upgrade pip to ``20.2.1`` and setuptools to ``49.2.1`` - by :user:`gaborbernat`. (`#1915
+ `_)
-v20.0.29 (2020-07-31)
----------------------
+***********************
+ v20.0.29 (2020-07-31)
+***********************
Bugfixes - 20.0.29
-~~~~~~~~~~~~~~~~~~
-- Upgrade embedded pip from version ``20.1.2`` to ``20.2`` - by :user:`gaborbernat`. (`#1909 `_)
+==================
+- Upgrade embedded pip from version ``20.1.2`` to ``20.2`` - by :user:`gaborbernat`. (`#1909
+ `_)
-v20.0.28 (2020-07-24)
----------------------
+***********************
+ v20.0.28 (2020-07-24)
+***********************
Bugfixes - 20.0.28
-~~~~~~~~~~~~~~~~~~
-- Fix test suite failing if run from system Python - by :user:`gaborbernat`. (`#1882 `_)
+==================
+
+- Fix test suite failing if run from system Python - by :user:`gaborbernat`. (`#1882
+ `_)
- Provide ``setup_logging`` flag to python API so that users can bypass logging handling if their application already
performs this - by :user:`gaborbernat`. (`#1896 `_)
- Use ``\n`` instead if ``\r\n`` as line separator for report (because Python already performs this transformation
- automatically upon write to the logging pipe) - by :user:`gaborbernat`. (`#1905 `_)
+ automatically upon write to the logging pipe) - by :user:`gaborbernat`. (`#1905
+ `_)
-
-v20.0.27 (2020-07-15)
----------------------
+***********************
+ v20.0.27 (2020-07-15)
+***********************
Bugfixes - 20.0.27
-~~~~~~~~~~~~~~~~~~
-- No longer preimport threading to fix support for `gpython `_ and `gevent `_ - by :user:`navytux`. (`#1897 `_)
-- Upgrade setuptools from ``49.2.0`` on ``Python 3.5+`` - by :user:`gaborbernat`. (`#1898 `_)
+==================
+- No longer preimport threading to fix support for `gpython `_ and `gevent
+ `_ - by :user:`navytux`. (`#1897 `_)
+- Upgrade setuptools from ``49.2.0`` on ``Python 3.5+`` - by :user:`gaborbernat`. (`#1898
+ `_)
-v20.0.26 (2020-07-07)
----------------------
+***********************
+ v20.0.26 (2020-07-07)
+***********************
Bugfixes - 20.0.26
-~~~~~~~~~~~~~~~~~~
-- Bump dependency ``distutils >= 0.3.1`` - by :user:`gaborbernat`. (`#1880 `_)
+==================
+
+- Bump dependency ``distutils >= 0.3.1`` - by :user:`gaborbernat`. (`#1880
+ `_)
- Improve periodic update handling:
- better logging output while running and enable logging on background process call (
@@ -1203,36 +1581,45 @@ Bugfixes - 20.0.26
- stop downloading wheels once we reach the embedded version,
by :user:`gaborbernat`. (`#1883 `_)
-- Do not print error message if the application exists with ``SystemExit(0)`` - by :user:`gaborbernat`. (`#1885 `_)
-- Upgrade embedded setuptools from ``47.3.1`` to ``49.1.0`` for Python ``3.5+`` - by :user:`gaborbernat`. (`#1887 `_)
+- Do not print error message if the application exists with ``SystemExit(0)`` - by :user:`gaborbernat`. (`#1885
+ `_)
+- Upgrade embedded setuptools from ``47.3.1`` to ``49.1.0`` for Python ``3.5+`` - by :user:`gaborbernat`. (`#1887
+ `_)
-v20.0.25 (2020-06-23)
----------------------
+***********************
+ v20.0.25 (2020-06-23)
+***********************
Bugfixes - 20.0.25
-~~~~~~~~~~~~~~~~~~
-- Fix that when the ``app-data`` seeders image creation fails the exception is silently ignored. Avoid two virtual environment creations to step on each others toes by using a lock while creating the base images. By :user:`gaborbernat`. (`#1869 `_)
+==================
+- Fix that when the ``app-data`` seeders image creation fails the exception is silently ignored. Avoid two virtual
+ environment creations to step on each others toes by using a lock while creating the base images. By
+ :user:`gaborbernat`. (`#1869 `_)
-v20.0.24 (2020-06-22)
----------------------
+***********************
+ v20.0.24 (2020-06-22)
+***********************
Features - 20.0.24
-~~~~~~~~~~~~~~~~~~
+==================
+
- Ensure that the seeded packages do not get too much out of date:
- add a CLI flag that triggers upgrade of embedded wheels under :option:`upgrade-embed-wheels`
- - periodically (once every 14 days) upgrade the embedded wheels in a background process, and use them if they have been
- released for more than 28 days (can be disabled via :option:`no-periodic-update`)
+ - periodically (once every 14 days) upgrade the embedded wheels in a background process, and use them if they have
+ been released for more than 28 days (can be disabled via :option:`no-periodic-update`)
More details under :ref:`wheels` - by :user:`gaborbernat`. (`#1821 `_)
+
- Upgrade embed wheel content:
- ship wheels for Python ``3.9`` and ``3.10``
- upgrade setuptools for Python ``3.5+`` from ``47.1.1`` to ``47.3.1``
by :user:`gaborbernat`. (`#1841 `_)
+
- Display the installed seed package versions in the final summary output, for example:
.. code-block:: console
@@ -1245,249 +1632,317 @@ Features - 20.0.24
by :user:`gaborbernat`. (`#1864