actions / actions/setup-python
pip is broken after downgrade on Windows pypy-3.11
还没有人认领这个 Issue。
- 主要语言
- TypeScript
- 星标
- 2.2k
- 派生
- 739
- 平均合并
- 6 天 18 小时
- 30 天内合并 PR
- 1
描述
Description:
When using the setup-python action with pypy-3.11 on Windows, installing a version of pip older than the version pre-installed by setup-python results in a completely broken pip.
Here is an example workflow run that demonstrates the issue:
https://github.com/bashonly/setup-python-pypy-pip-bug/actions/runs/30870303776
Action version:
reproducible on v7.0.0, v6.3.0, v6.2.0, possibly older versions
Platform:
- Windows
(not reproducible on Ubuntu)
Runner type:
- Hosted
Tools version:
pypy-3.11
Repro steps:
- Create a GHA workflow with a job that runs on
windows-latest - Add a step that uses
actions/setup-pythonwithpython-version: pypy-3.11 - Add a step that downgrades pip, e.g.
python -m pip install "pip==26.1.2" - Add a step that attempts to use the downgraded pip, e.g.
python -m pip install requests - Run the workflow
Here is a reproducer workflow:
demo.yml
name: PyPy pip bug MRE
on:
workflow_dispatch:
permissions:
contents: read
jobs:
demonstrate:
name: Demonstrate PyPy pip issue
permissions:
contents: read
runs-on: windows-latest
steps:
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
with:
python-version: pypy-3.11
- name: Downgrade pip
run: |
python -m pip install "pip==26.1.2"
- name: Use pip
run: |
python -m pip install -U requests
Expected behavior:
The downgraded pip should not be broken.
Actual behavior:
The downgraded pip immediately raises an ImportError upon execution.
Analysis:
The root cause seems to be setup-python unconditionally upgrading pip to the latest version using the --ignore-installed pip flag:
The --ignore-installed option tells pip not to uninstall any existing version of the package, but instead to merely install on top of any existing packages. This seems to cause some confusion as to what version is actually installed, as evidenced by the setup-python output from the example workflow run log:
setup-python log snippet
Installing and updating pip
C:\hostedtoolcache\windows\PyPy\3.11.15\x64\python.exe -m ensurepip
Looking in links: c:\Users\RUNNER~1\AppData\Local\Temp\tmpz17a6bza
Processing c:\users\runner~1\appdata\local\temp\tmpz17a6bza\setuptools-79.0.1-py3-none-any.whl
Processing c:\users\runner~1\appdata\local\temp\tmpz17a6bza\pip-24.0-py3-none-any.whl
Installing collected packages: setuptools, pip
WARNING: The scripts pip3.11.exe and pip3.exe are installed in 'C:\hostedtoolcache\windows\PyPy\3.11.15\x64\Scripts' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed pip-24.0 setuptools-79.0.1
C:\hostedtoolcache\windows\PyPy\3.11.15\x64\python.exe -m pip install --ignore-installed pip
Collecting pip
Downloading pip-26.2-py3-none-any.whl.metadata (4.6 kB)
Downloading pip-26.2-py3-none-any.whl (1.8 MB)
---------------------------------------- 1.8/1.8 MB 38.4 MB/s eta 0:00:00
Installing collected packages: pip
WARNING: The scripts pip.exe, pip3.11.exe and pip3.exe are installed in 'C:\hostedtoolcache\windows\PyPy\3.11.15\x64\Scripts' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed pip-24.0
During the upgrade, pip knows it's installing version 26.2, but after installation is complete it reports that version 24.0 is installed. (pip 24.0 is the version that is bootstrapped with ensurepip.)
If we look at the "Use pip" step from example workflow run log, we can see that our attempt to use pip 26.1.2 errors and emits the following traceback:
File "C:\hostedtoolcache\windows\PyPy\3.11.15\x64\Lib\site-packages\pip\_internal\cli\main_parser.py", line 11, in <module>
from pip._internal.build_env import get_runnable_pip
File "C:\hostedtoolcache\windows\PyPy\3.11.15\x64\Lib\site-packages\pip\_internal\build_env\__init__.py", line 8, in <module>
from pip._internal.build_env.installer import (
File "C:\hostedtoolcache\windows\PyPy\3.11.15\x64\Lib\site-packages\pip\_internal\build_env\installer.py", line 22, in <module>
from pip._internal.utils.misc import get_runnable_pip
ImportError: cannot import name 'get_runnable_pip' from 'pip._internal.utils.misc' (C:\hostedtoolcache\windows\PyPy\3.11.15\x64\Lib\site-packages\pip\_internal\utils\misc.py)
Error: Process completed with exit code 1.
_internal\build_env\__init__.py does not exist in pip<26.2. This suggests that the file was left behind from the pip version 26.2 that was installed prior to the downgrade (possibly because the package metadata used to uninstall 26.2 actually belonged to version 24.0). It tries to import get_runnable_pip from pip._internal.utils.misc, but the function wasn't moved into that module until pip version 26.2, so the ImportError is raised.
贡献指南
这个仓库没有索引到贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
从 src/install-pypy.ts 中第 175-183 行附近的 pip 安装逻辑开始,然后在 windows-latest 上使用 pypy-3.11 运行链接的 demo.yml 工作流。将 setup-python 日志与 downgrade 和 use-pip 步骤进行比较;完成的标准是,降级 pip 不再导致 Windows 上的 pip 无法使用,同时现有的 Ubuntu 行为保持不受影响。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- github-actions, python, typescript
- 领域
- ci-cd, tooling
- Issue 类型
- 缺陷
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 活跃度
- 活跃
- 描述清晰度
- 基本清楚
- 新手友好度
- 55/100