Skip to content

Bump virtualenv from 20.36.1 to 20.38.0#12094

Open
dependabot[bot] wants to merge 1 commit into3.14from
dependabot/pip/3.14/virtualenv-20.38.0
Open

Bump virtualenv from 20.36.1 to 20.38.0#12094
dependabot[bot] wants to merge 1 commit into3.14from
dependabot/pip/3.14/virtualenv-20.38.0

Conversation

@dependabot
Copy link
Contributor

@dependabot dependabot bot commented on behalf of github Feb 19, 2026

Bumps virtualenv from 20.36.1 to 20.38.0.

Release notes

Sourced from virtualenv's releases.

20.38.0

What's Changed

New Contributors

Full Changelog: pypa/virtualenv@20.37.0...20.38.0

Changelog

Sourced from virtualenv's changelog.

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)


Commits
  • fbbb97d release 20.38.0
  • c5240c7 🔧 chore(tox): migrate tox.ini to tox.toml (#3050)
  • 6ff2e3e 🐛 fix(discovery): harden subprocess interrogation and test reliability (#3054)
  • d7919e5 Fix bash activate PKG_CONFIG_PATH unbound variable under bash -u (#3047)
  • 39568b0 [pre-commit.ci] pre-commit autoupdate (#3043)
  • f745000 🔒 security(workflows): add explicit permissions to all jobs
  • fda5bbc 🐛 fix(release): clear coverage env vars in release env
  • 1ecf0ed 👷 ci(release): split into release and tag-triggered publish (#3042)
  • 4fb0401 📝 docs: restructure to follow Diataxis framework (#3041)
  • 834c7ff 👷 ci(release): scope GH_RELEASE_TOKEN to release environment
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

Bumps [virtualenv](https://github.com/pypa/virtualenv) from 20.36.1 to 20.38.0.
- [Release notes](https://github.com/pypa/virtualenv/releases)
- [Changelog](https://github.com/pypa/virtualenv/blob/main/docs/changelog.rst)
- [Commits](pypa/virtualenv@20.36.1...20.38.0)

---
updated-dependencies:
- dependency-name: virtualenv
  dependency-version: 20.38.0
  dependency-type: indirect
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot bot added the dependencies Pull requests that update a dependency file label Feb 19, 2026
@dependabot dependabot bot added the dependencies Pull requests that update a dependency file label Feb 19, 2026
@github-actions github-actions bot enabled auto-merge (squash) February 19, 2026 10:41
@codspeed-hq
Copy link

codspeed-hq bot commented Feb 19, 2026

Merging this PR will not alter performance

✅ 59 untouched benchmarks


Comparing dependabot/pip/3.14/virtualenv-20.38.0 (853f8d2) with 3.14 (800360a)1

Open in CodSpeed

Footnotes

  1. No successful run was found on 3.14 (564cdbf) during the generation of this report, so 800360a was used instead as the comparison base. There might be some changes unrelated to this pull request in this report.

@codecov
Copy link

codecov bot commented Feb 19, 2026

❌ 1 Tests Failed:

Tests completed Failed Passed Skipped
4369 1 4368 39
View the full list of 1 ❄️ flaky test(s)
tests.test_client_ws_functional::test_heartbeat_no_pong[pyloop]

Flake rate in main: 4.76% (Passed 20 times, Failed 1 times)

Stack Traces | 0.431s run time
aiohttp_client = <function aiohttp_client.<locals>.go at 0x109462a20>

    #x1B[0m#x1B[94masync#x1B[39;49;00m #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mtest_heartbeat_no_pong#x1B[39;49;00m(aiohttp_client: AiohttpClient) -> #x1B[94mNone#x1B[39;49;00m:#x1B[90m#x1B[39;49;00m
    #x1B[90m    #x1B[39;49;00m#x1B[33m"""Test that the connection is closed if no pong is received without sending messages."""#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        ping_received = #x1B[94mFalse#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        #x1B[94masync#x1B[39;49;00m #x1B[94mdef#x1B[39;49;00m#x1B[90m #x1B[39;49;00m#x1B[92mhandler#x1B[39;49;00m(request):#x1B[90m#x1B[39;49;00m
            #x1B[94mnonlocal#x1B[39;49;00m ping_received#x1B[90m#x1B[39;49;00m
            ws = web.WebSocketResponse(autoping=#x1B[94mFalse#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
            #x1B[94mawait#x1B[39;49;00m ws.prepare(request)#x1B[90m#x1B[39;49;00m
            msg = #x1B[94mawait#x1B[39;49;00m ws.receive()#x1B[90m#x1B[39;49;00m
            #x1B[94mif#x1B[39;49;00m msg.type == aiohttp.WSMsgType.ping:#x1B[90m#x1B[39;49;00m
                ping_received = #x1B[94mTrue#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
            #x1B[94mawait#x1B[39;49;00m ws.receive()#x1B[90m#x1B[39;49;00m
            #x1B[94mreturn#x1B[39;49;00m ws#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        app = web.Application()#x1B[90m#x1B[39;49;00m
        app.router.add_route(#x1B[33m"#x1B[39;49;00m#x1B[33mGET#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, #x1B[33m"#x1B[39;49;00m#x1B[33m/#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, handler)#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        client = #x1B[94mawait#x1B[39;49;00m aiohttp_client(app)#x1B[90m#x1B[39;49;00m
        resp = #x1B[94mawait#x1B[39;49;00m client.ws_connect(#x1B[33m"#x1B[39;49;00m#x1B[33m/#x1B[39;49;00m#x1B[33m"#x1B[39;49;00m, heartbeat=#x1B[94m0.1#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
    #x1B[90m#x1B[39;49;00m
        #x1B[90m# Connection should be closed roughly after 1.5x heartbeat.#x1B[39;49;00m#x1B[90m#x1B[39;49;00m
        #x1B[94mawait#x1B[39;49;00m asyncio.sleep(#x1B[94m0.2#x1B[39;49;00m)#x1B[90m#x1B[39;49;00m
        #x1B[94massert#x1B[39;49;00m ping_received#x1B[90m#x1B[39;49;00m
>       #x1B[94massert#x1B[39;49;00m resp.close_code #x1B[95mis#x1B[39;49;00m WSCloseCode.ABNORMAL_CLOSURE#x1B[90m#x1B[39;49;00m
#x1B[1m#x1B[31mE       assert None is <WSCloseCode.ABNORMAL_CLOSURE: 1006>#x1B[0m
#x1B[1m#x1B[31mE        +  where None = <aiohttp.client_ws.ClientWebSocketResponse object at 0x10844d490>.close_code#x1B[0m
#x1B[1m#x1B[31mE        +  and   <WSCloseCode.ABNORMAL_CLOSURE: 1006> = WSCloseCode.ABNORMAL_CLOSURE#x1B[0m

aiohttp_client = <function aiohttp_client.<locals>.go at 0x109462a20>
app        = <Application 0x10844da10>
client     = <aiohttp.test_utils.TestClient object at 0x107e72610>
handler    = <function test_heartbeat_no_pong.<locals>.handler at 0x109463100>
ping_received = True
resp       = <aiohttp.client_ws.ClientWebSocketResponse object at 0x10844d490>

#x1B[1m#x1B[31mtests/test_client_ws_functional.py#x1B[0m:800: AssertionError

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants

Comments