lectures/house_auction.md pins its in-lecture install to prettytable<3.18 as a workaround. This is a tracking issue to drop that pin and return to the latest prettytable once base Anaconda is compatible.
Why the pin is needed. prettytable 3.18.0 requires wcwidth>=0.3.5 (it calls wcwidth.width()), but base Anaconda (2026.06) ships wcwidth 0.2.14, which has no .width attribute. So a full build of house_auction fails with AttributeError: module 'wcwidth' has no attribute 'width'.
Why we can't just upgrade wcwidth in-lecture. The Jupyter kernel imports wcwidth at startup (it's pulled in by IPython/ipykernel), so by the time any cell runs it is already cached in sys.modules as 0.2.14. A runtime !pip install -U wcwidth upgrades the package on disk but does not reload the already-imported module in the running kernel — that only takes effect after a kernel restart. This is exactly why #937's !pip install -U prettytable wcwidth did not fix the build (it was verified in a clean venv, which is a fresh process and therefore picks up the new version, masking the kernel-cache behaviour). This matches our model that lectures should run in base Anaconda: pinning wcwidth in environment.yml would only green the CI build while leaving a base-Anaconda reader broken, so the correct fix is to pin the consumer (prettytable) to a version compatible with the wcwidth that base Anaconda ships.
Action when unblocked. When a future base Anaconda release ships wcwidth>=0.3.5, remove the <3.18 constraint in lectures/house_auction.md and return to the latest prettytable (the in-lecture upgrade will then no longer be necessary).
Context: the immediate break was in #937; the (now-closed) parent was #935.
lectures/house_auction.mdpins its in-lecture install toprettytable<3.18as a workaround. This is a tracking issue to drop that pin and return to the latestprettytableonce base Anaconda is compatible.Why the pin is needed.
prettytable3.18.0 requireswcwidth>=0.3.5(it callswcwidth.width()), but base Anaconda (2026.06) shipswcwidth0.2.14, which has no.widthattribute. So a full build ofhouse_auctionfails withAttributeError: module 'wcwidth' has no attribute 'width'.Why we can't just upgrade wcwidth in-lecture. The Jupyter kernel imports
wcwidthat startup (it's pulled in by IPython/ipykernel), so by the time any cell runs it is already cached insys.modulesas 0.2.14. A runtime!pip install -U wcwidthupgrades the package on disk but does not reload the already-imported module in the running kernel — that only takes effect after a kernel restart. This is exactly why #937's!pip install -U prettytable wcwidthdid not fix the build (it was verified in a clean venv, which is a fresh process and therefore picks up the new version, masking the kernel-cache behaviour). This matches our model that lectures should run in base Anaconda: pinningwcwidthinenvironment.ymlwould only green the CI build while leaving a base-Anaconda reader broken, so the correct fix is to pin the consumer (prettytable) to a version compatible with thewcwidththat base Anaconda ships.Action when unblocked. When a future base Anaconda release ships
wcwidth>=0.3.5, remove the<3.18constraint inlectures/house_auction.mdand return to the latestprettytable(the in-lecture upgrade will then no longer be necessary).Context: the immediate break was in #937; the (now-closed) parent was #935.