Hi all,
I’m running a fresh experimental Open edX Indigo install with Tutor and seem to have hit a consistent image‑build error that seems unrelated to any specific XBlock and blocks all new XBlock installs. I had Perplexity analyze and draft up a post describing the issue, which follows:
Environment
• Tutor: 21.0.1 (installed via pip)
• Open edX: Indigo (fresh deployment)
• Host: Ubuntu inside a KVM VM
• Tutor managed via a virtualenv (tutor-venv)
• Disk usage: ~78% of a 72G LV, ~16G free, /var/lib/docker ≈ 21G, /home/edx ≈ 3.6G
The platform itself runs fine: LMS/Studio are up, existing functionality is OK. The problem only appears when I try to rebuild the openedx image to add a new XBlock.
What I’m trying to do
I’m attempting to install openedx-cmi5-xblock via Tutor’s supported mechanisms:
1. Initially used private.txt, then switched to OPENEDX_EXTRA_PIP_REQUIREMENTS.
2. Current setting:
tutor config printvalue OPENEDX_EXTRA_PIP_REQUIREMENTS
# output:
openedx-cmi5-xblock
3. Then I run:
tutor images build openedx --no-cache
tutor local restart lms cms
tutor local exec lms pip list | grep -i cmi5
…but pip list inside the LMS container never shows openedx-cmi5-xblock, and the component doesn’t appear in Studio’s Advanced components list.
Build failure details
A clean build with logging:
tutor images build openedx --no-cache 2>&1 | tee openedx-build-fail.log
grep -n “PIP_COMMAND” openedx-build-fail.log | head -20
grep -n “install ‘n’” openedx-build-fail.log | head -20
The relevant snippets:
4063:#49 [python-requirements 12/27] RUN --mount=type=cache,target=/openedx/.cache/pip,sharing=shared uv pip install ‘n’
4068:#49 ERROR: process “/bin/sh -c $PIP_COMMAND install ‘n’” did not complete successfully: exit code: 1
4070: > [python-requirements 12/27] RUN --mount=type=cache,target=/openedx/.cache/pip,sharing=shared uv pip install ‘n’:
4080: 139 | >>> $PIP_COMMAND install ‘n’
4083:ERROR: failed to build: failed to solve: process “/bin/sh -c $PIP_COMMAND install ‘n’” did not complete successfully: exit code: 1
So in the python-requirements stage, the build is literally doing:
uv pip install ‘n’
# i.e., effectively: $PIP_COMMAND install ‘n’
which tries to install a package named n and fails. Because this step fails, the entire openedx image build aborts before it can process my OPENEDX_EXTRA_PIP_REQUIREMENTS, which explains why no new XBlock (including openedx-cmi5-xblock) ever appears in pip list in the LMS container.
I also never see a line like “Collecting openedx-cmi5-xblock” in the build logs.
What I’ve already checked
• Disk space: sufficient (about 16G free on /), and I can still start/stop the existing Tutor stack.
• OPENEDX_EXTRA_PIP_REQUIREMENTS is correctly set as a plain string:
o It previously printed [‘openedx-cmi5-xblock’], which I corrected to openedx-cmi5-xblock using:
tutor config save --set OPENEDX_EXTRA_PIP_REQUIREMENTS=“openedx-cmi5-xblock”
• Running other Tutor commands like tutor local exec lms pip list works; the breakage seems confined to the openedx image build’s python-requirements phase using uv pip install ‘n’.
Questions
1. Is this uv pip install ‘n’ / $PIP_COMMAND install ‘n’ line a known issue/bug in Tutor 21.0.1 (Indigo) or its generated Dockerfile/templates?
2. Where in the Tutor/Indigo build configuration should I look to see why that python-requirements step is getting pip install ‘n’ instead of a real package list or requirements file?
3. Is there an advised workaround or patch (e.g., editing a specific Dockerfile or template) so that:
o tutor images build openedx completes normally, and
o OPENEDX_EXTRA_PIP_REQUIREMENTS=openedx-cmi5-xblock (and other XBlocks) are actually installed?
4. If this is a regression specific to Tutor 21.0.1 + Indigo, is there a recommended version pin (earlier Tutor/Open edX combo) that’s currently preferred for XBlock experimentation?
This KVM is purely experimental, so I’m fine with rebuilding/cleaning if needed, but I’d like to understand and fix the underlying uv pip install ‘n’ problem rather than just trial‑and‑error more builds.
Happy to share more of openedx-build-fail.log or full docker buildx output if that would help.
Thanks in advance for any guidance.
Richard Civille