python / python/cpython

On Windows, VENV does not copy pip module into a new created virtual environments

オープン
#139,018 コメント 4 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

stdlib topic-venv type-bug
主要言語
Python
スター
77.2k
フォーク
36k
PR マージ指標
PR 指標を取得中

説明

Bug report

Bug description:

When creating a new isolated environment via VENVE, module pip is not installed and does not exist in Lib/site-packages. The command pip is available but still operates on non-virtual environment level.

Specification
  • Windows 10 Home (22H2)
  • PowerShell 7.5.3
  • Python 3.13.7
  • Launcher (py.exe).
Steps to reproduce the issue
  • Run py -m venv .venv
  • Activate environment: .\ .venv\Scripts\Activate.ps1
  • Try to upgrade pip: python -m pip install pip --upgrade
  • Python will report the error that pip is not installed.

Other distribution s.a. 3.12 and 3.11 have the same issue.

Description

I simply run the following command py -m venv .venv to create a new environment, followed by activation .venv\Scripts\Activate.ps1. I've got a new prompt (.venv) PS D ...> . The Get-Command python indicates the correct path to python.exe: <local path>\.venv\Scripts\python.exe.

Here's the problem. After activating new environment, while pip is still available as a standalone program, it does not work on a local level. If I try to run pip install numpy --dry-run, I get the report

Requirement already satisfied: numpy in <user>\appdata\local\programs\python\python313\lib\site-packages (2.3.3)

I believe pip should work on a local level. BTW, if I run the command Get-Command pip, the path to pip is

<User>\AppData\Local\Programs\Python\Python313\Scripts\pip.exe
Impossible to install new modules

This obviously leads to the problem of not being able to install new modules in newly created environments because pip is missing. For instance python -m pip install pip --upgrade issues the error

`<local path>\.venv\Scripts\python.exe: No module named pip

while python still works as expected, that is Get-Command python outputs

<local path>\.venv\Scripts\python.exe

I can also run Get-Children -Recurse -Path ".venv/" to check local Lib/site-packages

    Directory: <Local Path>\.venv

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----          16/09/2025    12:20                Include
d----          16/09/2025    12:20                Lib
d----          16/09/2025    12:20                Scripts
-a---          16/09/2025    12:20             71 .gitignore
-a---          16/09/2025    12:20            338 pyvenv.cfg

    Directory: <Local Path>\.venv\Lib

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----          16/09/2025    12:20                site-packages

    Directory: <Local Path>\.venv\Scripts

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---          16/09/2025    12:20           2208 activate
-a---          16/09/2025    12:20           1022 activate.bat
-a---          16/09/2025    12:20           2281 activate.fish
-a---          06/08/2025    16:16           9031 Activate.ps1
-a---          06/08/2025    16:14            393 deactivate.bat
-a---          06/08/2025    16:15         255320 python.exe
-a---          06/08/2025    16:15         251736 pythonw.exe

    Directory: <Local Path>\__pycache__

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---          29/07/2024    16:12          15096 backup.cpython-312.pyc

but the folder Lib/site-packages is empty. please, note Get-Children -Recurse ignores empty folders in further iteration.


Possible workarounds

The only working workaround is to copy pip and pip-25.2.dist-info from global Lib/site-packages into isolated environment's Lib/site-packages.

CPython versions tested on:

CPython main branch

Operating systems tested on:

Windows

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

py -m venv .venv のエントリーポイントから始め、レポートに記載されている Windows PowerShell コマンドを再現します。新しい環境が pip をどのように初期化するかを確認し、空の Lib/site-packages ディレクトリと照合して結果を検証します。完了条件は、グローバルインストールではなく環境の Python を通じて pip を利用できることです。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
python
領域
tooling
issue の種類
バグ
難易度
3/5
見積もり時間
1〜2日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
45/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。