← Back to issue list

pip fails when project requirement result binary already exists

View original Launchpad issue

Metadata

Project
snapcraft (launchpad)
Number
#1861638
Type
issue
State
open
Author
~daveparrish
Labels
pip plugin
Created
Updated
Closed
—

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.
70%