pip fails when project requirement result binary already exists
Metadata
Current evaluation
Legacy core18 Python builds prompted on stale pip-download archives during repeat builds; core18 and the affected download-based workflow have since been removed.
Suggested action: close stale
Reason: The report provides a deterministic second-run pip download failure, but it targets base core18 and the old /root/parts/.../python-packages download cache. Snapcraft removed core18 support in commit 40136ea9b, and the current Craft Parts Python plugin uses direct pip install commands rather than the reported pip download workflow.
Evaluated by: mr-cal-bot
Impact:
25
Quick Win:
12
Complexity:
30
Confidence:
90
Actionability:
70
Issue body
When trying to Snap the JoinMarket project on Github. I noticed that when running snapcraft for the second time, would fail because a result binary already exists, and pip didn't have a `--exists-action` set.
In the patch, I'm not sure if it would be better to (i)gnore or (w)ipe for the default action.
I've included a patch which fixes the issue for me. I also have included the error message I am getting, along with my snapcraft.yml.
Error message:
```
Updating pull step for joinmarket (source changed)
Obtaining file:///root/project/jmbase (from -r /root/parts/joinmarket/build/requirements/base.txt (line 1))
The file /root/parts/joinmarket/python-packages/joinmarketbase-0.6.1.zip exists. (i)gnore, (w)ipe, (b)ackup, (a)bort ERROR: Exception:
Traceback (most recent call last):
File "/root/parts/joinmarket/install/lib/python3.6/site-packages/pip/_internal/cli/base_command.py", line 186, in _main
status = self.run(options, args)
File "/root/parts/joinmarket/install/lib/python3.6/site-packages/pip/_internal/commands/download.py", line 135, in run
resolver.resolve(requirement_set)
File "/root/parts/joinmarket/install/lib/python3.6/site-packages/pip/_internal/legacy_resolve.py", line 177, in resolve
discovered_reqs.extend(self._resolve_one(requirement_set, req))
File "/root/parts/joinmarket/install/lib/python3.6/site-packages/pip/_internal/legacy_resolve.py", line 333, in _resolve_one
abstract_dist = self._get_abstract_dist_for(req_to_install)
File "/root/parts/joinmarket/install/lib/python3.6/site-packages/pip/_internal/legacy_resolve.py", line 265, in _get_abstract_dist_for
return self.preparer.prepare_editable_requirement(req)
File "/root/parts/joinmarket/install/lib/python3.6/site-packages/pip/_internal/operations/prepare.py", line 559, in prepare_editable_requirement
req.archive(self.download_dir)
File "/root/parts/joinmarket/install/lib/python3.6/site-packages/pip/_internal/req/req_install.py", line 721, in archive
display_path(archive_path), ('i', 'w', 'b', 'a'))
File "/root/parts/joinmarket/install/lib/python3.6/site-packages/pip/_internal/utils/misc.py", line 223, in ask_path_exists
return ask(message, options)
File "/root/parts/joinmarket/install/lib/python3.6/site-packages/pip/_internal/utils/misc.py", line 241, in ask
response = input(message)
EOFError: EOF when reading a line
Failed to run '/root/stage/usr/bin/python3 -m pip download --disable-pip-version-check --dest /root/parts/joinmarket/python-packages --requirement /root/parts/joinmarket/build/requirements/gui.txt': Exited with code 2.
```
snapcraft.yaml
```
name: joinmarket
base: core18
version: master
summary: Software to assist in creating bitcoin CoinJoin transactions
description: |
JoinMarket is software to create a special kind of bitcoin transaction called a CoinJoin transaction. It's aim is to improve the confidentiality and privacy of bitcoin transactions.
confinement: devmode
grade: devel
#icon: icon.png
apps:
joinmarket-qt:
extensions:
- kde-neon
command: usr/bin/jm
plugs:
- network
- network-bind
- desktop
- desktop-legacy
- x11
- wayland
- home
parts:
joinmarket:
plugin: python
source: .
requirements:
- requirements/gui.txt
override-build: |
snapcraftctl build
pwd
ls -alh
#cd ../install
mkdir -p /root/parts/joinmarket/install/opt
cp -rp /root/parts/joinmarket/build /root/parts/joinmarket/install/opt
mv /root/parts/joinmarket/install/opt/build /root/parts/joinmarket/install/opt/joinmarket
# Install desktop launcher
launchers:
plugin: dump
source: .
organize:
'snap/jm': usr/bin/jm
after:
- joinmarket
```
Evaluation history
| Date | Model | Scores | Action | Summary |
|---|---|---|---|---|
| stealth/space-bunny-alpha |
Impact:
25
Quick Win:
12
Complexity:
30
Confidence:
90
Actionability:
70
|
close stale | Legacy core18 Python builds prompted on stale pip-download archives during repeat builds; core18 and the affected download-based workflow have since been removed. | |
| stealth/space-bunny-alpha |
Impact:
15
Quick Win:
11
Complexity:
10
Confidence:
94
Actionability:
85
|
close stale | Snapcraft's core18 Python plugin prompted when pip download found an existing archive on rebuild; core18 and that download-based workflow are no longer supported. | |
| stealth/space-bunny-alpha |
Impact:
15
Quick Win:
12
Complexity:
8
Confidence:
92
Actionability:
88
|
close stale | The reported core18 Python-plugin rerun failure is obsolete: the legacy plugin is gone, and craft-parts now uses pip install into a venv instead of the failing pip download command. | |
| stealth/space-bunny-alpha |
Impact:
48
Quick Win:
32
Complexity:
18
Confidence:
86
Actionability:
82
|
close resolved | Legacy Python plugin prompted on stale pip-download archives during repeat builds; the affected cached-download path has since been replaced by direct pip installs. | |
| stealth/space-bunny-alpha |
Impact:
44
Quick Win:
24
Complexity:
28
Confidence:
84
Actionability:
75
|
needs triage | Second-run builds of a core18 Python-part project abort when pip finds an existing archive. The report has a detailed reproducer, but ignore-versus-wipe behavior and supported-release applicability need triage. | |
| qwen/qwen3.8-27b |
Impact:
40
Quick Win:
26
Staleness:
95
Complexity:
35
Confidence:
55
Support Request:
10
|
needs triage | Snapcraft python plugin pip download fails on rebuild when a result binary already exists, because pip lacks --exists-action. Reporter included a patch and error trace; no maintainer response, no labels, 0 comments, ~6.5 years old. | |
| qwen/qwen3.6-35b-a3b |
Staleness:
95
Complexity:
25
Confidence:
90
Support Request:
0
|
close stale | snapcraft Python plugin fails on rebuilds when pip prompts for existing files, causing an EOFError. Reported 6+ years ago with no maintainer response. | |
| qwen/qwen3.6-35b-a3b |
Staleness:
98
Complexity:
20
Confidence:
90
Support Request:
10
|
close stale | Snapcraft's Python plugin fails on re-runs when pip encounters an existing requirement archive, prompting interactively and causing an EOFError. The report includes a patch and error logs but has seen no maintainer activity in over six years. | |
| qwen3.6-35b-a3b-mtp-q6 |
Staleness:
95
Complexity:
15
Confidence:
85
Support Request:
10
|
close stale | snapcraft python plugin fails on second build when pip prompts for existing archives in non-interactive mode. Filed over six years ago with zero maintainer interaction. |
Update history
| Date | Change |
|---|---|
| created |
Related issues
| Issue | Project | State | Summary | Similarity |
|---|---|---|---|---|
| #1820843 re-running snapcraft when override-build dirty fails complaining about pip | snapcraft (launchpad) | closed | Bug report about core18 python plugin failing with "No module named pip" on dirty rebuilds of an override-build part was closed as stale in Aug 2026; the python plugin has since changed substantially. |