Similar to Python/LibraryStyleGuide here are some additional approaches.
If you install a single package with scripts and a public module, and would like to provide both python2 and python3 public modules (because you don't know if someone is relying on them), and want to choose which python to use for your scripts you can follow one of these recipes for python2/3 dual packaging.
include /usr/share/dpkg/pkg-info.mk
PYTHON2_VERSIONS = $(shell pyversions -r)
PYTHON3_VERSIONS = $(shell py3versions -r)
py3sdo = set -e; $(foreach py, $(PYTHON3_VERSIONS), $(py) $(1);)
pyalldo = set -e; $(foreach py, $(PYTHON2_VERSIONS) $(PYTHON3_VERSIONS), $(py) $(1);)
%:
dh $@ --with python2,python3
ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
override_dh_auto_test:
$(call pyalldo, -m unittest discover -vv test/)
endif
override_dh_auto_build:
dh_auto_build
$(call py3sdo, setup.py build)
override_dh_auto_install:
# whichever called last, will result in shebang update
# in this case, the scripts will end up with python3 shebang
# reverse the order if you want to continue using python2 shebang
dh_auto_install
$(call py3sdo, setup.py install --root=$(CURDIR)/debian/$(DEB_SOURCE) --install-layout=deb)
override_dh_auto_clean:
dh_auto_clean
rm -rf build
rm -rf *.egg-infoIf you don't like GNU Make $(call) function
include /usr/share/dpkg/pkg-info.mk
PYTHON2_VERSIONS = $(shell pyversions -r)
PYTHON3_VERSIONS = $(shell py3versions -r)
%:
dh "$@" --with python2,python3
override_dh_auto_clean:
dh_auto_clean
rm -rf build
override_dh_auto_build:
dh_auto_build
set -ex; for python in $(PYTHON3_VERSIONS); do \
$$python setup.py build; \
done
override_dh_auto_install:
dh_auto_install
set -ex; for python in $(PYTHON3_VERSIONS); do \
$$python setup.py install --root=$(CURDIR)/debian/$(DEB_SOURCE) --install-layout=deb; \
done