spotify/dh-virtualenv

Allow providing some python modules as system packages

eudoxos opened this issue · 1 comments

I am packaging a small project which creates several MB worth of .deb because twisted and others are pulled in as dependencies.

I added "big" packages to debian/control as Depends (python3-numpy, python3-pandas, python3-twisted) and removed them from requirements.txt but still, one required module pulls in twisted anyway.

If added --use-system-packages to DH_VENV_ARGS (so that system-installed modules are found on the target machine) and --extra-pip-args --ignore-installed so that modules installed on the builder are included. The --ignore-installed, however, ignores not only pip-installed packaged but also system-installed Debian packages — so they get installed by pip anyway.

As I gathered from numerous discussions, there is no pip option to ignore a dependency (such as --extra-pip-args "--exclude=twisted") but perhaps dh-virtualenv could take an option to pip uninstall a list of modules after they were installed in the virtual environment?

I tried to work it around by adding this to override_dh_virtualenv, after the venv has been installed:

    export VIRTUAL_ENV=debian/ahmt-webdtj/opt/venvs/ahmt-webdtj; \
    export PATH=$$VIRTUAL_ENV/bin:$$PATH; \
    pip install pip-autoremove; \
    pip-autoremove -y twisted

but it does not run in the venv (even though the correct pip executable is invoked) for some reason.

Start by calling the venv interpreter with a full path and -m pip -- direct pip calls in automation are always prone to lookup errors.