Troubleshooting

This page lists common issues encountered when installing or running Shrinkwrap and how to resolve them.

pip installs but shrinkwrap command not found

Ensure that:

  • A virtual environment is activated

Verify:

which python
which pip
which shrinkwrap
pip show shrinkwraptool

If shrinkwrap is not on PATH, reinstall inside the active environment.

Wrong Python version

Shrinkwrap requires Python 3.9.0 or newer.

Check the active Python version:

python -V

If the version is too old, create a new virtual environment using pyenv or venv and reinstall Shrinkwrap.

If the issue persists, reinstall Shrinkwrap:

python -m pip install --force-reinstall shrinkwraptool

pip installs old versions

Force pip to upgrade and ignore cached wheels:

python -m pip install --upgrade --no-cache-dir shrinkwraptool

Editable install not picking up changes

Ensure Shrinkwrap was installed in editable mode:

python -m pip install -e ".[dev]"

Verify the source location:

python -c "import shrinkwrap; print(shrinkwrap.__file__)"

PEP 668: Externally Managed Environment with pyenv

Symptom

pip install fails even inside an activated pyenv virtualenv:

error: externally-managed-environment

The message may reference /usr/share/doc/python**/README.venv.

Cause

The shell is still using the system Python instead of the pyenv virtualenv. On Debian/Ubuntu, the system Python is marked as externally managed (PEP 668), which blocks pip.

Fix

Re-initialize pyenv and re-activate the environment:

export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
hash -r
pyenv activate shrinkwrap-env

Verify that which python and which pip point inside ~/.pyenv/versions.

Fallback

Force the correct interpreter:

pyenv exec python -m pip install <package>

pyenv install: missing optional modules (_bz2, _ssl, readline, curses, ctypes)

Symptom

pyenv install <version> fails (or succeeds with warnings) and reports missing modules such as _bz2, _ssl, readline, _curses or _ctypes:

ModuleNotFoundError: No module named '_bz2'
WARNING: The Python bz2 extension was not compiled. Missing the bzip2 lib?
...
ModuleNotFoundError: No module named '_ssl'
ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?

Cause

Python was built without required development headers/libraries (bzip2, OpenSSL, readline, ncurses, libffi, zlib, etc.). pyenv compiles Python from source, so it needs these -dev packages installed first.

Fix (Ubuntu/Debian)

Install build dependencies, then reinstall the Python version:

sudo apt update
sudo apt install -y \
  build-essential curl git ca-certificates \
  libssl-dev zlib1g-dev \
  libbz2-dev libreadline-dev libsqlite3-dev \
  libncurses-dev libncursesw5-dev \
  xz-utils tk-dev libffi-dev liblzma-dev \
  uuid-dev

pyenv uninstall -f <version>
pyenv install <version>

Verify

After install, confirm the modules import correctly:

pyenv shell <version>
python -c "import ssl,bz2,readline,curses,ctypes; print('ok')"