diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/debian/changelog dh-python-1.20140128/debian/changelog --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/debian/changelog 2016-04-19 22:34:52.000000000 +0000 +++ dh-python-1.20140128/debian/changelog 2014-03-27 20:13:15.000000000 +0000 @@ -1,171 +1,103 @@ -dh-python (2.20151103ubuntu1~ubuntu12.04.1~ppa1) precise; urgency=medium +dh-python (1.20140128-1ubuntu8~ctools1) precise; urgency=medium - * No-change backport to precise + * Backport for Ubuntu Cloud Archive, based on Debian Wheezy backports: + - Replace libpython3-stdlib build dependency with python3.2 + - Update default/supported Python versions (in a fallback code, + if python_defaults missing) + - Use dpkg-divert to replace python3's dh_python3 and python's dh_python2 + and drop Breaks/Replaces + - Remove the diversions on removal. + - Patch rtupdate calls for compatibility with Ubuntu py3clean. + - d/p/align-12.04-python-versions.patch: Align python/python3 versions + with those in Ubuntu 12.04. - -- William Woodall Tue, 19 Apr 2016 15:34:52 -0700 + -- James Page Thu, 27 Mar 2014 14:51:17 +0000 -dh-python (2.20151103ubuntu1) xenial; urgency=medium +dh-python (1.20140128-1ubuntu8) trusty; urgency=medium - * Merge from unstable. Remaining changes: - - Add python3.5 as a supported python version. + * Add no-python2.6.diff: Fix test failures on checking for python2.6 + specific bits. - -- Stefano Rivera Wed, 04 Nov 2015 18:22:28 +0000 + -- Martin Pitt Mon, 24 Mar 2014 17:36:23 +0100 -dh-python (2.20151103) unstable; urgency=medium +dh-python (1.20140128-1ubuntu7) trusty; urgency=medium - * dh_py*: - - remove lines from requires.txt already translated into Debian - dependencies - - remove SOURCES.txt from egg-info directories (closes: 802882) - * dh_pypy: generate pypy-abi-foo dependencies for PyPy extensions - (closes: 803689) - * pybuild: - - build default interpreter version last (in case previous build - results are overwritten, like in distutils build system) - - remove (just before install stage) egg-info dirs generated in build_dir - during test stage (closes: 803242) - * Move libdpkg-perl from Depends to Suggests. python3 still depends on - dh-python and we don't want to pull Perl when python3 is intalled - (libdpkg-perl is pulled in by debhelper anyway) - * Add README.rst file + * Run tests with python3.4 instead of python3.3. - -- Piotr Ożarowski Tue, 03 Nov 2015 23:20:36 +0100 + -- Matthias Klose Mon, 24 Mar 2014 11:10:25 +0100 -dh-python (2.20150826ubuntu1) wily; urgency=medium +dh-python (1.20140128-1ubuntu5) trusty; urgency=medium - * Add python3.5 as a supported python version. + * Drop Python 3.3 as a supported Python 3 version. - -- Matthias Klose Mon, 14 Sep 2015 12:58:58 +0200 + -- Matthias Klose Sun, 23 Mar 2014 09:17:26 +0100 -dh-python (2.20150826) unstable; urgency=medium +dh-python (1.20140128-1ubuntu4) trusty; urgency=medium - * Remove '--with-doctest' from nose call, closes: 749506 - to re-enable it: export PYBUILD_TEST_ARGS=--with-doctest - * Build-Depends based test suite detection is used only if PYBUILD_TEST_FOO - is not set to 1 - * dh_python2: do not try to move files to pyshared if package doesn't - provide public modules (f.e. due to interpreter version no longer - supported or installed), closes: 793148 + * Update supported Python 3 versions in tests, to fix autopkgtest + failure. - -- Piotr Ożarowski Wed, 26 Aug 2015 16:53:52 +0200 + -- Dmitry Shachnev Fri, 07 Mar 2014 22:53:55 +0400 -dh-python (2.20150728) unstable; urgency=medium +dh-python (1.20140128-1ubuntu3) trusty; urgency=medium - * dh_python3: fix module renaming in Python >= 3.5 (SOABI now includes - MULTIARCH triplet) - * pybuild.pm: - - fix parsing Build-Depends with comments (closes: 793609, thanks to James - McCoy for the patch) - new build/runtime dependency: libdpkg-perl - - enable --test-{nose,pytest,tox} if appropriate build dependency is set - * pybuild: - - allow localhost connections (via no_proxy=localhost, thanks to - Dimitri John Ledkov) - - do not forward empty http{,s}_proxy env. vars - some tools do not like it - * dh_python{2,3} and dh_pypy: skip packages with private modules that - do not have apropriate ${*:Depends} substvar in Depends - (-p/-N in debian/rules to select the right package is no longer needed, - now you can select the right tool by adding substvar) - * generate_fallback_list.py: add support for --ubuntu (requires - python3-distro-info package, thanks to James Page for original patch, - closes LP: #1422433) + * Make dh-python autopkgtest depend on build-essential and fakeroot. - -- Piotr Ożarowski Tue, 28 Jul 2015 21:01:02 +0200 + -- Dmitry Shachnev Thu, 27 Feb 2014 11:56:50 +0400 -dh-python (2.20150719) unstable; urgency=medium +dh-python (1.20140128-1ubuntu2~cloud0) precise-icehouse; urgency=medium - * Update dist_fallback files - * Converted to native package and bumped version number to 2.* - * dh_python{2,3}: - - remove empty directories (closes: 761028) - - remove "test" and "tests" directories from dist-packages/ - (packages should ship tests in /usr/share/ or under thier own namespace) - * Make private dir autoscript snippets output in a determinstic order - (closes: 792436, thanks to Chris Lamb for the patch) - * Clarify purpose of .pydist files (closes: 778633, thanks to Nikolaus Rath - for the patch) - * Remove "module" from extension file names also in Python 2.7 + * Backport for Ubuntu Cloud Archive, based on Debian Wheezy backports: + - Replace libpython3-stdlib build dependency with python3.2 + - Update default/supported Python versions (in a fallback code, + if python_defaults missing) + - Use dpkg-divert to replace python3's dh_python3 and python's dh_python2 + and drop Breaks/Replaces + - Remove the diversions on removal. + - Patch rtupdate calls for compatibility with Ubuntu py3clean. + - d/p/align-12.04-python-versions.patch: Align python/python3 versions + with those in Ubuntu 12.04. - -- Piotr Ożarowski Sun, 19 Jul 2015 22:54:37 +0200 + -- James Page Mon, 24 Feb 2014 10:57:21 +0000 -dh-python (1.20150705-1) unstable; urgency=medium +dh-python (1.20140128-1ubuntu2) trusty; urgency=medium - * Support requires.txt in PyPy packages. - * Add unit tests for bugs fixed in this and the previous upload. - - -- Stefano Rivera Sun, 05 Jul 2015 19:09:24 -0700 - -dh-python (1.20150628-1) unstable; urgency=medium - - * Fix path handling when --ext-dest-dir is used. Some characters were being - stripped from the beginning of the path. - * Re-apply Multi-Arch change. - * Remove XS-Testsuite control field, no longer necessary. - * Sort namespace files, for reproducibility. Thanks to Chris Lamb for the - patch. (closes: 777134) - - -- Stefano Rivera Sun, 28 Jun 2015 18:43:31 -0700 - -dh-python (1.20141111-2) unstable; urgency=medium - - * Remove Multi-Arch change from previous upload (not accepted for Jessie by - release managers) - - -- Piotr Ożarowski Sat, 15 Nov 2014 12:48:23 +0100 - -dh-python (1.20141111-1) unstable; urgency=medium - - * Set dh-python's Multi-Arch to "foreign" (closes: 767339) - * dist_fallback files now contain list of all packages that provide Egg - metadata (i.e. not just packages that don't have sensible name) - * dh_python* no longer guesses dependency from requires.txt files nor Requires - fields. Dependencies are generated only if given requirement is available - in dist_fallback file (generated at dh-python's build time) or if it's - available at build time (hint: Build-Depends) - - -- Piotr Ożarowski Tue, 11 Nov 2014 21:23:20 +0100 - -dh-python (1.20141026-1) unstable; urgency=medium - - [ Stefano Rivera ] - * Update supported (and default) PyPy version to 2.4. - - [ Piotr Ożarowski ] - * Remove "-p " from autoscripts if --compile-all option is set - * Add support for guessing dependencies from egg-info files (closes: 756378) - * Parse "!=" relationship in egg dependencies (closes: 754058, thanks to - Rafael Laboissiere for the patch) - * Improve handling pyinstall/pyremove files (leading slash no longer needed - for deprecated directories, manpages improved a bit) - closes: 741381 - * Suggest the right file name for dependency overrides (closes: 748296) - * Add argparse to Python 3.X's dist fallback (closes: 763200) - * Ensure that Depends and the likes are written in a stable - order (closes: 759231, thanks to Jérémy Bobbio for the patch) - * Remove dh_python2 diversions while upgrading from bpo package - * Standards-Version bumped to 3.9.6 (no changes needed) + * Remove empty directories when moving files. - -- Piotr Ożarowski Sun, 26 Oct 2014 23:32:57 +0100 + -- Matthias Klose Wed, 12 Feb 2014 15:14:23 +0100 -dh-python (1.20140511-1) unstable; urgency=medium +dh-python (1.20140128-1ubuntu1~cloud0) precise-icehouse; urgency=medium - [ Piotr Ożarowski ] - * pybuild: do not invoke clean commands for missing interpreters - (and thus do not require all interpreter versions to be installed while - building source package outside build environment, closes: 737091) - * dh_python2: no longer moves files to /usr/share/pyshared if there's only - one supported Python 2.X version and doesn't create /usr/lib/pyshared - symlinks for extensions (as other helper tools are now deprecated) - * Show fix_shebang's error messages only in debug mode, closes: 745581 + * Backport for Ubuntu Cloud Archive, based on Debian Wheezy backports: + - Replace libpython3-stdlib build dependency with python3.2 + - Update default/supported Python versions (in a fallback code, + if python_defaults missing) + - Use dpkg-divert to replace python3's dh_python3 and python's dh_python2 + and drop Breaks/Replaces + - Remove the diversions on removal. + - Patch rtupdate calls for compatibility with Ubuntu py3clean. + - d/p/align-12.04-python-versions.patch: Align python/python3 versions + with those in Ubuntu 12.04. + + -- James Page Mon, 10 Feb 2014 11:06:06 +0200 + +dh-python (1.20140128-1ubuntu1) trusty; urgency=medium + + * Merge with Debian unstable, remaining changes: + - debian/control: Make dh-python Multi-Arch: foreign. + - Add patch debian/patches/no-pyshare.diff: + + Don't move files to /usr/share/pyshared anymore. + + Don't create extension symlinks in /usr/lib/pyshared/pythonX.Y anymore. + - Add patch debian/patches/python3.4.diff: + + Add python3.4 as a supported version. - [ Matthias Klose ] - * Remove empty directories when moving files. - - -- Piotr Ożarowski Sun, 11 May 2014 20:59:15 +0200 + -- Dmitry Shachnev Wed, 29 Jan 2014 17:24:45 +0400 dh-python (1.20140128-1) unstable; urgency=low * dh_python3, dh_pypy: add support for debian/package.pyremove files (closes: 730777) - * dh_python3: add multiarch tuples to all already tagged extensions + * dh_python3: add multiarch tuples to all already tagged extensions if when more than one Python 3 version is supported (closes: 733128) * Make sure only first line is taken into account while checking shebangs (closes: 732308) @@ -184,6 +116,91 @@ -- Piotr Ożarowski Tue, 28 Jan 2014 18:20:19 +0100 +dh-python (1.20131021-1ubuntu8) trusty; urgency=medium + + * Taken from upstream: + dh_python3: add multiarch tuples to all already tagged extensions if + when more than one Python 3 version is supported (closes: 733128). + + -- Matthias Klose Tue, 07 Jan 2014 23:11:01 +0100 + +dh-python (1.20131021-1ubuntu7~cloud0) precise-icehouse; urgency=medium + + * Backport for Ubuntu Cloud Archive, based on Debian Wheezy backports: + - Replace libpython3-stdlib build dependency with python3.2 + - Update default/supported Python versions (in a fallback code, + if python_defaults missing) + - Use dpkg-divert to replace python3's dh_python3 and python's dh_python2 + and drop Breaks/Replaces + - Remove the diversions on removal. + - Patch rtupdate calls for compatibility with Ubuntu py3clean. + - d/p/align-12.04-python-versions.patch: Align python/python3 versions + with those in Ubuntu 12.04. + + -- James Page Mon, 06 Jan 2014 14:23:02 +0000 + +dh-python (1.20131021-1ubuntu7) trusty; urgency=medium + + * Fix dhpython/_defaults.py. Still doesn't rename 3.4 extensions + to the multiarch name. + + -- Matthias Klose Mon, 30 Dec 2013 20:55:17 +0100 + +dh-python (1.20131021-1ubuntu6) trusty; urgency=medium + + * Disable the correct failing test. + + -- Matthias Klose Sat, 21 Dec 2013 17:15:02 +0100 + +dh-python (1.20131021-1ubuntu5) trusty; urgency=low + + * Don't create extension symlinks in /usr/lib/pyshared/pythonX.Y anymore. + * Disable nosetests in autopkg tests until these are fixed. + * dhpython/_defaults.py: Add python3.4 as a supported version. + + -- Matthias Klose Sat, 21 Dec 2013 14:50:06 +0100 + +dh-python (1.20131021-1ubuntu4) trusty; urgency=medium + + * Don't move files to /usr/share/pyshared anymore. + + -- Matthias Klose Fri, 20 Dec 2013 00:39:05 +0100 + +dh-python (1.20131021-1ubuntu3) trusty; urgency=medium + + * Make the package Multi-Arch: foreign. + + -- Matthias Klose Sat, 07 Dec 2013 19:32:35 +0100 + +dh-python (1.20131021-1ubuntu2~cloud0) precise-icehouse; urgency=low + + * Backport for Ubuntu Cloud Archive, based on Debian Wheezy backports: + - Replace libpython3-stdlib build dependency with python3.2 + - Update default/supported Python versions (in a fallback code, + if python_defaults missing) + - Use dpkg-divert to replace python3's dh_python3 and python's dh_python2 + and drop Breaks/Replaces + - Remove the diversions on removal. + - Patch rtupdate calls for compatibility with Ubuntu py3clean. + - d/p/align-12.04-python-versions.patch: Align python/python3 versions + with those in Ubuntu 12.04. + + -- James Page Mon, 09 Dec 2013 08:57:53 +0000 + +dh-python (1.20131021-1ubuntu2) trusty; urgency=low + + * Add drop_nonexisting_versions.patch: In tests/Makefile, drop Python 2.6 + and 3.2 as supported, we do not have them in Debian and Ubuntu any more. + (Closes: #727674) + + -- Martin Pitt Tue, 05 Nov 2013 08:52:12 +0100 + +dh-python (1.20131021-1ubuntu1) trusty; urgency=low + + * Add missing python3-all-dbg test dependency for debian/tests/nosetests. + + -- Martin Pitt Thu, 24 Oct 2013 09:44:27 +0200 + dh-python (1.20131021-1) unstable; urgency=low * dh_python2: fix renaming debug extensions with multiarch tuples @@ -210,6 +227,26 @@ -- Piotr Ożarowski Thu, 17 Oct 2013 22:24:25 +0200 +dh-python (1.20131003-1~cloud1) precise-icehouse; urgency=low + + * d/p/align-12.04-python-versions.patch: Align python/python3 versions + with those in Ubuntu 12.04. + + -- James Page Thu, 05 Dec 2013 10:25:52 +0000 + +dh-python (1.20131003-1~cloud0) precise-icehouse; urgency=low + + * Backport for Ubuntu Cloud Archive, based on Debian Wheezy backports. + - Replace libpython3-stdlib build dependency with python3.2 + - Update default/supported Python versions (in a fallback code, + if python_defaults missing) + - Use dpkg-divert to replace python3's dh_python3 and python's dh_python2 + and drop Breaks/Replaces + - Remove the diversions on removal. + - Patch rtupdate calls for compatibility with Ubuntu py3clean. + + -- James Page Wed, 04 Dec 2013 14:33:02 +0000 + dh-python (1.20131003-1) unstable; urgency=low * Revert python-docutils build dependency change (to avoid circular diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/debian/control dh-python-1.20140128/debian/control --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/debian/control 2015-11-04 18:23:38.000000000 +0000 +++ dh-python-1.20140128/debian/control 2014-03-27 20:04:47.000000000 +0000 @@ -4,27 +4,19 @@ Maintainer: Ubuntu Developers XSBC-Original-Maintainer: Piotr Ożarowski Uploaders: Stefano Rivera , Barry Warsaw -Build-Depends: debhelper (>= 9), python3-minimal, libpython3-stdlib, libdpkg-perl, +Build-Depends: debhelper (>= 9), python3-minimal, python3.2, # provides rst2man command (python3-docutils not used to avoid circular deps): - python-docutils, -# used by tests: (disabled to avoid circular deps with python3) -# python3-nose, -# python3-all, python3-all-dbg, python3-all-dev, -# python-all, python-all-dbg, python-all-dev -Standards-Version: 3.9.6 + python-docutils +Standards-Version: 3.9.5 Vcs-Git: git://anonscm.debian.org/dh-python/dh-python.git -Vcs-Browser: http://anonscm.debian.org/cgit/dh-python/dh-python.git +Vcs-Browser: http://anonscm.debian.org/gitweb/?p=dh-python/dh-python.git X-Python3-Version: >= 3.2 +XS-Testsuite: autopkgtest Package: dh-python Architecture: all +Depends: ${misc:Depends}, ${python3:Depends}, python3 (>= 3.2.3-0~) Multi-Arch: foreign -Depends: ${misc:Depends}, ${python3:Depends} -Suggests: libdpkg-perl -Breaks: -# due to /usr/bin/dh_python3 and debhelper files - python3 (<< 3.3.2-4~) -Replaces: python3 (<< 3.3.2-4~) Description: Debian helper tools for packaging Python libraries and applications This package contains: * pybuild - invokes various build systems for requested Python versions in diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/debian/docs dh-python-1.20140128/debian/docs --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/debian/docs 2015-11-03 22:20:05.000000000 +0000 +++ dh-python-1.20140128/debian/docs 2014-03-27 20:04:47.000000000 +0000 @@ -1,2 +1 @@ pydist/README.PyDist -README.rst diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/debian/links dh-python-1.20140128/debian/links --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/debian/links 2014-11-05 14:58:04.000000000 +0000 +++ dh-python-1.20140128/debian/links 2014-03-27 20:04:47.000000000 +0000 @@ -1,4 +1,4 @@ /usr/share/dh-python/pybuild /usr/bin/pybuild /usr/share/dh-python/dh_pypy /usr/bin/dh_pypy -#/usr/share/dh-python/dh_python2 /usr/bin/dh_python2 +/usr/share/dh-python/dh_python2 /usr/bin/dh_python2 /usr/share/dh-python/dh_python3 /usr/bin/dh_python3 diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/debian/manpages dh-python-1.20140128/debian/manpages --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/debian/manpages 2014-11-05 14:58:04.000000000 +0000 +++ dh-python-1.20140128/debian/manpages 2014-03-27 20:04:47.000000000 +0000 @@ -1,4 +1,4 @@ pybuild.1 dh_pypy.1 -#dh_python2.1 +dh_python2.1 dh_python3.1 diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/debian/patches/align-12.04-python-versions.patch dh-python-1.20140128/debian/patches/align-12.04-python-versions.patch --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/debian/patches/align-12.04-python-versions.patch 1970-01-01 00:00:00.000000000 +0000 +++ dh-python-1.20140128/debian/patches/align-12.04-python-versions.patch 2014-03-27 20:04:47.000000000 +0000 @@ -0,0 +1,13 @@ +--- a/dhpython/__init__.py ++++ b/dhpython/__init__.py +@@ -25,8 +25,8 @@ PKG_PREFIX_MAP = {'cpython2': 'python', + 'pypy': 'pypy'} + + # minimum version required for compile/clean scripts: +-MINPYCDEP = {'cpython2': 'python:any (>= 2.7.5-5~)', +- 'cpython3': 'python3:any (>= 3.3.2-2~)', ++MINPYCDEP = {'cpython2': 'python:any (>= 2.7.3-0ubuntu2~)', ++ 'cpython3': 'python3:any (>= 3.2.3-0ubuntu1~)', + 'pypy': 'pypy'} + + PUBLIC_DIR_RE = { diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/debian/patches/no-python2.6.diff dh-python-1.20140128/debian/patches/no-python2.6.diff --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/debian/patches/no-python2.6.diff 1970-01-01 00:00:00.000000000 +0000 +++ dh-python-1.20140128/debian/patches/no-python2.6.diff 2014-03-27 20:04:47.000000000 +0000 @@ -0,0 +1,39 @@ +Index: dh-python-1.20140128/tests/t202/Makefile +=================================================================== +--- dh-python-1.20140128.orig/tests/t202/Makefile 2014-01-28 18:20:25.000000000 +0100 ++++ dh-python-1.20140128/tests/t202/Makefile 2014-03-24 17:24:28.459439873 +0100 +@@ -4,7 +4,7 @@ + clean: clean-common + + check: +- test -f debian/python-foo/usr/lib/python2.6/dist-packages/foo.py +- test -f debian/python-foo/usr/lib/python2.6/dist-packages/bar/bar.py ++ test -f debian/python-foo/usr/lib/python2.7/dist-packages/foo.py ++ test -f debian/python-foo/usr/lib/python2.7/dist-packages/bar/bar.py + grep -q pycompile debian/python-foo/DEBIAN/postinst + grep -q pyclean debian/python-foo/DEBIAN/prerm +Index: dh-python-1.20140128/tests/t204/Makefile +=================================================================== +--- dh-python-1.20140128.orig/tests/t204/Makefile 2014-01-28 18:20:25.000000000 +0100 ++++ dh-python-1.20140128/tests/t204/Makefile 2014-03-24 17:32:41.815422300 +0100 +@@ -5,7 +5,7 @@ + + check: + grep -q python2.6 debian/foo/usr/share/foo/foo.py +- grep -q Depends:.*python2.6 debian/foo/DEBIAN/control ++ grep -q Depends:.*python debian/foo/DEBIAN/control + #grep -q python2.5 debian/foo/usr/share/bar/bar.py + #grep -q Depends:.*python2.5 debian/foo/DEBIAN/control + grep -q python2.4 debian/foo/usr/share/foo/baz.py +Index: dh-python-1.20140128/tests/t206/Makefile +=================================================================== +--- dh-python-1.20140128.orig/tests/t206/Makefile 2014-01-28 18:20:25.000000000 +0100 ++++ dh-python-1.20140128/tests/t206/Makefile 2014-03-24 17:34:39.211418118 +0100 +@@ -13,6 +13,6 @@ + grep -q '\-V 2.5 /usr/share/bar25' debian/foo/usr/share/python/runtime.d/foo.rtupdate + grep -q '/usr/share/bar25 \-V 2.5' debian/foo/DEBIAN/postinst + # python2.6 hardcoded via shebang +- grep -q Depends:.*python2.6 debian/foo/DEBIAN/control ++ #grep -q Depends:.*python2.6 debian/foo/DEBIAN/control + grep -q '\-V 2.6 /usr/share/foo' debian/foo/usr/share/python/runtime.d/foo.rtupdate + grep -q '/usr/share/foo \-V 2.6' debian/foo/DEBIAN/postinst diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/debian/patches/no-python3.3.diff dh-python-1.20140128/debian/patches/no-python3.3.diff --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/debian/patches/no-python3.3.diff 1970-01-01 00:00:00.000000000 +0000 +++ dh-python-1.20140128/debian/patches/no-python3.3.diff 2014-03-27 20:04:47.000000000 +0000 @@ -0,0 +1,147 @@ +Index: b/dhpython/interpreter.py +=================================================================== +--- a/dhpython/interpreter.py ++++ b/dhpython/interpreter.py +@@ -309,8 +309,8 @@ + >>> i = Interpreter('python') + >>> i.cache_file('foo.py', Version('3.1')) + 'foo.pyc' +- >>> i.cache_file('bar/foo.py', '3.3') +- 'bar/__pycache__/foo.cpython-33.pyc' ++ >>> i.cache_file('bar/foo.py', '3.4') ++ 'bar/__pycache__/foo.cpython-34.pyc' + """ + version = Version(version or self.version) + last_char = 'o' if '-O' in self.options else 'c' +@@ -335,8 +335,8 @@ + """Return Python magic tag (used in __pycache__ dir to tag files). + + >>> i = Interpreter('python') +- >>> i.magic_tag(version='3.3') +- 'cpython-33' ++ >>> i.magic_tag(version='3.4') ++ 'cpython-34' + """ + version = Version(version or self.version) + if self.impl.startswith('cpython') and version << Version('3.2'): +@@ -378,8 +378,8 @@ + + >>> Interpreter('python2.7').include_dir + '/usr/include/python2.7' +- >>> Interpreter('python3.3-dbg').include_dir +- '/usr/include/python3.3dm' ++ >>> Interpreter('python3.4-dbg').include_dir ++ '/usr/include/python3.4dm' + """ + if self.impl == 'pypy': + return '/usr/lib/pypy/include' +@@ -482,7 +482,7 @@ + + >>> Interpreter('python3.1').suggest_pkg_name('foo') + 'python3-foo' +- >>> Interpreter('python3.3').suggest_pkg_name('foo') ++ >>> Interpreter('python3.4').suggest_pkg_name('foo') + 'python3-foo' + >>> Interpreter('python2.7-dbg').suggest_pkg_name('bar') + 'python-bar-dbg' +Index: b/pybuild +=================================================================== +--- a/pybuild ++++ b/pybuild +@@ -102,7 +102,7 @@ + + def get_option(name, interpreter=None, version=None, default=None): + if interpreter: +- # try PYBUILD_NAME_python3.3-dbg (or hardcoded interpreter) ++ # try PYBUILD_NAME_python3.4-dbg (or hardcoded interpreter) + i = interpreter.format(version=version or '') + opt = "PYBUILD_{}_{}".format(name.upper(), i) + if opt in environ: +Index: b/pybuild.rst +=================================================================== +--- a/pybuild.rst ++++ b/pybuild.rst +@@ -191,8 +191,8 @@ + * `--disable test/python2.5-dbg` - disables tests for python2.5-dbg + * `--disable '2.4 2.7'` - disables all actions for version 2.4 and 2.7 + * `PYBUILD_DISABLE_python2=1` - disables all actions for Python 2.X +-* `PYBUILD_DISABLE_python3.3=test` - disables tests for Python 3.3 +-* `PYBUILD_DISABLE=test/python3.3` - same as above ++* `PYBUILD_DISABLE_python3.4=test` - disables tests for Python 3.3 ++* `PYBUILD_DISABLE=test/python3.4` - same as above + * `PYBUILD_DISABLE=configure/python3 2.4 pypy` - disables configure + action for all python3 interpreters, all actions for version 2.4, and + all actions for pypy +Index: b/tests/t304/Makefile +=================================================================== +--- a/tests/t304/Makefile ++++ b/tests/t304/Makefile +@@ -6,10 +6,10 @@ + check: + # python3.2 hardcoded via `dh_python3 --shebang ...python3.2` + grep -q '#! /usr/bin/python3.2 -OO' debian/foo/usr/share/baz32/baz.py +- # python3.3 hardcoded via shebang +- grep -q '/usr/share/foo \-V 3.3' debian/foo/DEBIAN/postinst ++ # python3.4 hardcoded via shebang ++ grep -q '/usr/share/foo \-V 3.4' debian/foo/DEBIAN/postinst + # /env removed from shebang + grep -q '#! /usr/bin/python3' debian/foo/usr/share/bar/bar.py + # /local removed from shebang + grep -q '#! /usr/bin/python3' debian/foo/usr/share/foo/baz.py +- grep -q '#! /usr/bin/python3.3' debian/foo/usr/share/foo/foo.py ++ grep -q '#! /usr/bin/python3.4' debian/foo/usr/share/foo/foo.py +Index: b/tests/t304/foo.py +=================================================================== +--- a/tests/t304/foo.py ++++ b/tests/t304/foo.py +@@ -1,2 +1,2 @@ +-#!/usr/local/bin/python3.3 +-"/usr/local/bin/python3.3 hardcoded in shebang" ++#!/usr/local/bin/python3.4 ++"/usr/local/bin/python3.4 hardcoded in shebang" +Index: b/tests/test_interpreter.py +=================================================================== +--- a/tests/test_interpreter.py ++++ b/tests/test_interpreter.py +@@ -93,26 +93,26 @@ + self.assertIsNone(i.check_extname('foo.abi3.so')) + self.assertEqual(i.check_extname('foo/bar/bazmodule.so'), r'foo/bar/bazmodule.cpython-32dmu.so') + +- @unittest.skipUnless(exists('/usr/bin/python3.3'), 'python3.3 is not installed') +- def test_python33(self): +- i = Interpreter('python3.3') +- self.assertEqual(i.soabi(), 'cpython-33m') +- self.assertEqual(i.check_extname('foo.so'), r'foo.cpython-33m-MYARCH.so') ++ @unittest.skipUnless(exists('/usr/bin/python3.4'), 'python3.4 is not installed') ++ def test_python34(self): ++ i = Interpreter('python3.4') ++ self.assertEqual(i.soabi(), 'cpython-34m') ++ self.assertEqual(i.check_extname('foo.so'), r'foo.cpython-34m-MYARCH.so') + self.assertIsNone(i.check_extname('foo.cpython-32m.so')) # different version +- self.assertIsNone(i.check_extname('foo.cpython-33m-OTHER.so')) # different architecture +- self.assertEqual(i.check_extname('foo.cpython-33m.so'), r'foo.cpython-33m-MYARCH.so') ++ self.assertIsNone(i.check_extname('foo.cpython-34m-OTHER.so')) # different architecture ++ self.assertEqual(i.check_extname('foo.cpython-34m.so'), r'foo.cpython-34m-MYARCH.so') + self.assertIsNone(i.check_extname('foo.abi3.so')) +- self.assertEqual(i.check_extname('foo/bar/bazmodule.so'), r'foo/bar/baz.cpython-33m-MYARCH.so') ++ self.assertEqual(i.check_extname('foo/bar/bazmodule.so'), r'foo/bar/baz.cpython-34m-MYARCH.so') + +- @unittest.skipUnless(exists('/usr/bin/python3.3-dbg'), 'python3.3-dbg is not installed') +- def test_python33dbg(self): +- i = Interpreter('python3.3-dbg') +- self.assertEqual(i.soabi(), 'cpython-33dm') +- self.assertEqual(i.check_extname('foo.so'), r'foo.cpython-33dm-MYARCH.so') ++ @unittest.skipUnless(exists('/usr/bin/python3.4-dbg'), 'python3.4-dbg is not installed') ++ def test_python34dbg(self): ++ i = Interpreter('python3.4-dbg') ++ self.assertEqual(i.soabi(), 'cpython-34dm') ++ self.assertEqual(i.check_extname('foo.so'), r'foo.cpython-34dm-MYARCH.so') + self.assertIsNone(i.check_extname('foo.cpython-32m.so')) # different version +- self.assertIsNone(i.check_extname('foo.cpython-33m-OTHER.so')) # different architecture ++ self.assertIsNone(i.check_extname('foo.cpython-34m-OTHER.so')) # different architecture + self.assertIsNone(i.check_extname('foo.abi3.so')) +- self.assertEqual(i.check_extname('foo/bar/bazmodule.so'), r'foo/bar/baz.cpython-33dm-MYARCH.so') ++ self.assertEqual(i.check_extname('foo/bar/bazmodule.so'), r'foo/bar/baz.cpython-34dm-MYARCH.so') + + def test_version(self): + i = Interpreter(impl='cpython2') diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/debian/patches/py3clean_compat.patch dh-python-1.20140128/debian/patches/py3clean_compat.patch --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/debian/patches/py3clean_compat.patch 1970-01-01 00:00:00.000000000 +0000 +++ dh-python-1.20140128/debian/patches/py3clean_compat.patch 2014-03-27 20:04:47.000000000 +0000 @@ -0,0 +1,11 @@ +--- a/dhpython/__init__.py ++++ b/dhpython/__init__.py +@@ -98,7 +98,7 @@ if [ "$1" = rtupdate ]; then + fi''', + 'cpython3': ''' + if [ "$1" = rtupdate ]; then +-\tpy3clean {pkg_arg} {dname} ++\tpy3clean {pkg_arg} + \tpy3compile {pkg_arg} {args} {dname} + fi''', + 'pypy': '' diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/debian/patches/python3.4.diff dh-python-1.20140128/debian/patches/python3.4.diff --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/debian/patches/python3.4.diff 1970-01-01 00:00:00.000000000 +0000 +++ dh-python-1.20140128/debian/patches/python3.4.diff 2014-03-27 20:04:47.000000000 +0000 @@ -0,0 +1,35 @@ +Index: b/dhpython/_defaults.py +=================================================================== +--- a/dhpython/_defaults.py ++++ b/dhpython/_defaults.py +@@ -27,11 +27,11 @@ + + SUPPORTED = { + 'cpython2': [(2, 7)], +- 'cpython3': [(3, 3)], ++ 'cpython3': [(3, 4)], + 'pypy': [(2, 0)]} + DEFAULT = { + 'cpython2': (2, 7), +- 'cpython3': (3, 3), ++ 'cpython3': (3, 4), + 'pypy': (2, 0)} + + log = logging.getLogger('dhpython') +Index: b/tests/Makefile +=================================================================== +--- a/tests/Makefile ++++ b/tests/Makefile +@@ -3,9 +3,9 @@ + # hardcode default/supported Python versions to make tests more reliable + # Note that all these packages have to be installed during tests + export DEBPYTHON_DEFAULT=2.7 +-export DEBPYTHON_SUPPORTED=2.6,2.7 +-export DEBPYTHON3_DEFAULT=3.3 +-export DEBPYTHON3_SUPPORTED=3.2,3.3 ++export DEBPYTHON_SUPPORTED=2.7 ++export DEBPYTHON3_DEFAULT=3.4 ++export DEBPYTHON3_SUPPORTED=3.4 + + # enable or disable tests here: + TESTS := test101 test201 test202 test203 test204 test205 test206 test207 test301 test302 test303 test304 diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/debian/patches/rmdirs.diff dh-python-1.20140128/debian/patches/rmdirs.diff --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/debian/patches/rmdirs.diff 1970-01-01 00:00:00.000000000 +0000 +++ dh-python-1.20140128/debian/patches/rmdirs.diff 2014-03-27 20:04:47.000000000 +0000 @@ -0,0 +1,41 @@ +--- a/dhpython/fs.py ++++ b/dhpython/fs.py +@@ -22,7 +22,7 @@ + import os + import re + from filecmp import cmp as cmpfile +-from os.path import exists, isdir, islink, join, split, splitext ++from os.path import exists, dirname, isdir, islink, join, split, splitext + from shutil import rmtree + from stat import ST_MODE, S_IXUSR, S_IXGRP, S_IXOTH + from dhpython import MULTIARCH_DIR_TPL +@@ -47,8 +47,12 @@ + log.debug('moving files from %s to %s', srcdir, dstdir) + share_files(srcdir, dstdir, interpreter, options) + parent_dir = '/'.join(srcdir.split('/')[:-1]) +- if exists(parent_dir) and not os.listdir(parent_dir): +- os.rmdir(parent_dir) ++ while parent_dir: ++ if exists(parent_dir): ++ if os.listdir(parent_dir): ++ break ++ os.rmdir(parent_dir) ++ parent_dir = dirname(parent_dir) + + # do the same with debug locations + dstdir = interpreter.sitedir(package, gdb=True) +@@ -57,8 +61,12 @@ + log.debug('moving files from %s to %s', srcdir, dstdir) + share_files(srcdir, dstdir, interpreter, options) + parent_dir = '/'.join(srcdir.split('/')[:-1]) +- if exists(parent_dir) and not os.listdir(parent_dir): +- os.rmdir(parent_dir) ++ while parent_dir: ++ if exists(parent_dir): ++ if os.listdir(parent_dir): ++ break ++ os.rmdir(parent_dir) ++ parent_dir = dirname(parent_dir) + + + def share_files(srcdir, dstdir, interpreter, options): diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/debian/patches/series dh-python-1.20140128/debian/patches/series --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/debian/patches/series 1970-01-01 00:00:00.000000000 +0000 +++ dh-python-1.20140128/debian/patches/series 2014-03-27 20:04:47.000000000 +0000 @@ -0,0 +1,4 @@ +update_default_and_supported_python_versions.patch +py3clean_compat.patch +align-12.04-python-versions.patch +rmdirs.diff diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/debian/patches/update_default_and_supported_python_versions.patch dh-python-1.20140128/debian/patches/update_default_and_supported_python_versions.patch --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/debian/patches/update_default_and_supported_python_versions.patch 1970-01-01 00:00:00.000000000 +0000 +++ dh-python-1.20140128/debian/patches/update_default_and_supported_python_versions.patch 2014-03-27 20:04:47.000000000 +0000 @@ -0,0 +1,21 @@ +Description: update default/supported Python versions in fallback code +Author: Piotr Ozarowski + +--- dh-python-1.20130819.orig/dhpython/_defaults.py ++++ dh-python-1.20130819/dhpython/_defaults.py +@@ -25,12 +25,12 @@ from os import environ + from subprocess import Popen, PIPE + + SUPPORTED = { +- 'cpython2': [(2, 7)], +- 'cpython3': [(3, 3)], ++ 'cpython2': [(2, 7, 2, 6)], ++ 'cpython3': [(3, 2)], + 'pypy': [(2, 0)]} + DEFAULT = { + 'cpython2': (2, 7), +- 'cpython3': (3, 3), ++ 'cpython3': (3, 2), + 'pypy': (2, 0)} + + log = logging.getLogger('dhpython') diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/debian/postrm dh-python-1.20140128/debian/postrm --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/debian/postrm 1970-01-01 00:00:00.000000000 +0000 +++ dh-python-1.20140128/debian/postrm 2014-03-27 20:04:47.000000000 +0000 @@ -0,0 +1,21 @@ +#!/bin/sh +set -e + +remove_divert() { + dpkg-divert --package dh-python --remove --rename \ + --divert /usr/bin/dh_python3.real /usr/bin/dh_python3 + dpkg-divert --package dh-python --remove --rename \ + --divert /usr/share/man/man1/dh_python3.real.1.gz /usr/share/man/man1/dh_python3.1.gz + dpkg-divert --package dh-python --remove --rename \ + --divert /usr/bin/dh_python2.real /usr/bin/dh_python2 + dpkg-divert --package dh-python --remove --rename \ + --divert /usr/share/man/man1/dh_python2.real.1.gz /usr/share/man/man1/dh_python2.1.gz +} + +if [ abort-upgrade = "$1" ] && dpkg --compare-versions "$2" lt '1.20131003-1~cloud0'; then + remove_divert +elif [ remove = "$1" -o abort-install = "$1" ]; then + remove_divert +fi + +#DEBHELPER# diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/debian/preinst dh-python-1.20140128/debian/preinst --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/debian/preinst 2014-11-05 14:58:04.000000000 +0000 +++ dh-python-1.20140128/debian/preinst 2014-03-27 20:04:47.000000000 +0000 @@ -1,14 +1,21 @@ #!/bin/sh set -e -# ugly hack, but dpkg-divert's manpage isn't clear enough to me -if [ -f /usr/bin/dh_python2.real ]; then - rm -f /usr/bin/dh_python2 - dpkg-divert --remove --rename --divert /usr/bin/dh_python2.real /usr/bin/dh_python2 -fi -if [ -f /usr/share/man/man1/dh_python2.real.1.gz ]; then - rm -f /usr/share/man/man1/dh_python2.1.gz - dpkg-divert --remove --rename --divert /usr/share/man/man1/dh_python2.real.1.gz /usr/share/man/man1/dh_python2.1.gz +divert() { + dpkg-divert --package dh-python --add --rename \ + --divert /usr/bin/dh_python3.real /usr/bin/dh_python3 + dpkg-divert --package dh-python --add --rename \ + --divert /usr/share/man/man1/dh_python3.real.1.gz /usr/share/man/man1/dh_python3.1.gz + dpkg-divert --package dh-python --add --rename \ + --divert /usr/bin/dh_python2.real /usr/bin/dh_python2 + dpkg-divert --package dh-python --add --rename \ + --divert /usr/share/man/man1/dh_python2.real.1.gz /usr/share/man/man1/dh_python2.1.gz +} + +if [ install = "$1" ]; then + divert +elif [ upgrade = "$1" ] && dpkg --compare-versions "$2" lt '1.20131003-1~cloud0'; then + divert fi #DEBHELPER# diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/debian/rules dh-python-1.20140128/debian/rules --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/debian/rules 2015-08-26 15:14:02.000000000 +0000 +++ dh-python-1.20140128/debian/rules 2014-03-27 20:04:47.000000000 +0000 @@ -8,9 +8,7 @@ dh_clean override_dh_auto_test: - #make tests - # FIXME: enable above line once python3 doesn't depend on dh-python anymore - # (i.e. there are no circular dependencies) + # FIXME override_dh_auto_install: DESTDIR=debian/dh-python PREFIX=/usr make install manpages @@ -18,5 +16,9 @@ rm debian/dh-python/usr/share/debhelper/autoscripts/postinst-pycompile rm debian/dh-python/usr/share/debhelper/autoscripts/prerm-pyclean rm debian/dh-python/usr/share/perl5/Debian/Debhelper/Sequence/python2.pm + # drop files shipped in python3 (and compatible with dh-python) + rm debian/dh-python/usr/share/debhelper/autoscripts/postinst-py3compile + rm debian/dh-python/usr/share/debhelper/autoscripts/prerm-py3clean + rm debian/dh-python/usr/share/perl5/Debian/Debhelper/Sequence/python3.pm # generate maintainer scripts, etc. ./dh_python3 diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/debian/source/format dh-python-1.20140128/debian/source/format --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/debian/source/format 2015-07-19 13:16:45.000000000 +0000 +++ dh-python-1.20140128/debian/source/format 2014-03-27 20:04:47.000000000 +0000 @@ -1 +1 @@ -3.0 (native) +3.0 (quilt) diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/dh/pybuild.pm dh-python-1.20140128/dh/pybuild.pm --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/dh/pybuild.pm 2015-08-22 10:29:02.000000000 +0000 +++ dh-python-1.20140128/dh/pybuild.pm 2014-01-28 17:20:25.000000000 +0000 @@ -8,7 +8,6 @@ package Debian::Debhelper::Buildsystem::pybuild; use strict; -use Dpkg::Control; use Debian::Debhelper::Dh_Lib qw(error doit); use base 'Debian::Debhelper::Buildsystem'; @@ -94,26 +93,6 @@ # NOTE: possible problems with alternative/versioned dependencies my @deps = $this->python_build_dependencies(); - my @py2opts = ('pybuild', "--$step"); - my @py3opts = ('pybuild', "--$step"); - - if ($step == 'test' and $ENV{'PYBUILD_TEST_PYTEST'} != '1' && - $ENV{'PYBUILD_TEST_NOSE'} != '1' && - $ENV{'PYBUILD_TEST_TOX'} != '1') { - if (grep {$_ eq 'python-tox'} @deps) { - push @py2opts, '--test-tox'} - elsif (grep {$_ eq 'python-pytest'} @deps) { - push @py2opts, '--test-pytest'} - elsif (grep {$_ eq 'python-nose'} @deps) { - push @py2opts, '--test-nose'} - if (grep {$_ eq 'python3-tox'} @deps) { - push @py3opts, '--test-tox'} - elsif (grep {$_ eq 'python3-pytest'} @deps) { - push @py3opts, '--test-pytest'} - elsif (grep {$_ eq 'python3-nose'} @deps) { - push @py3opts, '--test-nose'} - } - my $pyall = 0; my $pyalldbg = 0; my $py3all = 0; @@ -125,39 +104,41 @@ if ($this->{pyvers}) { if (grep {$_ eq 'python-all' or $_ eq 'python-all-dev'} @deps) { $pyall = 1; - push @result, [@py2opts, '-i', $i, '-p', $this->{pyvers}, @options]; + push @result, ['pybuild', "--$step", '-i', $i, '-p', $this->{pyvers}, @options]; } if (grep {$_ eq 'python-all-dbg'} @deps) { $pyalldbg = 1; - push @result, [@py2opts, '-i', "$i-dbg", '-p', $this->{pyvers}, @options]; + push @result, ['pybuild', "--$step", '-i', "$i-dbg", '-p', $this->{pyvers}, @options]; } } if ($this->{pydef}) { if (not $pyall and grep {$_ eq 'python' or $_ eq 'python-dev'} @deps) { - push @result, [@py2opts, '-i', $i, '-p', $this->{pydef}, @options]; + push @result, ['pybuild', "--$step", '-i', $i, '-p', $this->{pydef}, @options]; } if (not $pyalldbg and grep {$_ eq 'python-dbg'} @deps) { - push @result, [@py2opts, '-i', "$i-dbg", '-p', $this->{pydef}, @options]; + push @result, ['pybuild', "--$step", '-i', "$i-dbg", '-p', $this->{pydef}, @options]; } } # Python 3 if ($this->{py3vers}) { + my $i = 'python{version}'; if (grep {$_ eq 'python3-all' or $_ eq 'python3-all-dev'} @deps) { $py3all = 1; - push @result, [@py3opts, '-i', $i, '-p', $this->{py3vers}, @options]; + push @result, ['pybuild', "--$step", '-i', $i, '-p', $this->{py3vers}, @options]; } if (grep {$_ eq 'python3-all-dbg'} @deps) { $py3alldbg = 1; - push @result, [@py3opts, '-i', "$i-dbg", '-p', $this->{py3vers}, @options]; + push @result, ['pybuild', "--$step", '-i', "$i-dbg", '-p', $this->{py3vers}, @options]; } } if ($this->{py3def}) { if (not $py3all and grep {$_ eq 'python3' or $_ eq 'python3-dev'} @deps) { - push @result, [@py3opts, '-i', $i, '-p', $this->{py3def}, @options]; + # TODO: "python3" case: should X-Python3-Version header in debian/control be also required here? + push @result, ['pybuild', "--$step", '-i', $i, '-p', $this->{py3def}, @options]; } if (not $py3alldbg and grep {$_ eq 'python3-dbg'} @deps) { - push @result, [@py3opts, '-i', "$i-dbg", '-p', $this->{py3def}, @options]; + push @result, ['pybuild', "--$step", '-i', "$i-dbg", '-p', $this->{py3def}, @options]; } } # TODO: pythonX.Y → `pybuild -i python{version} -p X.Y` @@ -174,16 +155,15 @@ my $this=shift; my @result; - my $c = Dpkg::Control->new(type => CTRL_INFO_SRC); - if ($c->load('debian/control')) { - for my $field (grep /^Build-Depends/, keys %{$c}) { - my $builddeps = $c->{$field}; - while ($builddeps =~ /(?:^|[\s,])(pypy|python[0-9\.]*(-[^\s,]+)?)(?:[\s,]|$)/g) { - if ($1) {push @result, $1}; - } + open (CONTROL, 'debian/control') || error("cannot read debian/control: $!\n"); + foreach my $builddeps (join('', ) =~ + /^Build-Depends[^:]*:.*\n(?:^[^\w\n#].*\n)*/gmi) { + while ($builddeps =~ /[\s,](pypy|python[0-9\.]*(-all)?((-dev)|(-dbg))?)[\s,]|$/g) { + if ($1) {push @result, $1}; } } + close CONTROL; return @result; } diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/dh_pypy dh-python-1.20140128/dh_pypy --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/dh_pypy 2015-11-02 21:20:05.000000000 +0000 +++ dh-python-1.20140128/dh_pypy 2014-01-28 17:20:25.000000000 +0000 @@ -48,17 +48,15 @@ class Scanner(Scan): def handle_ext(self, fpath): - # PyPy doesn't include interpreter version in SONAME, - # its ABI is stable so f.e. PyPy 4.0 has "pypy-26" in SONAME path, fname = fpath.rsplit('/', 1) - soabi = EXTFILE_RE.search(fname) - if soabi is None: + tagver = EXTFILE_RE.search(fname) + if tagver is None: return - soabi = soabi.groupdict()['soabi'] - if soabi is None: + tagver = tagver.groupdict()['ver'] + if tagver is None: return - self.current_result.setdefault('ext_soabi', set()).add(soabi) - return + tagver = Version("%s.%s" % (tagver[0], tagver[1])) + return tagver def main(): @@ -201,7 +199,7 @@ dh.autoscript(package, 'postinst', 'postinst-pypycompile', args) dh.autoscript(package, 'prerm', 'prerm-pypyclean', '') pypyclean_added = True - for pdir, details in sorted(stats['private_dirs'].items()): + for pdir, details in stats['private_dirs'].items(): if not details.get('compile'): continue if not pypyclean_added: diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/dh_pypy.rst dh-python-1.20140128/dh_pypy.rst --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/dh_pypy.rst 2015-07-19 19:51:26.000000000 +0000 +++ dh-python-1.20140128/dh_pypy.rst 2014-01-28 17:20:25.000000000 +0000 @@ -31,34 +31,14 @@ dependencies ~~~~~~~~~~~~ -dh_pypy tries to translate Python dependencies from the `requires.txt` file -to Debian dependencies. In many cases, this works without any additional -configuration because dh_pypy comes with a build-in mapping of Python module -names to Debian packages that is periodically regenerated from the Debian -archive. By default, the version information in the Python dependencies is -discarded. If you want dh_pypy to generate more strict dependencies (e.g. to -avoid ABI problems), or if the automatic mapping does not work correctly for -your package, you have to provide dh_pypy with additional rules for the -translation of Python module to Debian package dependencies. - -For a package *pypy-foo* that depends on a package *pypy-bar*, there are -two files that may provide such rules: - -#. If the *pypy-foo* source package ships with a - `debian/pypy-overrides` file, this file is used by dh_pypy - during the build of *pypy-foo*. - -#. If the *pypy-bar* source package ships with a - `debian/pypy-bar.pydist` file (and uses dh_pypy), this file - will be included in the binary package as - `/usr/share/dh-python/dist/pypy/pypy-bar`. During the build - of *pypy-foo*, dh_pypy will then find and use the file. - -Both files have the same format described in -`/usr/share/doc/dh-python/README.PyDist`. If all you want is to generate -versioned dependencies (and assuming that the *pypy-bar* package provides -the *pybar* Python module), in most cases it will be sufficient to put the line -``pybar pypy-bar; PEP386`` into either of the above files. +dh_pypy tries to translate Python dependencies from requires.txt file to +Debian dependencies. Use debian/pypydist-overrides or --no-guessing-deps option +to override it if the guess is incorrect. If you want dh_pypy to generate +more strict dependencies (f.e. to avoid ABI problems) create +debian/pypy-foo.pydist file. See /usr/share/doc/dh-python/README.PyDist +for more information. If the pydist file contains PEP386 flag or set of (uscan +like) rules, dh_pypy will make the depedency versioned (version requirements +are ignored by default). private dirs ~~~~~~~~~~~~ diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/dhpython/build/base.py dh-python-1.20140128/dhpython/build/base.py --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/dhpython/build/base.py 2015-10-29 22:17:08.000000000 +0000 +++ dh-python-1.20140128/dhpython/build/base.py 2014-01-28 17:20:25.000000000 +0000 @@ -22,9 +22,9 @@ from functools import wraps from glob import glob1 from os import remove, walk -from os.path import exists, isdir, join +from os.path import isdir, join from subprocess import Popen, PIPE -from shutil import rmtree, copytree +from shutil import rmtree from dhpython.tools import execute try: from shlex import quote @@ -149,22 +149,8 @@ raise NotImplementedError("build method not implemented in %s" % self.NAME) def test(self, context, args): - dirs_to_remove = set() - for dname in ('test', 'tests'): - src_dpath = join(args['dir'], dname) - dst_dpath = join(args['build_dir'], dname) - if isdir(src_dpath): - if not exists(dst_dpath): - copytree(src_dpath, dst_dpath) - dirs_to_remove.add(dst_dpath + '\n') - if not args['args'] and 'PYBUILD_TEST_ARGS' not in context['ENV']\ - and (self.cfg.test_pytest or self.cfg.test_nose): - args['args'] = dname - if dirs_to_remove: - with open(join(args['home_dir'], 'build_dirs_to_rm_before_install'), 'w') as fp: - fp.writelines(dirs_to_remove) if self.cfg.test_nose: - return 'cd {build_dir}; {interpreter} -m nose {args}' + return 'cd {build_dir}; {interpreter} -m nose --with-doctest {args}' elif self.cfg.test_pytest: return 'cd {build_dir}; {interpreter} -m pytest {args}' elif self.cfg.test_tox: diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/dhpython/build/plugin_distutils.py dh-python-1.20140128/dhpython/build/plugin_distutils.py --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/dhpython/build/plugin_distutils.py 2015-10-31 22:16:19.000000000 +0000 +++ dh-python-1.20140128/dhpython/build/plugin_distutils.py 2014-01-28 17:20:25.000000000 +0000 @@ -41,18 +41,14 @@ fpath = join(args['home_dir'], '.pydistutils.cfg') if not exists(fpath): with open(fpath, 'w', encoding='utf-8') as fp: - lines = ['[clean]\n', - 'all=1\n', - '[build]\n', - 'build-lib={}\n'.format(args['build_dir']), - '[install]\n', - 'install-layout=deb\n', - 'install-scripts=/usr/bin\n', - 'install-lib={}\n'.format(args['install_dir']), - '[easy_install]\n', - 'allow_hosts=None\n'] - log.debug('pydistutils config file:\n%s', ''.join(lines)) - fp.writelines(lines) + fp.writelines(['[clean]\n', + 'all=1\n', + '[build]\n', + 'build-lib={}\n'.format(args['build_dir']), + '[install]\n', + 'install-layout=deb\n', + 'install-scripts=/usr/bin\n', + 'install-lib={}\n'.format(args['install_dir'])]) context['ENV']['HOME'] = args['home_dir'] return func(self, context, args, *oargs, **kwargs) @@ -85,9 +81,10 @@ super(BuildSystem, self).clean(context, args) dpath = join(context['dir'], 'build') isdir(dpath) and rmtree(dpath) - if exists(args['interpreter'].binary()): - return '{interpreter} {setup_py} clean {args}' - return 0 # no need to invoke anything + for fname in glob1(context['dir'], '*.egg-info'): + fpath = join(context['dir'], fname) + rmtree(fpath) if isdir(fpath) else remove(fpath) + return '{interpreter} {setup_py} clean {args}' @shell_command @create_pydistutils_cfg @@ -102,11 +99,6 @@ @shell_command @create_pydistutils_cfg def install(self, context, args): - # remove egg-info dirs from build_dir - for fname in glob1(args['build_dir'], '*.egg-info'): - fpath = join(args['build_dir'], fname) - rmtree(fpath) if isdir(fpath) else remove(fpath) - return '{interpreter.binary_dv} {setup_py} install --root {destdir} {args}' @shell_command diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/dhpython/debhelper.py dh-python-1.20140128/dhpython/debhelper.py --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/dhpython/debhelper.py 2015-07-28 20:48:50.000000000 +0000 +++ dh-python-1.20140128/dhpython/debhelper.py 2014-01-28 17:20:25.000000000 +0000 @@ -21,7 +21,7 @@ import logging from os import makedirs, chmod from os.path import exists, join, dirname -from dhpython import DEPENDS_SUBSTVARS, PKG_NAME_TPLS, RT_LOCATIONS, RT_TPLS +from dhpython import PKG_NAME_TPLS, RT_LOCATIONS, RT_TPLS log = logging.getLogger('dhpython') @@ -43,7 +43,6 @@ if name != impl: skip_tpl.update(tpls) skip_tpl = tuple(skip_tpl) - substvar = DEPENDS_SUBSTVARS[impl] pkgs = options.package skip_pkgs = options.no_package @@ -54,12 +53,9 @@ raise Exception('cannot find debian/control file') for line in fp: - if line.startswith('#'): - continue if not line.strip(): source_section = False binary_package = None - inside_depends_field = False continue line_l = line.lower() # field names are case-insensitive if binary_package: @@ -71,21 +67,6 @@ #del self.packages[binary_package] self.packages[binary_package]['arch'] = arch continue - if not binary_package.startswith(PKG_NAME_TPLS[impl]): - # package doesn't have common prefix (python-, python3-, pypy-) - # so lets check if Depends contains appropriate substvar - if line_l.startswith('depends:'): - if substvar in line: - continue - inside_depends_field = True - elif inside_depends_field: # multiline continuation - if not line.startswith((' ', '\t')): - inside_depends_field = False - log.debug('skipping package %s (missing %s in Depends)', - binary_package, substvar) - del self.packages[binary_package] - elif substvar in line: - inside_depends_field = None elif line_l.startswith('package:'): binary_package = line[8:].strip() if skip_tpl and binary_package.startswith(skip_tpl): @@ -154,7 +135,7 @@ tpl = tplfile.read() if self.options.compile_all and args: # TODO: should args be checked to contain dir name? - tpl = tpl.replace('-p #PACKAGE#', '') + tpl = tpl.replace('#PACKAGE#', '') else: tpl = tpl.replace('#PACKAGE#', package) tpl = tpl.replace('#ARGS#', i) diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/dhpython/_defaults.py dh-python-1.20140128/dhpython/_defaults.py --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/dhpython/_defaults.py 2015-11-04 18:21:44.000000000 +0000 +++ dh-python-1.20140128/dhpython/_defaults.py 2014-01-28 17:20:25.000000000 +0000 @@ -27,12 +27,12 @@ SUPPORTED = { 'cpython2': [(2, 7)], - 'cpython3': [(3, 4), (3, 5)], - 'pypy': [(4, 0)]} + 'cpython3': [(3, 3)], + 'pypy': [(2, 0)]} DEFAULT = { 'cpython2': (2, 7), - 'cpython3': (3, 4), - 'pypy': (4, 0)} + 'cpython3': (3, 3), + 'pypy': (2, 0)} log = logging.getLogger('dhpython') diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/dhpython/depends.py dh-python-1.20140128/dhpython/depends.py --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/dhpython/depends.py 2015-11-03 19:39:28.000000000 +0000 +++ dh-python-1.20140128/dhpython/depends.py 2014-01-28 17:20:25.000000000 +0000 @@ -61,17 +61,17 @@ def export_to(self, dh): """Fill in debhelper's substvars.""" prefix = PKG_PREFIX_MAP.get(self.impl, 'misc') - for i in sorted(self.depends): + for i in self.depends: dh.addsubstvar(self.package, '{}:Depends'.format(prefix), i) - for i in sorted(self.recommends): + for i in self.recommends: dh.addsubstvar(self.package, '{}:Recommends'.format(prefix), i) - for i in sorted(self.suggests): + for i in self.suggests: dh.addsubstvar(self.package, '{}:Suggests'.format(prefix), i) - for i in sorted(self.enhances): + for i in self.enhances: dh.addsubstvar(self.package, '{}:Enhances'.format(prefix), i) - for i in sorted(self.breaks): + for i in self.breaks: dh.addsubstvar(self.package, '{}:Breaks'.format(prefix), i) - for i in sorted(self.rtscripts): + for i in self.rtscripts: dh.add_rtupdate(self.package, i) def __str__(self): @@ -139,13 +139,6 @@ if maxv >= default(self.impl): self.depend("%s (<< %s)" % (tpl_ma, maxv + 1)) - if self.impl == 'pypy' and stats.get('ext_soabi'): - # TODO: make sure alternative is used only for the same extension names - # ie. for foo.ABI1.so, foo.ABI2.so, bar.ABI3,so, bar.ABI4.so generate: - # pypy-abi-ABI1 | pypy-abi-ABI2, pypy-abi-ABI3 | pypy-abi-ABI4 - self.depend('|'.join(soabi.replace('-', '-abi-') - for soabi in sorted(stats['ext_soabi']))) - if stats['ext_vers']: # TODO: what about extensions with stable ABI? sorted_vers = sorted(stats['ext_vers']) @@ -162,7 +155,7 @@ self.depend(MINPYCDEP[self.impl]) for ipreter in stats['shebangs']: - self.depend("%s%s" % (ipreter, '' if self.impl == 'pypy' else ':any')) + self.depend("%s%s" % (ipreter, ':any' if self.impl == 'pypy' else '')) supported_versions = supported(self.impl) default_version = default(self.impl) @@ -222,12 +215,6 @@ # removed from requires.txt? for i in parse_pydep(self.impl, fn): self.depend(i) - for fpath in stats['egg-info']: - with open(fpath, 'r', encoding='utf-8') as fp: - for line in fp: - if line.startswith('Requires: '): - req = line[10:].strip() - self.depend(guess_dependency(self.impl, req)) # add dependencies from --depends for item in options.depends or []: diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/dhpython/fs.py dh-python-1.20140128/dhpython/fs.py --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/dhpython/fs.py 2015-11-02 21:41:00.000000000 +0000 +++ dh-python-1.20140128/dhpython/fs.py 2014-01-28 17:20:25.000000000 +0000 @@ -22,7 +22,7 @@ import os import re from filecmp import cmp as cmpfile -from os.path import exists, dirname, isdir, islink, join, split, splitext +from os.path import exists, isdir, islink, join, split, splitext from shutil import rmtree from stat import ST_MODE, S_IXUSR, S_IXGRP, S_IXOTH from dhpython import MULTIARCH_DIR_TPL @@ -47,12 +47,8 @@ log.debug('moving files from %s to %s', srcdir, dstdir) share_files(srcdir, dstdir, interpreter, options) parent_dir = '/'.join(srcdir.split('/')[:-1]) - while parent_dir: - if exists(parent_dir): - if os.listdir(parent_dir): - break - os.rmdir(parent_dir) - parent_dir = dirname(parent_dir) + if exists(parent_dir) and not os.listdir(parent_dir): + os.rmdir(parent_dir) # do the same with debug locations dstdir = interpreter.sitedir(package, gdb=True) @@ -61,12 +57,8 @@ log.debug('moving files from %s to %s', srcdir, dstdir) share_files(srcdir, dstdir, interpreter, options) parent_dir = '/'.join(srcdir.split('/')[:-1]) - while parent_dir: - if exists(parent_dir): - if os.listdir(parent_dir): - break - os.rmdir(parent_dir) - parent_dir = dirname(parent_dir) + if exists(parent_dir) and not os.listdir(parent_dir): + os.rmdir(parent_dir) def share_files(srcdir, dstdir, interpreter, options): @@ -76,21 +68,20 @@ if not options.no_ext_rename and splitext(i)[-1] == '.so': # try to rename extension here as well (in :meth:`scan` info about # Python version is gone) - version = interpreter.parse_public_dir(srcdir) - # if version is True it means it's unversioned dist-packages dir - if version and version is not True: + version = interpreter.parse_public_version(srcdir) + if version: # note that if ver is empty, default Python version will be used fpath1_orig = fpath1 new_name = interpreter.check_extname(i, version) if new_name: fpath1 = join(srcdir, new_name) - if exists(fpath1): - log.warn('destination file exist, ' - 'cannot rename %s to %s', fpath1_orig, fpath1) - else: - log.info('renaming %s to %s', fpath1_orig, fpath1) - os.renames(fpath1_orig, fpath1) - i = new_name + if exists(fpath1): + log.warn('destination file exist, ' + 'cannot rename %s to %s', fpath1_orig, fpath1) + else: + log.info('renaming %s to %s', fpath1_orig, fpath1) + os.renames(fpath1_orig, fpath1) + i = new_name fpath2 = join(dstdir, i) if not isdir(fpath1) and not exists(fpath2): # do not rename directories here - all .so files have to be renamed first @@ -126,7 +117,6 @@ self.options = options self.result = {'requires.txt': set(), - 'egg-info': set(), 'nsp.txt': set(), 'shebangs': set(), 'public_vers': set(), @@ -140,26 +130,11 @@ del dirs[:] continue - self.current_private_dir = self.current_pub_version = None - version = interpreter.parse_public_dir(root) - if version: - self.current_dir_is_public = True - if version is True: - version = None - else: - self.current_pub_version = version - else: - self.current_dir_is_public = False - - if self.current_dir_is_public: + self.current_private_dir = None + self.current_pub_version = version = interpreter.parse_public_version(root) + if self.current_pub_version: # i.e. a public site-packages directory if root.endswith('-packages'): - if version is not None: - self.result['public_vers'].add(version) - for name in ('test', 'tests'): - if name in dirs: - log.debug('removing dist-packages/%s (too common name)', name) - rmtree(join(root, name)) - dirs.remove(name) + self.result['public_vers'].add(version) else: self.current_private_dir = self.check_private_dir(root) if not self.current_private_dir: @@ -233,19 +208,6 @@ if fext == 'py' and self.handle_public_module(fpath) is not False: self.current_result['compile'] = True - if not dirs: - # try to remove directory if it's empty (and its parent if it's empty afterwards) - while root: - try: - os.rmdir(root) - log.debug('removing empty directory: %s', root) - except Exception: - break - root = root.rsplit('/', 1)[0] - - if not root.startswith(self.proot): - break - log.debug("package %s details = %s", package, self.result) @property @@ -260,7 +222,7 @@ def is_unwanted_file(self, fpath): if self.__class__.UNWANTED_FILES.match(fpath): return True - if self.current_dir_is_public and self.is_dbg_package\ + if self.current_pub_version and self.is_dbg_package\ and self.options.clean_dbg_pkg\ and splitext(fpath)[-1][1:] not in ('so', 'h'): return True @@ -298,7 +260,7 @@ This method is invoked for all .so files in public or private directories. """ path, fname = fpath.rsplit('/', 1) - if self.current_dir_is_public and islink(fpath): + if self.current_pub_version and islink(fpath): # replace symlinks with extensions in dist-packages directory dstfpath = fpath links = set() @@ -316,7 +278,6 @@ if MULTIARCH_DIR_TPL.match(fpath): # ignore /lib/i386-linux-gnu/, /usr/lib/x86_64-kfreebsd-gnu/, etc. return fpath - new_fn = self.interpreter.check_extname(fname, self.current_pub_version) if new_fn: # TODO: what about symlinks pointing to this file @@ -404,7 +365,6 @@ else: log.info('renaming %s to %s', name, clean_name) os.rename(fpath, join(root, clean_name)) - self.result['egg-info'].add(join(root, clean_name)) def cleanup(self): if self.is_dbg_package and self.options.clean_dbg_pkg: diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/dhpython/__init__.py dh-python-1.20140128/dhpython/__init__.py --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/dhpython/__init__.py 2015-07-28 16:45:29.000000000 +0000 +++ dh-python-1.20140128/dhpython/__init__.py 2014-01-28 17:20:25.000000000 +0000 @@ -80,11 +80,6 @@ 'pypy': '*pypy/*/{}-?\.egg-info'} # DebHelper related -DEPENDS_SUBSTVARS = { - 'cpython2': '${python:Depends}', - 'cpython3': '${python3:Depends}', - 'pypy': '${pypy:Depends}', -} PKG_NAME_TPLS = { 'cpython2': ('python-', 'python2.'), 'cpython3': ('python3-', 'python3.'), diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/dhpython/interpreter.py dh-python-1.20140128/dhpython/interpreter.py --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/dhpython/interpreter.py 2015-11-02 21:42:55.000000000 +0000 +++ dh-python-1.20140128/dhpython/interpreter.py 2014-01-28 17:20:25.000000000 +0000 @@ -277,15 +277,15 @@ return result - def parse_public_dir(self, path): - """Return version assigned to site-packages path - or True is it's unversioned public dir.""" + def parse_public_version(self, path): + """Return version assigned to site-packages path.""" match = PUBLIC_DIR_RE[self.impl].match(path) if match: vers = match.groups(0) - if vers and vers[0]: + if vers: return Version(vers) - return True + # PyPy is not versioned + return default(self.impl) def should_ignore(self, path): """Return True if path is used by another interpreter implementation.""" @@ -309,8 +309,8 @@ >>> i = Interpreter('python') >>> i.cache_file('foo.py', Version('3.1')) 'foo.pyc' - >>> i.cache_file('bar/foo.py', '3.4') - 'bar/__pycache__/foo.cpython-34.pyc' + >>> i.cache_file('bar/foo.py', '3.3') + 'bar/__pycache__/foo.cpython-33.pyc' """ version = Version(version or self.version) last_char = 'o' if '-O' in self.options else 'c' @@ -335,8 +335,8 @@ """Return Python magic tag (used in __pycache__ dir to tag files). >>> i = Interpreter('python') - >>> i.magic_tag(version='3.4') - 'cpython-34' + >>> i.magic_tag(version='3.3') + 'cpython-33' """ version = Version(version or self.version) if self.impl.startswith('cpython') and version << Version('3.2'): @@ -378,8 +378,8 @@ >>> Interpreter('python2.7').include_dir '/usr/include/python2.7' - >>> Interpreter('python3.4-dbg').include_dir - '/usr/include/python3.4dm' + >>> Interpreter('python3.3-dbg').include_dir + '/usr/include/python3.3dm' """ if self.impl == 'pypy': return '/usr/lib/pypy/include' @@ -419,8 +419,6 @@ def check_extname(self, fname, version=None): """Return extension file name if file can be renamed.""" - if not version and not self.version: - return version = Version(version or self.version) @@ -462,13 +460,12 @@ tmp_multiarch = info['multiarch'] or multiarch result = info['name'] - if result.endswith('module') and (self.impl == 'cpython3' and version >> '3.2' - or self.impl == 'cpython2' and version == '2.7'): + if self.impl == 'cpython3' and version >> '3.2' and result.endswith('module'): result = result[:-6] if tmp_soabi: result = "{}.{}".format(result, tmp_soabi) - if tmp_multiarch and not (self.impl == 'cpython3' and version << '3.3') and tmp_multiarch not in soabi: + if tmp_multiarch and not (self.impl == 'cpython3' and version << '3.3'): result = "{}-{}".format(result, tmp_multiarch) elif self.impl == 'cpython2' and version == '2.7' and tmp_multiarch: result = "{}.{}".format(result, tmp_multiarch) @@ -485,7 +482,7 @@ >>> Interpreter('python3.1').suggest_pkg_name('foo') 'python3-foo' - >>> Interpreter('python3.4').suggest_pkg_name('foo') + >>> Interpreter('python3.3').suggest_pkg_name('foo') 'python3-foo' >>> Interpreter('python2.7-dbg').suggest_pkg_name('bar') 'python-bar-dbg' @@ -512,9 +509,6 @@ 'for i in s.get_config_vars('\ '"SOABI", "MULTIARCH", "INCLUDEPY", "LIBPL", "LDLIBRARY")))' conf_vars = self._execute(cmd, version).split('__SEP__') - if conf_vars[1] in conf_vars[0]: - # Python >= 3.5 includes MILTIARCH in SOABI - conf_vars[0] = conf_vars[0].replace("-%s" % conf_vars[1], '') try: conf_vars[1] = os.environ['DEB_HOST_MULTIARCH'] except KeyError: diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/dhpython/pydist.py dh-python-1.20140128/dhpython/pydist.py --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/dhpython/pydist.py 2015-10-25 16:04:16.000000000 +0000 +++ dh-python-1.20140128/dhpython/pydist.py 2014-01-28 17:20:25.000000000 +0000 @@ -49,13 +49,11 @@ \s* (?P(?:\[[^\]]*\])?) # ignored for now \s* - \(? # optional parenthesis (?: # optional minimum/maximum version (?P<=?|>=?|==|!=) \s* (?P(\w|[-.])+) )? - \)? # optional closing parenthesis ''', re.VERBOSE) @@ -117,14 +115,13 @@ def guess_dependency(impl, req, version=None): - log.debug('trying to find dependency for %s (python=%s)', + log.debug('trying to guess dependency for %s (python=%s)', req, version) if isinstance(version, str): version = Version(version) # some upstreams have weird ideas for distribution name... - name, rest = re.compile('([^!><= \(\)\[]+)(.*)').match(req).groups() - # TODO: check stdlib and dist-packaged for name.py and name.so files + name, rest = re.compile('([^><= \[]+)(.*)').match(req).groups() req = safe_name(name) + rest data = load(impl) @@ -155,7 +152,7 @@ else: return item['dependency'] - # search for Egg metadata file or directory (using dpkg -S) + # try dpkg -S query = PYDIST_DPKG_SEARCH_TPLS[impl].format(ci_regexp(safe_name(name))) log.debug("invoking dpkg -S %s", query) @@ -176,20 +173,21 @@ else: log.debug('dpkg -S did not find package for %s: %s', name, stderr) + # fall back to python-distname pname = sensible_pname(impl, name) - log.info('Cannot find package that provides %s. ' - 'Please add package that provides it to Build-Depends or ' - 'add "%s %s" line to %s or add proper ' - ' dependency to Depends by hand and ignore this info.', - name, safe_name(name), pname, PYDIST_OVERRIDES_FNAMES[impl]) - # return pname + log.info('Cannot find installed package that provides %s. ' + 'Using %s as package name. Please add "%s correct_package_name" ' + 'line to debian/py3dist-overrides to override it IF this is incorrect.', + name, pname, safe_name(name)) + return pname def parse_pydep(impl, fname): public_dir = PUBLIC_DIR_RE[impl].match(fname) - ver = None - if public_dir and public_dir.groups() and len(public_dir.group(1)) != 1: + if public_dir and len(public_dir.group(1)) != 1: ver = public_dir.group(1) + else: + ver = None result = [] modified = optional_section = False @@ -208,7 +206,10 @@ dependency = guess_dependency(impl, line, ver) if dependency: result.append(dependency) - modified = True + if 'setuptools' in line.lower(): + modified = True + else: + processed.append(line) else: processed.append(line) if modified: diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/dhpython/tools.py dh-python-1.20140128/dhpython/tools.py --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/dhpython/tools.py 2015-08-26 14:21:06.000000000 +0000 +++ dh-python-1.20140128/dhpython/tools.py 2014-01-28 17:20:25.000000000 +0000 @@ -42,7 +42,7 @@ """ t = target.split('/') l = link.split('/') - while l and l[0] == t[0]: + while l[0] == t[0]: del l[0], t[0] return '/'.join(['..'] * (len(l) - 1) + t) @@ -70,7 +70,7 @@ def move_matching_files(src, dst, pattern): """Move files (preserving path) that match given pattern. - move_matching_files('foo/bar/', 'foo/baz/', 'spam/.*\.so$') + move_files('foo/bar/', 'foo/baz/', 'spam/.*\.so$') will move foo/bar/a/b/c/spam/file.so to foo/baz/a/b/c/spam/file.so """ match = re.compile(pattern).search @@ -78,7 +78,7 @@ for fn in filenames: spath = join(root, fn) if match(spath): - dpath = join(dst, relpath(spath, src)) + dpath = join(dst, spath.lstrip(src).lstrip('/')) os.renames(spath, dpath) @@ -90,7 +90,7 @@ try: interpreter = Interpreter.from_file(fpath) except Exception as err: - log.debug('fix_shebang (%s): %s', fpath, err) + log.error('fix_shebang (%s): %s', fpath, err) return None if not replacement and interpreter.path != '/usr/bin/': # f.e. /usr/local/* or */bin/env @@ -189,7 +189,7 @@ return result -def execute(command, cwd=None, env=None, log_output=None, shell=True): +def execute(command, cwd=None, env=None, log_output=None): """Execute external shell commad. :param cdw: currennt working directory @@ -199,7 +199,7 @@ * None if output should be included in the returned dict, or * False if output should be redirectored to stdout/stderr """ - args = {'shell': shell, 'cwd': cwd, 'env': env} + args = {'shell': True, 'cwd': cwd, 'env': env} close = False if log_output is False: pass @@ -301,7 +301,7 @@ site_dirs = interpreter.old_sitedirs(package, version) site_dirs.append(interpreter.sitedir(package, version)) for sdir in site_dirs: - files = glob(sdir + '/' + details['pattern']) + files = glob(sdir + details['pattern']) for fpath in files: if isdir(fpath): rmtree(fpath) diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/dhpython/version.py dh-python-1.20140128/dhpython/version.py --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/dhpython/version.py 2015-10-25 12:52:38.000000000 +0000 +++ dh-python-1.20140128/dhpython/version.py 2014-01-28 17:20:25.000000000 +0000 @@ -425,25 +425,3 @@ if not exists(interpreter.binary(v))) return versions - - -def build_sorted(versions, impl='cpython3'): - """Return sorted list of versions in a build friendly order. - - i.e. default version, if among versions, is sorted last. - - >>> build_sorted([(2, 6), (3, 4), default('cpython3'), (3, 6), (2, 7)])[-1] == default('cpython3') - True - >>> build_sorted(('3.2', (3, 0), '3.1')) - [Version('3.0'), Version('3.1'), Version('3.2')] - """ - default_ver = default(impl) - - result = sorted(Version(v) for v in versions) - try: - result.remove(default_ver) - except ValueError: - pass - else: - result.append(default_ver) - return result diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/dh_python2 dh-python-1.20140128/dh_python2 --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/dh_python2 2015-08-26 15:14:09.000000000 +0000 +++ dh-python-1.20140128/dh_python2 2014-01-28 17:20:25.000000000 +0000 @@ -79,17 +79,16 @@ if len(pubvers) > 1: for pos, version1 in enumerate(pubvers): dir1 = interpreter.sitedir(package, version1) - if not exists(dir1): - continue for version2 in pubvers[pos + 1:]: dir2 = interpreter.sitedir(package, version2) - if exists(dir2): - dc = dircmp(dir1, dir2) - share_2x(dir1, dir2, dc) -# elif len(pubvers) == 1: -# move_to_pyshared(interpreter.sitedir(package, pubvers[0])) -# for version in stats['ext_vers']: -# create_ext_links(interpreter.sitedir(package, version)) + dc = dircmp(dir1, dir2) + share_2x(dir1, dir2, dc) + elif len(pubvers) == 1: + # TODO: remove this once file conflicts will not be needed anymore + move_to_pyshared(interpreter.sitedir(package, pubvers[0])) + + for version in stats['ext_vers']: + create_ext_links(interpreter.sitedir(package, version)) if options.guess_versions and pubvers: for version in get_requested_versions('cpython2', options.vrange): @@ -116,60 +115,60 @@ stats['nsp.txt'] = set(realpath(i) for i in stats['nsp.txt']) -# def move_to_pyshared(dir1): -# # dir1 starts with debian/packagename/usr/lib/pythonX.Y/*-packages/ -# debian, package, path = dir1.split('/', 2) -# dstdir = join(debian, package, 'usr/share/pyshared/', -# '/'.join(dir1.split('/')[6:])) -# -# for i in os.listdir(dir1): -# fpath1 = join(dir1, i) -# if isdir(fpath1) and not islink(fpath1): -# if any(fn for fn in os.listdir(fpath1) if fext(fn) != 'so'): -# # at least one file that is not an extension -# move_to_pyshared(join(dir1, i)) -# else: -# if fext(i) == 'so': -# continue -# fpath2 = join(dstdir, i) -# if not exists(fpath2): -# if not exists(dstdir): -# os.makedirs(dstdir) -# if islink(fpath1): -# fpath1_target = os.readlink(fpath1) -# if isabs(fpath1_target): -# os.symlink(fpath1_target, fpath2) -# else: -# fpath1_target = normpath(join(dir1, fpath1_target)) -# relative_symlink(fpath1_target, fpath2) -# os.remove(fpath1) -# else: -# os.rename(fpath1, fpath2) -# relative_symlink(fpath2, fpath1) -# -# -# def create_ext_links(dir1): -# """Create extension symlinks in /usr/lib/pyshared/pythonX.Y. -# -# These symlinks are used to let dpkg detect file conflicts with -# python-support and python-central packages. -# """ -# -# debian, package, path = dir1.split('/', 2) -# python, _, module_subpath = path[8:].split('/', 2) -# dstdir = join(debian, package, 'usr/lib/pyshared/', python, module_subpath) -# -# for i in os.listdir(dir1): -# fpath1 = join(dir1, i) -# if isdir(fpath1): -# create_ext_links(fpath1) -# elif fext(i) == 'so': -# fpath2 = join(dstdir, i) -# if exists(fpath2): -# continue -# if not exists(dstdir): -# os.makedirs(dstdir) -# relative_symlink(fpath1, join(dstdir, i)) +def move_to_pyshared(dir1): + # dir1 starts with debian/packagename/usr/lib/pythonX.Y/*-packages/ + debian, package, path = dir1.split('/', 2) + dstdir = join(debian, package, 'usr/share/pyshared/', + '/'.join(dir1.split('/')[6:])) + + for i in os.listdir(dir1): + fpath1 = join(dir1, i) + if isdir(fpath1) and not islink(fpath1): + if any(fn for fn in os.listdir(fpath1) if fext(fn) != 'so'): + # at least one file that is not an extension + move_to_pyshared(join(dir1, i)) + else: + if fext(i) == 'so': + continue + fpath2 = join(dstdir, i) + if not exists(fpath2): + if not exists(dstdir): + os.makedirs(dstdir) + if islink(fpath1): + fpath1_target = os.readlink(fpath1) + if isabs(fpath1_target): + os.symlink(fpath1_target, fpath2) + else: + fpath1_target = normpath(join(dir1, fpath1_target)) + relative_symlink(fpath1_target, fpath2) + os.remove(fpath1) + else: + os.rename(fpath1, fpath2) + relative_symlink(fpath2, fpath1) + + +def create_ext_links(dir1): + """Create extension symlinks in /usr/lib/pyshared/pythonX.Y. + + These symlinks are used to let dpkg detect file conflicts with + python-support and python-central packages. + """ + + debian, package, path = dir1.split('/', 2) + python, _, module_subpath = path[8:].split('/', 2) + dstdir = join(debian, package, 'usr/lib/pyshared/', python, module_subpath) + + for i in os.listdir(dir1): + fpath1 = join(dir1, i) + if isdir(fpath1): + create_ext_links(fpath1) + elif fext(i) == 'so': + fpath2 = join(dstdir, i) + if exists(fpath2): + continue + if not exists(dstdir): + os.makedirs(dstdir) + relative_symlink(fpath1, join(dstdir, i)) def create_public_links(dir1, vrange, root=''): @@ -444,7 +443,7 @@ dh.autoscript(package, 'prerm', 'prerm-pyclean', '') pyclean_added = True - for pdir, details in sorted(stats['private_dirs'].items()): + for pdir, details in stats['private_dirs'].items(): if not details.get('compile'): continue if not pyclean_added: @@ -513,7 +512,7 @@ if not exists(dstdir): os.makedirs(dstdir) with open(join(dstdir, package), 'a', encoding='utf-8') as fp: - fp.writelines("%s\n" % i for i in sorted(nsp)) + fp.writelines("%s\n" % i for i in nsp) pyshared = join('debian', package, 'usr/share/pyshared/') if isdir(pyshared) and not os.listdir(pyshared): diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/dh_python2.rst dh-python-1.20140128/dh_python2.rst --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/dh_python2.rst 2015-08-18 15:22:43.000000000 +0000 +++ dh-python-1.20140128/dh_python2.rst 2014-01-28 17:20:25.000000000 +0000 @@ -21,7 +21,6 @@ * if necessary, describe supported Python versions via X-Python-Version field in debian/control, - * build depends on dh-python * build-depend on python or python-all or python-all-dev (>= 2.6.6-3~), * build module/application using its standard build system, remember to build extensions for all supported Python versions (loop over @@ -46,34 +45,14 @@ dependencies ~~~~~~~~~~~~ -dh_python2 tries to translate Python dependencies from the `requires.txt` file -to Debian dependencies. In many cases, this works without any additional -configuration because dh_python2 comes with a build-in mapping of Python module -names to Debian packages that is periodically regenerated from the Debian -archive. By default, the version information in the Python dependencies is -discarded. If you want dh_python2 to generate more strict dependencies (e.g. to -avoid ABI problems), or if the automatic mapping does not work correctly for -your package, you have to provide dh_python2 with additional rules for the -translation of Python module to Debian package dependencies. - -For a package *python-foo* that depends on a package *python-bar*, there are -two files that may provide such rules: - -#. If the *python-foo* source package ships with a - `debian/pydist-overrides` file, this file is used by dh_python - during the build of *python-foo*. - -#. If the *python-bar* source package ships with a - `debian/python-bar.pydist` file (and uses dh_python), this file - will be included in the binary package as - `/usr/share/dh-python/dist/cpython2/python-bar`. During the build - of *python-foo*, dh_python will then find and use the file. - -Both files have the same format described in -`/usr/share/doc/dh-python/README.PyDist`. If all you want is to generate -versioned dependencies (and assuming that the *python-bar* package provides -the *pybar* Python module), in most cases it will be sufficient to put the line -``pybar python-bar; PEP386`` into either of the above files. +dh_python2 tries to translate Python dependencies from requires.txt file to +Debian dependencies. Use debian/pydist-overrides or --no-guessing-deps option +to override it if the guess is incorrect. If you want dh_python2 to generate +more strict dependencies (f.e. to avoid ABI problems) create +debian/python-foo.pydist file. See /usr/share/doc/dh-python/README.PyDist +for more information. If the pydist file contains PEP386 flag or set of (uscan +like) rules, dh_python2 will make the depedency versioned (version requirements +are ignored by default). namespace feature ~~~~~~~~~~~~~~~~~ @@ -106,8 +85,8 @@ pyinstall files ~~~~~~~~~~~~~~~ Files listed in debian/pkg.pyinstall file will be installed as public modules -(i.e. into .../dist-packages/ directory) for all requested Python versions -(dh_install doesn't know about python's site- vs. dist-packages issue). +for all requested Python versions (dh_install doesn't know about python's site- +vs. dist-packages issue). Syntax: ``path/to/file [VERSION_RANGE] [NAMESPACE]`` @@ -126,9 +105,9 @@ pyremove files ~~~~~~~~~~~~~~ -If you want to remove some public modules (i.e. files in .../dist-packages/ -directory) installed by build system (from all supported Python versions or -only from a subset of these versions), add them to debian/pkg.pyremove file. +If you want to remove some files installed by build system (from all supported +Python versions or only from a subset of these versions), add them to +debian/pkg.pyremove file. Examples: * ``*.pth`` removes .pth files from .../dist-packages/ diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/dh_python3 dh-python-1.20140128/dh_python3 --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/dh_python3 2015-11-02 23:01:38.000000000 +0000 +++ dh-python-1.20140128/dh_python3 2014-01-28 17:20:25.000000000 +0000 @@ -35,7 +35,7 @@ from dhpython.pydist import validate as validate_pydist from dhpython.fs import fix_locations, Scan from dhpython.option import Option -from dhpython.tools import pyinstall, pyremove +from dhpython.tools import pyremove # initialize script logging.basicConfig(format='%(levelname).1s: dh_python3 ' @@ -173,11 +173,6 @@ if not private_dir: try: - pyinstall(interpreter, package, options.vrange) - except Exception as err: - log.error("%s.pyinstall: %s", package, err) - exit(4) - try: pyremove(interpreter, package, options.vrange) except Exception as err: log.error("%s.pyremove: %s", package, err) @@ -205,7 +200,7 @@ dh.autoscript(package, 'postinst', 'postinst-py3compile', args) dh.autoscript(package, 'prerm', 'prerm-py3clean', '') pyclean_added = True - for pdir, details in sorted(stats['private_dirs'].items()): + for pdir, details in stats['private_dirs'].items(): if not details.get('compile'): continue if not pyclean_added: diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/dh_python3.rst dh-python-1.20140128/dh_python3.rst --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/dh_python3.rst 2015-08-18 15:23:04.000000000 +0000 +++ dh-python-1.20140128/dh_python3.rst 2014-01-28 17:20:25.000000000 +0000 @@ -21,7 +21,6 @@ * if necessary, describe supported Python 3 versions via X-Python3-Version field in debian/control, - * build depends on dh-python * build-depend on python3 or python3-all or python3-all-dev, * build module/application using its standard build system, remember to build extensions for all supported Python 3 versions (loop over @@ -39,34 +38,14 @@ dependencies ~~~~~~~~~~~~ -dh_python3 tries to translate Python dependencies from the `requires.txt` file -to Debian dependencies. In many cases, this works without any additional -configuration because dh_python3 comes with a build-in mapping of Python module -names to Debian packages that is periodically regenerated from the Debian -archive. By default, the version information in the Python dependencies is -discarded. If you want dh_python3 to generate more strict dependencies (e.g. to -avoid ABI problems), or if the automatic mapping does not work correctly for -your package, you have to provide dh_python3 with additional rules for the -translation of Python module to Debian package dependencies. - -For a package *python3-foo* that depends on a package *python3-bar*, there are -two files that may provide such rules: - -#. If the *python3-foo* source package ships with a - `debian/py3dist-overrides` file, this file is used by dh_python3 - during the build of *python3-foo*. - -#. If the *python3-bar* source package ships with a - `debian/python3-bar.pydist` file (and uses dh_python3), this file - will be included in the binary package as - `/usr/share/dh-python/dist/cpython3/python3-bar`. During the build - of *python3-foo*, dh_python3 will then find and use the file. - -Both files have the same format described in -`/usr/share/doc/dh-python/README.PyDist`. If all you want is to generate -versioned dependencies (and assuming that the *python3-bar* package provides -the *pybar* Python module), in most cases it will be sufficient to put the line -``pybar python3-bar; PEP386`` into either of the above files. +dh_python3 tries to translate Python dependencies from requires.txt file to +Debian dependencies. Use debian/py3dist-overrides or --no-guessing-deps option +to override it if the guess is incorrect. If you want dh_python3 to generate +more strict dependencies (f.e. to avoid ABI problems) create +debian/python3-foo.pydist file. See /usr/share/doc/dh-python/README.PyDist +for more information. If the pydist file contains PEP386 flag or set of (uscan +like) rules, dh_python3 will make the depedency versioned (version requirements +are ignored by default). private dirs ~~~~~~~~~~~~ @@ -87,36 +66,6 @@ that have extensions different than `so` or `h` are removed by default. Use --no-dbg-cleaning option to disable this feature. -pyinstall files -~~~~~~~~~~~~~~~ -Files listed in debian/pkg.pyinstall file will be installed as public modules -(i.e. into .../dist-packages/ directory) for all requested Python versions. - -Syntax: ``path/to/file [VERSION_RANGE] [NAMESPACE]`` - -debian directory is automatically removed from the path, so you can place your -files in debian/ directory and install them from this location (if you want to -install them in "debian" namespace, set NAMESPACE to debian). If NAMESPACE is -set, all listed files will be installed in .../dist-packages/NAMESPACE/ -directory. - -Examples: - * ``foo.py`` installs .../dist-packages/foo.py for all supported Python versions - * ``foo/bar.py 3.3-`` installs .../dist-packages/foo/bar.py for versions >= 3.3 - * ``foo/bar.py spam`` installs .../dist-packages/spam/bar.py - * ``debian/*.py spam.egg 3.2`` installs .../python3.2/dist-packages/spam/egg/\*.py - files - -pyremove files -~~~~~~~~~~~~~~ -If you want to remove some public modules (i.e. files in .../dist-packages/ -directory) installed by build system (from all supported Python versions or -only from a subset of these versions), add them to debian/pkg.pyremove file. - -Examples: - * ``*.pth`` removes .pth files from .../dist-packages/ - * ``bar/baz.py 3.2`` removes .../python3.2/dist-packages/bar/baz.py - overriding supported / default Python versions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If you want to override system's list of supported Python versions or the diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/.gitignore dh-python-1.20140128/.gitignore --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ dh-python-1.20140128/.gitignore 2014-01-28 17:20:25.000000000 +0000 @@ -0,0 +1,14 @@ +debian/dh-python/ +.pc +.coverage +__pycache__ +pydist/cache/ +*\.1 +*\.pyc +*\.deb +*\.changes +*\.log +*\.debhelper +*\.substvars +*/*/debian/files +debian/files diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/pybuild dh-python-1.20140128/pybuild --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/pybuild 2015-10-29 21:36:59.000000000 +0000 +++ dh-python-1.20140128/pybuild 2014-01-28 17:20:25.000000000 +0000 @@ -23,9 +23,8 @@ import logging import argparse import sys -from os import environ, getcwd, makedirs, remove +from os import environ, getcwd, makedirs from os.path import abspath, exists, join -from shutil import rmtree logging.basicConfig(format='%(levelname).1s: pybuild ' '%(module)s:%(lineno)d: %(message)s') @@ -35,7 +34,7 @@ def main(cfg): log.debug('cfg: %s', cfg) from dhpython import build - from dhpython.version import Version, build_sorted, get_requested_versions + from dhpython.version import Version, get_requested_versions from dhpython.interpreter import Interpreter from dhpython.tools import execute, move_matching_files @@ -51,16 +50,10 @@ env = environ.copy() if 'LC_ALL' not in env: env['LC_ALL'] = 'C.UTF-8' - if 'no_proxy' not in env: - env['no_proxy'] = 'localhost' if 'http_proxy' not in env: env['http_proxy'] = 'http://127.0.0.1:9/' - elif not env['http_proxy']: - del env['http_proxy'] # some tools don't like empty var. if 'https_proxy' not in env: env['https_proxy'] = 'https://127.0.0.1:9/' - elif not env['https_proxy']: - del env['https_proxy'] # some tools don't like empty var. if cfg.system: certainty = 99 @@ -160,16 +153,14 @@ 'home_dir': abspath(home_dir)}) if interpreter == 'pypy': args['install_dir'] = '/usr/lib/pypy/dist-packages/' - if step in {'build', 'test'}: - pp = context['ENV'].get('PYTHONPATH') - pp = pp.split(':') if pp else [] - if step == 'test': - args['test_dir'] = join(args['destdir'], args['install_dir'].lstrip('/')) - if args['test_dir'] not in pp: - pp.append(args['test_dir']) - if args['build_dir'] not in pp: - pp.append(args['build_dir']) - args['PYTHONPATH'] = ':'.join(pp) + if step == 'test': + pp = context['ENV'].get('PYTHONPATH', '') + args['test_dir'] = join(args['destdir'], args['install_dir'].lstrip('/')) + if args['test_dir'] not in pp.split(':'): + pp = "{}:{}".format(pp, args['test_dir']).lstrip(':') + if args['build_dir'] not in pp.split(':'): + pp = "{}:{}".format(pp, args['build_dir']).lstrip(':') + args['PYTHONPATH'] = pp if not exists(args['build_dir']): makedirs(args['build_dir']) @@ -214,14 +205,6 @@ msg = 'exit code={}: {}'.format(output['returncode'], command) raise Exception(msg) - fpath = join(args['home_dir'], 'build_dirs_to_rm_before_install') - if step == 'install' and exists(fpath): - with open(fpath) as fp: - for line in fp: - dpath = join(args['build_dir'], line.strip('\n')) - if exists(dpath): - rmtree(dpath) - remove(fpath) result = func(context, args) after_cmd = get_option('after_{}'.format(step), interpreter, version) @@ -254,42 +237,40 @@ step = func.__func__.__name__ if step == 'test' and nocheck: exit(0) - for i in cfg.interpreter: - ipreter = Interpreter(interpreter.format(version=versions[0])) - iversions = build_sorted(versions, impl=ipreter.impl) - if '{version}' not in i and len(versions) > 1: + for interpreter in cfg.interpreter: + iversions = versions + if '{version}' not in interpreter and len(versions) > 1: log.info('limiting Python versions to %s due to missing {version}' - ' in interpreter string', str(versions[-1])) - iversions = versions[-1:] # just the default or closest to default + ' in interpreter string', str(versions[0])) + iversions = versions[:1] # just the default or closest to default for version in iversions: - if is_disabled(step, i, version): + if is_disabled(step, interpreter, version): continue c = dict(context) - c['dir'] = get_option('dir', i, version, cfg.dir) - c['destdir'] = get_option('destdir', i, version, cfg.destdir) + c['dir'] = get_option('dir', interpreter, version, cfg.dir) + c['destdir'] = get_option('destdir', interpreter, version, cfg.destdir) try: - run(func, i, version, c) + run(func, interpreter, version, c) except Exception as err: log.error('%s: plugin %s failed with: %s', step, plugin.NAME, err, exc_info=cfg.verbose) exit(13) if step == 'install': - ext_destdir = get_option('ext_destdir', i, version) + ext_destdir = get_option('ext_destdir', interpreter, version) if ext_destdir: move_matching_files(c['destdir'], ext_destdir, - get_option('ext_pattern', i, version)) + get_option('ext_pattern', interpreter, version)) exit(0) ### all functions for interpreters in batches mode ### try: context_map = {} for i in cfg.interpreter: - ipreter = Interpreter(interpreter.format(version=versions[0])) - iversions = build_sorted(versions, impl=ipreter.impl) + iversions = versions if '{version}' not in i and len(versions) > 1: log.info('limiting Python versions to %s due to missing {version}' - ' in interpreter string', str(versions[-1])) - iversions = versions[-1:] # just the default or closest to default + ' in interpreter string', str(versions[0])) + iversions = versions[:1] # just the default or closest to default for version in iversions: key = (i, version) if key in context_map: @@ -412,7 +393,7 @@ dirs.add_argument('--ext-pattern', action='store', metavar='PATTERN', default=environ.get('EXT_PATTERN', r'\.so(\.[^/]*)?$'), help='regular expression for files that should be moved' - ' if --ext-dest-dir is set [default: .so files]') + ' if --ext-destdir is set [default: .so files]') dirs.add_argument('--install-dir', action='store', metavar='DIR', help='installation directory [default: .../dist-packages]') dirs.add_argument('--name', action='store', diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/pybuild.rst dh-python-1.20140128/pybuild.rst --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/pybuild.rst 2015-08-14 18:18:57.000000000 +0000 +++ dh-python-1.20140128/pybuild.rst 2014-01-28 17:20:25.000000000 +0000 @@ -33,6 +33,12 @@ %: dh $@ --with python2,python3 --buildsystem=pybuild +overriding test command with custom build plugin example:: + + override_dh_auto_test: + PYBUILD_SYSTEM=custom \ + PYBUILD_TEST_ARGS="command --with --options {build_dir}/" dh_auto_test + OPTIONS ======= Most options can be set (in addition to command line) via environment @@ -90,7 +96,7 @@ BUILD SYSTEM ARGUMENTS ---------------------- Additional arguments passed to the build system. - --system=custom requires complete command in --foo-args parameters. + --system=custom requires complete command. --before-clean COMMAND invoked before the clean command @@ -151,7 +157,7 @@ --ext-dest-dir DIR set destination directory for .so files --ext-pattern PATTERN - regular expression for files that should be moved if --ext-dest-dir is set + regular expression for files that should be moved if --ext-destdir is set [default: `\.so(\.[^/]*)?$`] --install-dir DIR set installation directory [default: .../dist-packages] @@ -178,7 +184,7 @@ --disable ITEMS disable action, interpreter, version or any mix of them. Note that f.e. python3 and python3-dbg are two different interpreters, - --disable test/python3 doesn't disable python3-dbg's tests. + --disable python3/test doesn't disable python3-dbg's tests. disable examples ~~~~~~~~~~~~~~~~ @@ -195,5 +201,4 @@ ======== * dh_python2(1) * dh_python3(1) -* https://wiki.debian.org/Python/Pybuild * http://deb.li/pybuild - most recent version of this document diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/pydist/cpython2_fallback dh-python-1.20140128/pydist/cpython2_fallback --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/pydist/cpython2_fallback 2015-10-29 21:49:13.000000000 +0000 +++ dh-python-1.20140128/pydist/cpython2_fallback 2014-01-28 17:20:25.000000000 +0000 @@ -2,306 +2,98 @@ setuptools python-pkg-resources wsgiref python (>= 2.5) | python-wsgiref argparse python (>= 2.7) | python-argparse -pil python-pil -Pillow python-pil -3to2 python-3to2 -APLpy python-aplpy -APScheduler python-apscheduler -APacheDEX apachedex -Arriero arriero -AuthKit python-authkit -Axiom python-axiom -AzureLinuxAgent waagent -Babel python-babel -Beaker python-beaker -BeautifulSoup python-beautifulsoup -BitTornado bittornado -BitTorrent bittorrent +pil python-imaging +BatchModify trac-batchmodify Bitten trac-bitten-slave Blogofile blogofile -Box2D python-box2d -Brlapi python-brlapi -Buffy python-buffy BzrPipeline bzr-pipeline BzrTools bzrtools CDApplet cairo-dock-dbus-plug-in-interface-python CDBashApplet cairo-dock-dbus-plug-in-interface-python -CDDB python-cddb -CMOR python-cmor -CacheControl python-cachecontrol -CairoSVG python-cairosvg Calendar_and_Contacts_Server calendarserver -Catwalk python-catwalk CedarBackup2 cedar-backup2 -Cerealizer python-cerealizer -Chameleon python-chameleon -CheMPS2 python-chemps2 -Cheetah python-cheetah CherryPy python-cherrypy3 CherryTree cherrytree ClusterShell clustershell -Codeville codeville -Coffin python-coffin -Coherence python-coherence -ConfArgParse python-confargparse -ConfigArgParse python-configargparse -Connectome_Viewer connectomeviewer -ConsensusCore python-pbconsensuscore -CouchDB python-couchdb -Couchapp couchapp CoverageTestRunner python-coverage-test-runner -Creoleparser python-creoleparser Cython cython DITrack ditrack -DSV python-dsv -DecoratorTools python-peak.util.decorators DiaVisViewPlugin trac-diavisview -Django python-django Doconce doconce -DouF00 douf00 -EbookLib python-ebooklib -EditObj python-editobj +Dosage dosage Editra editra -Electrum python-electrum -Elements python-elements -Elixir python-elixir -EnthoughtBase python-enthoughtbase -Epsilon python-epsilon -ExifRead python-exif -Extractor python-extractor -FFC python-ffc -FIAT python-fiat Fabric fabric FeinCMS python-django-feincms -FibraNet python-fibranet -Fiona python-fiona -Flask python-flask -Flask_AutoIndex python-flask-autoindex -Flask_Babel python-flask-babel -Flask_FlatPages python-flask-flatpages -Flask_HTTPAuth python-flask-httpauth -Flask_Jsonpify python-jsonpify -Flask_Login python-flask-login -Flask_Migrate python-flask-migrate -Flask_OpenID python-flask-openid -Flask_Principal python-flask-principal -Flask_SQLAlchemy python-flask-sqlalchemy -Flask_Script python-flask-script -Flask_Silk python-flask-silk Flask_WTF python-flaskext.wtf -FormAlchemy python-formalchemy -FormEncode python-formencode -Frozen_Flask python-frozen-flask -GDAL python-gdal -GalleryRemote python-galleryremote -Genetic python-genetic -GenomeTools python-genometools -GenomicConsensus python-pbgenomicconsensus -Genshi python-genshi -GeoIP python-geoip -Ghost.py python-ghost +GaussSum gausssum GitPython python-git -GooCalendar python-goocalendar -GvGen python-gvgen -Gyoto python-gyoto -Gyoto_std python-gyoto -HTSeq python-htseq -HyPhy python-hyphy -ID3 python-id3 -IMDbPY python-imdbpy -IPy python-ipy +Glances glances ISO8583_Module python-iso8583 Ibid ibid -Isenkram isenkram-cli +Isenkram isenkram JCC jcc -JPype python-jpype -Jinja2 python-jinja2 -Kajiki python-kajiki -Kivy python-kivy -LEPL python-lepl -LibAppArmor python-libapparmor -Logbook python-logbook Loom bzr-loom -Louie python-louie -M2Crypto python-m2crypto -MACS2 macs +MACS macs MAT mat -MIDIUtil python-midiutil -MLPY python-mlpy -MMTK python-mmtk Magic_file_extensions python-magic -Mako python-mako -Markdown python-markdown -MarkupSafe python-markupsafe -MicrobeGPS microbegps -MiniMock python-minimock -Mirage mirage -Mnemosyne mnemosyne-blog +Mnemosyne mnemosyne Model_Builder model-builder -ModestMaps python-modestmaps -Mopidy mopidy -Mopidy_ALSAMixer mopidy-alsamixer -Mopidy_Beets mopidy-beets -Mopidy_Dirble mopidy-dirble -Mopidy_Local_SQLite mopidy-local-sqlite -Mopidy_MPRIS mopidy-mpris -Mopidy_Podcast mopidy-podcast -Mopidy_Podcast_gpodder.net mopidy-podcast-gpodder -Mopidy_Podcast_iTunes mopidy-podcast-itunes -Mopidy_Scrobbler mopidy-scrobbler -Mopidy_SoundCloud mopidy-soundcloud -Mopidy_TuneIn mopidy-tunein -Mopidy_Youtube mopidy-youtube -Mopidy_dLeyna mopidy-dleyna -MultipartPostHandler python-multipartposthandler -NavAdd trac-navadd -Nevow python-nevow +MySQL_python python-mysqldb +Nautilus_scripts_manager nautilus-scripts-manager Nikola nikola -OERPLib python-oerplib -OWSLib python-owslib -OdooRPC python-odoorpc OdtExportPlugin trac-odtexport -PAM python-pam PIDA pida -PLWM python-plwm -Parsley python-parsley -Paste python-paste -PasteDeploy python-pastedeploy -PasteScript python-pastescript -PasteWebKit python-pastewebkit -Paver python-paver +Patool patool Photon photon Pillow python-pil -Pint python-pint -Pivy python-pivy -Pmw python-pmw -PocketSphinx python-pocketsphinx PreludeEasy python-prelude -PsychoPy psychopy Pwman3 pwman3 PyAIML python-aiml -PyAVM python-pyavm -PyAssimp python-pyassimp -PyAudio python-pyaudio PyBluez python-bluez PyCAPTCHA python-captcha -PyChart python-pychart -PyChef python-chef -PyECLib python-pyeclib +PyCoCuMa pycocuma PyFFTW3 python-fftw PyFeed python-feed -PyFlot python-pyflot -PyGithub python-pygithub -PyGreSQL python-pygresql PyHamcrest python-hamcrest PyHoca_CLI pyhoca-cli PyHoca_GUI pyhoca-gui -PyICU python-pyicu -PyJWT python-jwt -PyKMIP python-pykmip -PyLD python-pyld -PyMTP python-pymtp PyMca pymca -PyMetrics pymetrics -PyMySQL python-pymysql -PyNN python-pynn -PyNaCl python-nacl -PyODE python-pyode +PyNAST pynast PyOpenGL python-opengl -PyPDF2 python-pypdf2 -PyPhantomJS python-pyphantomjs -PyProtocols python-protocols -PyPump python-pypump -PyQSO pyqso -PyRRD python-pyrrd -PyRSS2Gen python-pyrss2gen PyRoom pyroom -PySDL2 python-sdl2 -PySocks python-pysocks -PySoundFile python-soundfile PyStemmer python-stemmer -PyTango python-pytango -PyVCF python-pyvcf -PyVISA python-pyvisa -PyVISA_py python-pyvisa-py -PyVTK python-pyvtk +PyVISA pyvisa PyWavelets python-pywt PyWebDAV python-webdav -PyX python-pyx -PyXB python-pyxb PyYAML python-yaml Py_ python-py++ -Pyevolve python-pyevolve -Pygments python-pygments -Pykka python-pykka -Pylons python-pylons Pymacs pymacs -Pyrex python-pyrex Pyro4 python2-pyro4 -Pysolar python-pysolar -Pyste libboost-python1.58-dev -PythonDaap python-daap -PythonQwt python-qwt -Python_fontconfig python-fontconfig +Pyste libboost-python1.55-dev QuantLib_Python quantlib-python -Quixote python-quixote1 -RBTools python-rbtools -Radicale python-radicale -Recoll python-recoll -Ren_Py python-renpy Roadmap_Plugin trac-roadmap -Routes python-routes -Rtree python-rtree RunSnakeRun runsnakerun -SOAPpy python-soappy -SPARQLWrapper python-sparqlwrapper -SQLAlchemy python-sqlalchemy -SQLAlchemy_Utils python-sqlalchemy-utils -SQLObject python-sqlobject -SciTools python-scitools ScientificPython python-scientific -Scrapy python-scrapy -SecretStorage python-secretstorage -SetupDocs python-setupdocs -Shapely python-shapely -Shinken shinken-common -SimPy python-simpy -SocksiPy_branch python-socksipy -SocksipyChain python-socksipychain -SoftLayer python-softlayer Sonata sonata South python-django-south -Soya python-soya -Sphinx python-sphinx -Sponge python-sponge -SquareMap python-squaremap -Stetl python-stetl -Strongwind python-strongwind -Symbolic python-swiginac -TRML2PDF python-trml2pdf TaskCoach taskcoach TcosConfigurator tcos-configurator -Tempita python-tempita The_FreeSmartphone_Framework_Daemon fso-frameworkd -TileCache tilecache TileStache tilestache -Tofu python-tofu -TornadIO2 python-tornadio2 -ToscaWidgets python-toscawidgets Trac trac TracAccountManager trac-accountmanager TracAnnouncer trac-announcer TracAuthOpenId trac-authopenid +TracBzr trac-bzr TracCodeComments trac-codecomments TracCustomFieldAdmin trac-customfieldadmin TracDateField trac-datefieldplugin +TracGit trac-git TracHTTPAuth trac-httpauth TracIncludeMacro trac-includemacro TracMasterTickets trac-mastertickets TracMercurial trac-mercurial -TracSpamFilter trac-spamfilter TracSubTicketsPlugin trac-subtickets -TracSubcomponents trac-subcomponents TracTags trac-tags TracVirtualTicketPermissions trac-virtualticketpermissions TracWikiPrintPlugin trac-wikiprint @@ -309,107 +101,21 @@ TracXMLRPC trac-xmlrpc Trac_jsGantt trac-jsgantt TranslatedPages trac-translatedpages -TurboGears2 python-turbogears2 -TurboJson python-turbojson -Twisted python-twisted -Twisted_Conch python-twisted-conch -Twisted_Core python-twisted-core -Twisted_Lore python-twisted-lore -Twisted_Mail python-twisted-mail -Twisted_Names python-twisted-names -Twisted_News python-twisted-news -Twisted_Runner python-twisted-runner -Twisted_Web python-twisted-web -Twisted_Web2 python-twisted-web2 -Twisted_Words python-twisted-words -UFL python-ufl -URLObject python-urlobject -Unidecode python-unidecode -Unipath python-unipath UnknownHorizons unknown-horizons VMDKstream vmdk-stream-converter -VTK python-vtk VirtualMailManager vmm -WSME python-wsme -WTForms python-wtforms -Wand python-wand -WebError python-weberror -WebFlash python-webflash -WebHelpers python-webhelpers -WebOb python-webob -WebTest python-webtest -Werkzeug python-werkzeug -Whoosh python-whoosh WikiTableMacro trac-wikitablemacro WordPress_Library python-wordpresslib -XStatic python-xstatic -XStatic_Angular python-xstatic-angular -XStatic_Angular_Bootstrap python-xstatic-angular-bootstrap -XStatic_Angular_Cookies python-xstatic-angular-cookies -XStatic_Angular_Gettext python-xstatic-angular-gettext -XStatic_Angular_Mock python-xstatic-angular-mock -XStatic_Angular_lrdragndrop python-xstatic-angular-lrdragndrop -XStatic_Bootstrap_Datepicker python-xstatic-bootstrap-datepicker -XStatic_Bootstrap_SCSS python-xstatic-bootstrap-scss -XStatic_D3 python-xstatic-d3 -XStatic_Font_Awesome python-xstatic-font-awesome -XStatic_Hogan python-xstatic-hogan -XStatic_JQuery.Bootstrap.Wizard python-xstatic-jquery.bootstrap.wizard -XStatic_JQuery.TableSorter python-xstatic-jquery.tablesorter -XStatic_JQuery.quicksearch python-xstatic-jquery.quicksearch -XStatic_JQuery_Migrate python-xstatic-jquery-migrate -XStatic_JSEncrypt python-xstatic-jsencrypt -XStatic_Jasmine python-xstatic-jasmine -XStatic_Magic_Search python-xstatic-magic-search -XStatic_QUnit python-xstatic-qunit -XStatic_Rickshaw python-xstatic-rickshaw -XStatic_Spin python-xstatic-spin -XStatic_bootswatch python-xstatic-bootswatch -XStatic_jQuery python-xstatic-jquery -XStatic_jquery_ui python-xstatic-jquery-ui -XStatic_mdi python-xstatic-mdi -XStatic_roboto_fontface python-xstatic-roboto-fontface -XStatic_smart_table python-xstatic-smart-table -XStatic_term.js python-xstatic-term.js X_Tile x-tile -XlsxWriter python-xlsxwriter -Yapsy python-yapsy -ZConfig python-zconfig ZODB3 python-zodb -ZooKeeper python-zookeeper _tifffile python-tifffile -aafigure python-aafigure -abstract_rendering python-abstract-rendering -actdiag python-actdiag -activity_log_manager activity-log-manager -admesh python-admesh adns_python python-adns -adodb python-adodb -affine python-affine -agtl agtl -aioeventlet python-aioeventlet -alabaster python-alabaster -albatross python-albatross -alembic python-alembic +alembic alembic allmydata_tahoe tahoe-lafs -altgraph python-altgraph -amqp python-amqp -amqplib python-amqplib -aniso8601 python-aniso8601 ansible ansible -anyjson python-anyjson -aodh python-aodh apache_libcloud python-libcloud -apipkg python-apipkg -apns_client python-apns-client -app_catalog_ui python-app-catalog-ui -apparmor python-apparmor -appdirs python-appdirs -apptools python-apptools -apsw python-apsw +apparmor apparmor-easyprof apt_clone apt-clone -apt_p2p apt-p2p -apt_xapian_index apt-xapian-index aptfs aptfs aptoncd aptoncd arandr arandr @@ -428,1749 +134,355 @@ archipel_core archipel-core archivemail archivemail archmage archmage -argcomplete python-argcomplete -argh python-argh -args python-args -argvalidate python-argvalidate arista arista -arpy python-arpy -arrow python-arrow assword assword -astLib python-astlib -astor python-astor -astroid python-astroid -astropy python-astropy -astropy_helpers python-astropy-helpers -astroquery python-astroquery -async python-async atheist atheist -audioread python-audioread -autobahn python-autobahn autokey autokey-common -automaton python-automaton automx automx -autopep8 python-autopep8 -autoradio autoradio -avc python-avc -avro python-avro -babelfish python-babelfish -backports.ssl_match_hostname python-backports.ssl-match-hostname -backup2swift python-backup2swift -bandit python-bandit -barbican python-barbican barman barman -basemap python-mpltoolkits.basemap -bashate python-bashate -bcdoc python-bcdoc -beanbag python-beanbag -beanstalkc python-beanstalkc beautifulsoup4 python-bs4 bicyclerepair bicyclerepair -billiard python-billiard -binaryornot python-binaryornot -binplist python-binplist binwalk binwalk -biom_format python-biom-format -biopython python-biopython -biplist python-biplist -bitarray python-bitarray -bitstring python-bitstring -bjsonrpc python-bjsonrpc -bleach python-bleach -blessings python-blessings bley bley -blinker python-blinker -blist python-blist -blockdiag python-blockdiag bmap_tools bmap-tools -bobo python-bobo bookletimposer bookletimposer -bootstrap_vz bootstrap-vz -boto python-boto -botocore python-botocore -bottle python-bottle bpython bpython -braintree python-braintree -breadability python-breadability -breathe python-breathe -brian python-brian -bsddb3 python-bsddb3 -btchip_python python-btchip -btest btest bugs_everywhere bugs-everywhere buildbot buildbot buildbot_slave buildbot-slave -bunch python-bunch burn burn -burrito python-burrito -buzhug python-buzhug -bz2file python-bz2file bzr python-bzrlib bzr_builddeb bzr-builddeb +bzr_cia cia-clients bzr_email bzr-email bzr_etckeeper etckeeper +bzr_fastimport bzr-fastimport +bzr_git bzr-git bzr_search bzr-search bzr_stats bzr-stats bzr_tweet bzr-tweet bzr_upload bzr-upload bzr_xmloutput bzr-xmloutput -cached_property python-cached-property -cachetools python-cachetools -cairocffi python-cairocffi -calabash python-calabash calypso calypso cappuccino cappuccino -capstone python-capstone carbon graphite-carbon cardstories cardstories -cassandra_driver python-cassandra -castellan python-castellan -cbor python-cbor -cclib python-cclib -cdo python-cdo cecilia cecilia -ceilometer python-ceilometer -ceilometermiddleware python-ceilometermiddleware -celery python-celery -celery_haystack python-django-celery-haystack -ceres python-ceres -certifi python-certifi -cffi python-cffi -chaco python-chaco -changelog python-changelog -characteristic python-characteristic -chardet python-chardet -chaussette chaussette -chemfp python-chemfp +cfget cfget chirp chirp chm2pdf chm2pdf -cigi python-cigi -cinder python-cinder -cinfony python-cinfony -circuits python-circuits -citeproc_py python-citeproc -ckanclient python-ckanclient -cliapp python-cliapp -click python-click -click_plugins python-click-plugins -cliff python-cliff cliff_tablib cliff-tablib -cligj python-cligj -clint python-clint closure_linter closure-linter cloud_init cloud-init -cloud_sptheme python-cloud-sptheme -cluster python-cluster -cmd2 python-cmd2 cmdtest cmdtest -cmislib python-cmislib -cobbler python-cobbler -cobe python-cobe -cobra python-cobra -cogent python-cogent -colander python-colander -colorama python-colorama -colorlog python-colorlog -commando python-commando -configglue python-configglue -configobj python-configobj -configparser python-configparser -construct python-construct -contextlib2 python-contextlib2 -contract python-contract -convoy python-convoy -cookiecutter python-cookiecutter core_python core-network-daemon core_python_netns core-network-daemon corens3_python core-network-daemon -couchdbkit python-couchdbkit -couleur python-couleur -cov_core python-cov-core -coverage python-coverage -cpuset cpuset -cpyrit_opencl pyrit-opencl -cracklib python-cracklib -cram python-cram -crank python-crank -crcmod python-crcmod -crit criu -croniter python-croniter -cryptography python-cryptography -cryptography_vectors python-cryptography-vectors -cs python-cs -csa python-csa -csb python-csb cssmin cssmin -cssselect python-cssselect -cssutils python-cssutils -csvkit python-csvkit -ctypeslib python-ctypeslib -curtsies python-curtsies -cutadapt python-cutadapt cvs2svn cvs2svn -cvxopt python-cvxopt -cwiid python-cwiid cwm python-swap -cycler python-cycler -cyclone python-cyclone -d2to1 python-d2to1 -d_rats d-rats -daemonize python-daemonize -dap python-dap -darts.util.lru python-darts.lib.utils.lru -datanommer.commands python-datanommer.commands -datanommer.consumer python-datanommer.consumer -datanommer.models python-datanommer.models -dbf python-dbf +datapm datapm dblatex dblatex -dcmstack python-dcmstack -dctrl2xml dctrl2xml -ddt python-ddt -deap python-deap -debiancontributors python-debiancontributors -debpartial_mirror debpartial-mirror -debtcollector python-debtcollector -decorator python-decorator -defer python-defer -defusedxml python-defusedxml deluge deluge-common -demjson python-demjson -derpconf python-derpconf -descartes python-descartes -designate python-designate -dexml python-dexml -dfvfs python-dfvfs dh_virtualenv dh-virtualenv -dhcpy6d dhcpy6d -dhm python-dhm -diaspy python-diaspy -dib_utils python-dib-utils -dicoclient python-dicoclient -dictclient python-dictclient -dictdlib python-dictdlib -diff_match_patch python-diff-match-patch -dill python-dill -dingus python-dingus -dirspec python-dirspec -diskimage_builder python-diskimage-builder +dicompyler dicompyler dispcalGUI dispcalgui dissy dissy -distlib python-distlib -distorm3 python-distorm3 -distro_info python-distro-info -djagios djagios -django_adminaudit python-django-adminaudit django_ajax_selects python-ajax-select -django_app_plugins python-django-app-plugins -django_appconf python-django-appconf -django_assets python-django-assets -django_audit_log python-django-audit-log -django_auth_ldap python-django-auth-ldap -django_authority python-django-authority -django_babel python-django-babel -django_bitfield python-django-bitfield +django_appconf python-appconf django_bootstrap_form python-bootstrapform -django_braces python-django-braces -django_celery python-django-celery -django_celery_transactions python-django-celery-transactions -django_classy_tags python-django-classy-tags -django_compat python-django-compat -django_compressor python-django-compressor -django_conneg python-django-conneg -django_contact_form python-django-contact-form -django_cors_headers python-django-cors-headers -django_countries python-django-countries -django_crispy_forms python-django-crispy-forms -django_dajax python-django-dajax -django_dajaxice python-django-dajaxice -django_debug_toolbar python-django-debug-toolbar -django_discover_runner python-django-discover-runner -django_downloadview python-django-downloadview -django_evolution python-django-evolution -django_extensions python-django-extensions -django_extra_views python-django-extra-views +django_compressor python-compressor django_filter python-django-filters -django_floppyforms python-django-floppyforms -django_formtools python-django-formtools -django_fsm python-django-fsm -django_fsm_admin python-django-fsm-admin -django_genshi python-django-genshi -django_guardian python-django-guardian -django_haystack python-django-haystack -django_hijack python-django-hijack -django_housekeeping python-django-housekeeping -django_jinja python-django-jinja -django_jsonfield python-django-jsonfield -django_kvstore python-django-kvstore -django_ldapdb python-django-ldapdb -django_localflavor python-django-localflavor -django_macaddress python-django-macaddress -django_markupfield python-django-markupfield -django_model_utils python-django-model-utils -django_mptt python-django-mptt -django_nose python-django-nose -django_notification python-django-notification -django_oauth_toolkit python-django-oauth-toolkit -django_openid_auth python-django-auth-openid -django_openstack_auth python-django-openstack-auth -django_pagination python-django-pagination -django_picklefield python-django-picklefield -django_pipeline python-django-pipeline -django_piston python-django-piston -django_polymorphic python-django-polymorphic -django_pyscss python-django-pyscss -django_ratelimit python-django-ratelimit -django_recurrence python-django-recurrence -django_registration python-django-registration -django_restricted_resource python-django-restricted-resource -django_reversion python-django-reversion -django_sekizai python-django-sekizai -django_session_security python-django-session-security -django_shorturls python-django-shorturls -django_shortuuidfield python-django-shortuuidfield -django_simple_captcha python-django-captcha -django_sitetree python-django-sitetree -django_sortedm2m python-sortedm2m -django_stronghold python-django-stronghold -django_tables2 python-django-tables2 -django_tagging python-django-tagging -django_taggit python-django-taggit -django_tastypie python-django-tastypie -django_testproject django-testproject -django_testscenarios django-testscenarios -django_threadedcomments python-django-threadedcomments -django_treebeard python-django-treebeard -django_uuidfield python-django-uuidfield -django_uwsgi python-django-uwsgi -django_voting python-django-voting -django_websocket python-django-websocket -django_xmlrpc python-django-xmlrpc -djangorestframework python-djangorestframework -djangorestframework_gis python-djangorestframework-gis +django_openstack_auth python-openstack-auth +django_tastypie python-tastypie djextdirect python-django-extdirect -djoser python-djoser dkimpy python-dkim -dnspython python-dnspython -dnsq python-dnsq -doc8 python-doc8 -docker_compose docker-compose -docker_py python-docker -dockerpty python-dockerpty -docopt python-docopt -docutils python-docutils -dodgy dodgy -dogpile.cache python-dogpile.cache -dogpile.core python-dogpile.core -dogtail python-dogtail -doit python-doit -dominate python-dominate -dosage dosage -dot2tex dot2tex -doublex python-doublex doxyqml doxyqml -dpkt python-dpkt -dput python-dput -drf_fsm_transitions python-djangorestframework-fsm-transitions -drf_haystack python-djangorestframework-haystack driconf driconf -drmaa python-drmaa -drslib python-drslib -dtcwt python-dtcwt dtrx dtrx -duckduckgo2 python-duckduckgo2 -dulwich python-dulwich -dumbnet python-dumbnet duplicity duplicity dvbobjects opencaster -easygui python-easygui -easywebdav python-easywebdav -easyzone python-easyzone -ecdsa python-ecdsa eficas eficas -elasticsearch python-elasticsearch -elasticsearch_curator python-elasticsearch-curator -elementtidy python-elementtidy -elib.intl python-elib.intl -empy python-empy -enable python-enable -enet python-enet ensymble ensymble -enum python-enum -enum34 python-enum34 -envisage python-envisage -enzyme python-enzyme epigrass epigrass epoptes epoptes -epydoc python-epydoc -esmre python-esmre -ethtool python-ethtool -etk.docking python-etk.docking euca2ools euca2ools -eventlet python-eventlet -exabgp exabgp -execnet python-execnet -expeyes python-expeyes -expiringdict python-expiringdict explorer bzr-explorer -expyriment python-expyriment -extras python-extras -eyeD3 python-eyed3 -fabio python-fabio -fabulous python-fabulous -factory_boy python-factory-boy -falcon python-falcon -fann2 python-fann2 -fasteners python-fasteners -fastimport python-fastimport -faulthandler python-faulthandler -fdb python-fdb -fdroidserver fdroidserver -fdsend python-fdsend -fedmsg python-fedmsg -fedmsg_meta_debian python-fedmsg-meta-debian -fedmsg_meta_fedora_infrastructure python-fedmsg-meta-fedora-infrastructure -feedgenerator python-feedgenerator -feedparser python-feedparser -ferari python-ferari -first python-first -fitbit python-fitbit -fiu python-fiu -fixtures python-fixtures fko libfko-python -flake8 python-flake8 -flashbake flashbake -flashproxy_common flashproxy-common -flexmock python-flexmock flickrfs flickrfs -flower python-flower -flufl.bounce python-flufl.bounce -flufl.enum python-flufl.enum -flufl.i18n python-flufl.i18n -flufl.lock python-flufl.lock -flufl.password python-flufl.password -flup python-flup -fmcs python-fmcs -fontforge python-fontforge fontypython fontypython -foolscap python-foolscap -forgetHTML python-forgethtml -fpconst python-fpconst -freeipa python-freeipa -freevo python-freevo -freezegun python-freezegun -freshen python-freshen -fs python-fs -fswrap python-fswrap -ftp_cloudfs python-ftp-cloudfs +frescobaldi frescobaldi fts fts fts_clacks fts-clacks fts_fai fts-fai-ldap fts_ltsp fts-ltsp-ldap fts_opsi fts-opsi -fudge python-fudge -funcparserlib python-funcparserlib -funcsigs python-funcsigs -functools32 python-functools32 funkload funkload fuse_python python-fuse -fusil fusil -future python-future futures python-concurrent.futures -futurist python-futurist -fuzzywuzzy python-fuzzywuzzy -fysom python-fysom -gabbi python-gabbi gameclock gameclock -gamera python-gamera -gaphas python-gaphas gaphor gaphor -gasp python-gasp -gastables python-gastables gastablesgui gastables gbp git-buildpackage -gcalcli gcalcli -gccjit python-gccjit -gcm_client python-gcm-client -gcovr gcovr -gdata python-gdata -gdevilspie gdevilspie gdmodule python-gd -gear python-gear -gearman python-gearman genbackupdata genbackupdata -geneagrapher geneagrapher -geojson python-geojson -geolinks python-geolinks -geopandas python-geopandas -geopy python-geopy -germinate python-germinate -gerritlib python-gerritlib -gertty gertty -getdns python-getdns getmail getmail4 -gevent python-gevent -gevent_socketio python-socketio -gevent_websocket python-gevent-websocket geximon geximon -ghp_import ghp-import -git_big_picture git-big-picture git_review git-review -gitdb python-gitdb -gitinspector gitinspector -giws giws +github_cli github-cli gjots2 gjots2 -glance python-glance -glance_store python-glance-store glipper glipper -glitch python-glitch globs globs -glpk python-glpk -glueviz glueviz +glue glue-sprite gmobilemedia gmobilemedia -gmpy python-gmpy -gmpy2 python-gmpy2 -gnatpython python-gnatpython -gnome_gmail gnome-gmail +gnome_app_install gnome-codec-install gnomecatalog gnomecatalog -gnukhataserver gnukhata-core-engine gnuplot_py python-gnuplot go2 go2 google_api_python_client python-googleapi -google_apputils python-google-apputils googlecl googlecl -googlecloudapis python-googlecloudapis gourmet gourmet -gozerbot gozerbot -gpaw gpaw -gphoto2_cffi python-gphoto2 -gpodder gpodder -gps python-gps -gpyconf python-gpyconf gquilt gquilt -grabserial grabserial -grapefruit python-grapefruit graphite_web graphite-web -graphviz trac-graphviz -graypy python-graypy -greenio python-greenio -greenlet python-greenlet grokmirror grokmirror -gssapi python-gssapi -gsw python-gsw -guacamole python-guacamole -guess_language_spirit python-guess-language -guessit python-guessit -guidata python-guidata -guiqwt python-guiqwt -gumbo python-gumbo -gunicorn python-gunicorn -guzzle_sphinx_theme python-guzzle-sphinx-theme -gwebsockets python-gwebsockets +gunicorn gunicorn +gvb gvb gyp gyp -h5py python-h5py -hachoir_core python-hachoir-core -hachoir_metadata python-hachoir-metadata -hachoir_parser python-hachoir-parser -hachoir_regex python-hachoir-regex -hachoir_subfile python-hachoir-subfile -hachoir_urwid python-hachoir-urwid -hachoir_wx python-hachoir-wx -hacking python-hacking -halberd python-halberd -happybase python-happybase -healpy python-healpy -heat python-heat -heat_cfntools heat-cfntools hgnested mercurial-nested -hgsubversion hgsubversion -hidapi python-hid -hidapi_cffi python-hidapi -hiredis python-hiredis -hl7 python-hl7 horizon python-django-horizon -hp3parclient python-hp3parclient -hpack python-hpack -hplefthandclient python-hplefthandclient -html2text python-html2text -html5lib python-html5lib -htmltmpl python-htmltmpl -http_parser python-http-parser httpcode httpcode httpie httpie -httplib2 python-httplib2 -httpretty python-httpretty -humanize python-humanize -hunspell python-hunspell -hurry.filesize python-hurry.filesize -hy python-hy hyde hyde -hypothesis python-hypothesis -iapws python-iapws -ibm_db_sa python-ibm-db-sa -ibus_tegaki ibus-tegaki -icalendar python-icalendar icalview trac-icalviewplugin identicurse identicurse -idna python-idna -ijson python-ijson -imaplib2 python-imaplib2 -impacket python-impacket -imposm python-imposm imposm.parser python-imposm-parser -influxdb python-influxdb -iniparse python-iniparse -inotifyx python-inotifyx -instant python-instant -invocations python-invocations -invoke python-invoke ioprofiler ioapps iotop iotop -iowait python-iowait -ipaddr python-ipaddr -ipaddress python-ipaddress -ipaplatform python-freeipa -ipapython python-freeipa -ipatests freeipa-tests -ipdb python-ipdb -iplib python-iplib ipython ipython -ipython_genutils python-ipython-genutils -irc python-irc -ironic python-ironic -ironic_discoverd python-ironic-discoverd -isbnlib python-isbnlib -iso8601 python-iso8601 -isodate python-isodate -isoweek python-isoweek -isso isso -itsdangerous python-itsdangerous -jabber.py python-jabber -jabberbot python-jabberbot -jaxml python-jaxml -jdcal python-jdcal -jedi python-jedi -jenkins_job_builder python-jenkins-job-builder -jenkinsapi python-jenkinsapi -jingo python-jingo -jmespath python-jmespath -joblib python-joblib -jpylyzer python-jpylyzer -jsb jsonbot -jsmin python-jsmin -json_schema_validator python-json-schema-validator -jsonpatch python-jsonpatch -jsonpath_rw python-jsonpath-rw -jsonpath_rw_ext python-jsonpath-rw-ext -jsonpickle python-jsonpickle -jsonpipe python-jsonpipe +isoquery isoquery jsonpointer python-json-pointer -jsonrpc2 python-jsonrpc2 -jsonrpclib python-jsonrpclib -jsonschema python-jsonschema -junit_xml python-junit.xml -junitxml python-junitxml -kaa_base python-kaa-base -kaa_imlib2 python-kaa-imlib2 -kaa_metadata python-kaa-metadata -kafka_python python-kafka -kapidox kapidox -kazoo python-kazoo -kdtree python-kdtree kedpm kedpm keepnote keepnote key_mon key-mon keymapper keymapper -keyring python-keyring -keystone python-keystone -keystoneauth1 python-keystoneauth1 -keystonemiddleware python-keystonemiddleware keysync keysync -kid python-kid kiki kiki -kinterbasdb python-kinterbasdb -kitchen python-kitchen -kiwi python-kiwi -kjbuckets python-kjbuckets -kmodpy python-kmodpy -kombu python-kombu -laditools python-laditools -lamson python-lamson -landslide python-landslide -larch python-larch -launchpadlib python-launchpadlib -lava_coordinator lava-coordinator -lava_dispatcher lava-dispatcher -lava_server lava-server -lava_tool lava-tool -lavapdu lavapdu-daemon -lazr.config python-lazr.config -lazr.delegates python-lazr.delegates -lazr.restfulclient python-lazr.restfulclient -lazr.smtptest python-lazr.smtptest -lazr.uri python-lazr.uri -lazyarray python-lazyarray lazygal lazygal -ldap3 python-ldap3 -ldappool python-ldappool -ldif3 python-ldif3 -ledger_autosync ledger-autosync legit legit -lesscpy python-lesscpy -leveldb python-leveldb -lhapdf python-lhapdf -libLAS python-liblas -libarchive_c python-libarchive-c -libconcord python-libconcord -libhfst_swig python-libhfst -liblarch python-liblarch -libturpial python-libturpial libvirt_python python-libvirt -lightblue python-lightblue -linecache2 python-linecache2 -linop python-linop -livereload python-livereload -livestreamer python-livestreamer -llfuse python-llfuse +lio lio-utils llnl_babel python-sidl llnl_babel_sidl_sidlx python-sidl llvmpy python-llvm -lmdb python-lmdb -lmfit python-lmfit -lockfile python-lockfile loggerhead loggerhead -logging_tree python-logging-tree -logilab_astng python-logilab-astng -logilab_common python-logilab-common -logilab_constraint python-logilab-constraint logster logster -logutils python-logutils -londonlaw londonlaw -loofah python-loofah -louis python-louis lptools lptools lshell lshell -lua python-lua -lucene python-lucene ludev_t ludevit -lunch python-lunch -lxml python-lxml lybniz lybniz -lz4 python-lz4 -m2ext python-m2ext -macaron python-macaron -macholib python-macholib -macsyfinder macsyfinder -mailer python-mailer -mailman_api mailman-api mailnag mailnag -mandrill python-mandrill -manila python-manila -manuel python-manuel -mapnik python-mapnik -mapper python-libmapper -marisa python-marisa -mate_menu mate-menu -matplotlib python-matplotlib -matplotlib_venn python-matplotlib-venn -maxminddb python-maxminddb mayavi mayavi2 -mccabe python-mccabe mcomix mcomix mecab_python python-mecab -mechanize python-mechanize -medusa python-medusa melange python-cream.melange -meld meld -meld3 python-meld3 -meliae python-meliae -memory_profiler python-memory-profiler -memprof python-memprof mercurial mercurial-common mercurial_keyring mercurial-keyring -metaconfig python-metaconfig metastudent metastudent -mididings python-mididings mingc python-ming -mini_buildd python-mini-buildd -mini_dinstall mini-dinstall -minieigen python-minieigen -mininet mininet -miniupnpc python-miniupnpc -mipp python-mipp -misaka python-misaka -mistral python-mistral -mistune python-mistune mitmproxy mitmproxy -mlbviewer mlbviewer -mne python-mne -mnemonic python-mnemonic -mock python-mock -mocker python-mocker -mockito python-mockito -mockldap python-mockldap mod_python libapache2-mod-python -mod_pywebsocket python-mod-pywebsocket -model_mommy python-model-mommy moin python-moinmoin -moksha.common python-moksha.common -moksha.hub python-moksha.hub -monajat python-monajat -mongoengine python-mongoengine monkeysign monkeysign -monotonic python-monotonic moosic moosic -morris python-morris -mousetrap gnome-mousetrap -mox python-mox -mox3 python-mox3 mozilla_devscripts mozilla-devscripts -mpi4py python-mpi4py -mpld3 python-mpld3 -mplexporter python-mplexporter -mpmath python-mpmath -mpop python-mpop -mrjob python-mrjob +mpDris mpdris msgpack_python python-msgpack -multicorn python-multicorn -multipletau python-multipletau -munkres python-munkres -murano python-murano -murano_agent murano-agent -murano_dashboard python-murano-dashboard -musicbrainzngs python-musicbrainzngs -mutagen python-mutagen -mwparserfromhell python-mwparserfromhell -mygpoclient python-mygpoclient -mysql_connector_python python-mysql.connector mysql_utilities mysql-utilities -mysqlclient python-mysqldb -nagiosplugin python-nagiosplugin -natsort python-natsort -naturalsort python-naturalsort nautilus_pastebin nautilus-pastebin -nbxmpp python-nbxmpp -ncap python-ncap -ncclient python-ncclient -ndg_httpsclient python-ndg-httpsclient -nemu python-nemu -neo python-neo neso tryton-neso -netCDF4 python-netcdf4 -netaddr python-netaddr -netifaces python-netifaces -netlib python-netlib netsnmp_python python-netsnmp -netsyslog python-netsyslog -networking_arista python-networking-arista -networking_mlnx python-networking-mlnx -networkx python-networkx -neuroshare python-neuroshare -neutron python-neutron -neutron_fwaas python-neutron-fwaas -neutron_lbaas python-neutron-lbaas -neutron_vpnaas python-neutron-vpnaas -nglister nglister -nibabel python-nibabel -nine python-nine -nipy python-nipy -nipype python-nipype -nitime python-nitime -nltk python-nltk -nose python-nose -nose2 python-nose2 -nose2_cov python-nose2-cov -nose_exclude python-nose-exclude -nose_parameterized python-nose-parameterized -nose_testconfig python-nose-testconfig -nose_timer python-nose-timer -nosehtmloutput python-nosehtmloutput -nosexcover python-nosexcover -notify2 python-notify2 -notmuch python-notmuch -nova python-nova -nsscache nsscache -ntplib python-ntplib -numexpr python-numexpr -numm python-numm -numpy python-numpy -numpydoc python-numpydoc -nwdiag python-nwdiag -nwsclient python-nwsclient -nwsserver python-nwsserver +nml nml nxt_python python-nxt -oauth python-oauth -oauth2client python-oauth2client -oauthlib python-oauthlib -obMenu obmenu -obexftp python-obexftp obfsproxy obfsproxy -objgraph python-objgraph obnam obnam oboinus oboinus -ocsmanager python-ocsmanager odfpy python-odf offlineimap offlineimap -ofxclient python-ofxclient -ofxhome python-ofxhome -ofxparse python-ofxparse oidua oidua -ooniprobe ooniprobe +ooo2dbk ooo2dbk ooolib_python python-ooolib -openbabel python-openbabel openbmap_logger openbmap-logger -openopt python-openopt -openpyxl python-openpyxl -openslide_python python-openslide -openstack.nose_plugin python-openstack.nose-plugin -openstack_doc_tools python-openstack-doc-tools -opster python-opster -optcomplete python-optcomplete -os_apply_config python-os-apply-config -os_brick python-os-brick -os_client_config python-os-client-config -os_cloud_config python-os-cloud-config -os_collect_config python-os-collect-config -os_net_config python-os-net-config -os_refresh_config python-os-refresh-config -os_testr python-os-testr osc osc -oslo.cache python-oslo.cache -oslo.concurrency python-oslo.concurrency -oslo.config python-oslo.config -oslo.context python-oslo.context -oslo.db python-oslo.db -oslo.i18n python-oslo.i18n -oslo.log python-oslo.log -oslo.messaging python-oslo.messaging -oslo.middleware python-oslo.middleware -oslo.policy python-oslo.policy -oslo.reports python-oslo.reports -oslo.rootwrap python-oslo.rootwrap -oslo.serialization python-oslo.serialization -oslo.service python-oslo.service -oslo.utils python-oslo.utils -oslo.versionedobjects python-oslo.versionedobjects -oslo.vmware python-oslo.vmware -oslosphinx python-oslosphinx -oslotest python-oslotest -osmapi python-osmapi -osprofiler python-osprofiler -ow python-ow -ownet python-ownet -oz oz -packaging python-packaging -pacparser python-pacparser -padme python-padme -pagekite pagekite -paisley python-paisley -pandas python-pandas -pandocfilters python-pandocfilters -paramiko python-paramiko -park python-park -parse python-parse -parsedatetime python-parsedatetime -passlib python-passlib -path.py python-path -pathlib python-pathlib -pathtools python-pathtools -patool patool -patsy python-patsy -pbalign python-pbalign -pbcore python-pbcore -pbh5tools python-pbh5tools -pbkdf2 python-pbkdf2 -pbr python-pbr -pcapdump python-libbtbb-pcapdump -pcapy python-pcapy -pcp python-pcp -pcs python-pcs -pdfminer python-pdfminer -pdfrw python-pdfrw +pYsearch python-yahoo +pam python-pampy +pbundler pbundler pdfshuffler pdfshuffler -pdftools python-pdftools -pebl python-pebl -pecan python-pecan -pefile python-pefile -pelican pelican -pep257 pep257 pep8 pep8 -pep8_naming python-pep8-naming -persistent python-persistent -pex python-pex -pexif python-pexif -pexpect python-pexpect +perroquet perroquet pg_activity pg-activity -pglistener pglistener -pgmagick python-pgmagick -pgpdump python-pgpdump pgxnclient pgxnclient photo_uploader photo-uploader -phply python-phply -phpserialize python-phpserialize -pies python-pies -piggyphoto python-piggyphoto -pika python-pika -pip python-pip -pius pius -pjsua python-pjproject -pkgconfig python-pkgconfig -pkginfo python-pkginfo -pkpgcounter pkpgcounter -plasTeX python-plastex -plaso plaso -plotly python-plotly -pluggy python-pluggy -plumbum python-plumbum -ply python-ply -pmock python-pmock -polib python-polib +photofilmstrip photofilmstrip +pithos pithos pondus pondus -portalocker python-portalocker -posix_ipc python-posix-ipc -poster python-poster -power python-power -powerline_status python-powerline -pp python-pp -praw python-praw -preggy python-preggy -prelude python-prelude -prelude_correlator prelude-correlator -prelude_notify prelude-notify -preludedb python-preludedb preprocess preprocess presage_dbus_service presage-dbus -presentty presentty -pretend python-pretend -prettytable python-prettytable prewikka prewikka -proboscis python-proboscis -profitbricks_client python-profitbricks-client -progressbar python-progressbar -proliantutils python-proliantutils -prompt_toolkit python-prompt-toolkit -proteus tryton-proteus -protobuf python-protobuf -protobuf.socketrpc python-protobuf.socketrpc -protorpc_standalone python-protorpc-standalone -prowlpy python-prowlpy -psphere python-psphere -pssh pssh -psutil python-psutil -psycogreen python-psycogreen -psycopg2 python-psycopg2 ptex2tex ptex2tex -ptyprocess python-ptyprocess -publicsuffix python-publicsuffix -pudb python-pudb -puddletag puddletag purity_ng purity-ng -purl python-purl -pushy python-pushy -py python-py -pyCardDAV python-pycarddav -pyClamd python-pyclamd -pyDoubles python-pydoubles pyExcelerator python-excelerator -pyFAI python-pyfai -pyFFTW python-pyfftw +pyFAI pyfai pyLibravatar python-libravatar -pyMapperGUI pymappergui -pyNFFT python-pynfft -pyOpenSSL python-openssl -pyPdf python-pypdf -pyPortMidi python-pypm -pyRFC3339 python-rfc3339 +pyOwnCloud python-owncloud pySFML python-sfml -pyScss python-pyscss -pyVows python-pyvows py_Asterisk python-asterisk py_bcrypt python-bcrypt -py_libmpdclient python-mpdclient -py_moneyed python-moneyed py_pypcap python-pypcap py_rrdtool python-rrdtool pyacidobasic python-acidobasic pyacoustid python-acoustid -pyalsa python-pyalsa pyalsaaudio python-alsaaudio -pyapi_gitlab python-gitlab -pyasn1 python-pyasn1 -pyasn1_modules python-pyasn1-modules -pybloom python-bloomfilter -pybloomfiltermmap python-pybloomfiltermmap pyblosxom pyblosxom pybridge pybridge -pybtex pybtex pybugz bugz -pycadf python-pycadf -pycalendar python-pycalendar -pycassa python-pycassa -pycha python-pycha pychecker pychecker pychess pychess -pychm python-chm -pyclamav python-pyclamav pyclips python-clips -pycoast python-pycoast pycollada python-collada -pycorrfit pycorrfit -pycountry python-pycountry -pycparser python-pycparser pycrypto python-crypto -pycryptopp python-pycryptopp pycups python-cups -pycurl python-pycurl -pydds python-pydds -pydhcplib python-pydhcplib pydicom python-dicom -pydirector python-pydirector pydns python-dns -pydoctor python-pydoctor -pydot python-pydot -pyds9 python-pyds9 -pyelftools python-pyelftools -pyelliptic python-pyelliptic pyenchant python-enchant -pyentropy python-pyentropy -pyepl python-pyepl pyepr python-epr -pyface python-pyface -pyfacebook python-facebook -pyfiglet python-pyfiglet -pyfits python-pyfits pyflakes pyflakes -pyfribidi python-pyfribidi -pyftpdlib python-pyftpdlib -pygal python-pygal -pygame python-pygame -pyghmi python-pyghmi -pygit2 python-pygit2 pygmi wmii pygobject python-gi -pygooglechart python-pygooglechart pygopherd pygopherd -pygpgme python-pyme +pygpgme python-gpgme pygpiv python-gpiv -pygrace python-pygrace -pygraphviz python-pygraphviz pygrib python-grib pygtkspellcheck python-gtkspellcheck pygts python-gts -pyhsm python-pyhsm -pyinotify python-pyinotify -pyip python-pyip -pyjavaproperties python-pyjavaproperties -pykaraoke python-pykaraoke -pykdtree python-pykdtree -pyke python-pyke -pykerberos python-kerberos -pykickstart python-pykickstart -pyknon python-pyknon -pylast python-pylast -pylibacl python-pylibacl pyliblo python-liblo -pyliblzma python-lzma -pylibmc python-pylibmc pylibpcap python-libpcap -pylibssh2 python-libssh2 pylibtiff python-libtiff pylint pylint -pylint_celery python-pylint-celery -pylint_common python-pylint-common -pylint_django python-pylint-django -pylint_plugin_utils python-pylint-plugin-utils -pylirc python-pylirc pylogsparser python-logsparser -pymad python-pymad pymecavideo python-mecavideo -pymemcache python-pymemcache -pymetar python-pymetar pymia python-mia pymilter python-milter -pymodbus python-pymodbus pymol pymol -pymssql python-pymssql pymtbl python-mtbl -pymvpa2 python-mvpa2 -pynag python-pynag -pynast pynast pyneighborhood pyneighborhood -pynids python-nids -pynifti python-nifti -pynzb python-pynzb -pyo python-pyo -pyocr python-pyocr -pyogg python-ogg -pyopencl python-pyopencl -pyoperators python-pyoperators -pyoptical python-pyoptical -pyorbital python-pyorbital -pyorick python-pyorick -pyosd python-pyosd -pyosmium python-pyosmium pyp pyp pyparallel python-parallel -pyparsing python-pyparsing -pyparted python-parted -pyperclip python-pyperclip -pyproj python-pyproj pyprompter pyprompter -pyptlib python-pyptlib -pypuppetdb python-pypuppetdb -pypureomapi python-pypureomapi pyqi pyqi -pyqtgraph python-pyqtgraph -pyquery python-pyquery -pyrad python-pyrad -pyramid python-pyramid -pyramid_beaker python-pyramid-beaker -pyramid_tm python-pyramid-tm -pyramid_zcml python-pyramid-zcml -pyregion python-pyregion pyremctl python-remctl -pyresample python-pyresample -pyrit pyrit -pyroma python-pyroma -pyroute2 python-pyroute2 -pysam python-pysam -pysaml2 python-pysaml2 +pysane python-sane pysatellites python-satellites -pyscanfcs pyscanfcs -pyscard python-pyscard -pyscript python-pyscript pyserial python-serial -pyshp python-pyshp -pysmbc python-smbc pysnmp python-pysnmp4 pysnmp_apps python-pysnmp4-apps pysnmp_mibs python-pysnmp4-mibs -pysolr python-pysolr pysparse python-sparse -pyspatialite python-pyspatialite pyspf python-spf -pysqlite python-sqlite -pysrs python-srs -pysrt python-pysrt -pyst python-pyst -pystache python-pystache +pysqlite python-pysqlite2 pysubnettree python-subnettree -pysurfer python-surfer pytagsfs pytagsfs -pytc python-pytc pytcpwrap python-tcpwrap -pyte python-pyte -pytest python-pytest -pytest_catchlog python-pytest-catchlog -pytest_cov python-pytest-cov -pytest_django python-pytest-django -pytest_instafail python-pytest-instafail -pytest_localserver python-pytest-localserver -pytest_mock python-pytest-mock -pytest_timeout python-pytest-timeout -pytest_tornado python-pytest-tornado -pytest_xdist python-pytest-xdist -pyth python-pyth -python2_biggles python-pybiggles -python2_pythondialog python-dialog -python_Levenshtein python-levenshtein -python_aalib python-aalib -python_afl python-afl -python_application python-application -python_apt python-apt -python_ase python-ase -python_augeas python-augeas -python_axolotl python-axolotl -python_axolotl_curve25519 python-axolotl-curve25519 -python_barbicanclient python-barbicanclient -python_bibtex python-bibtex -python_bitbucket python-bitbucket -python_catcher python-catcher -python_cdd python-cdd -python_ceilometerclient python-ceilometerclient -python_cinderclient python-cinderclient -python_cjson python-cjson -python_cloudfiles python-cloudfiles -python_congressclient python-congressclient -python_corepywrap python-corepywrap -python_cpl python-cpl -python_cream python-cream -python_crontab python-crontab -python_daemon python-daemon -python_dateutil python-dateutil -python_dbusmock python-dbusmock -python_debian python-debian -python_debianbts python-debianbts -python_default_encoding python-freeipa -python_designateclient python-designateclient -python_distutils_extra python-distutils-extra -python_djvulibre python-djvu -python_dmidecode python-dmidecode -python_e_dbus python-edbus -python_editor python-editor -python_espeak python-espeak -python_evtx python-evtx -python_exconsole python-exconsole -python_fcgi python-fcgi -python_fedora python-fedora -python_freecontact python-freecontact -python_gammu python-gammu -python_geoclue python-geoclue -python_geohash python-geohash -python_gflags python-gflags -python_glanceclient python-glanceclient -python_gnupg python-gnupg -python_gnutls python-gnutls -python_graph_core python-pygraph -python_graph_dot python-pygraph -python_heatclient python-heatclient -python_hglib python-hglib -python_hpilo python-hpilo -python_igraph python-igraph -python_irclib python-irclib -python_ironicclient python-ironicclient -python_jenkins python-jenkins -python_jswebkit python-jswebkit -python_keyczar python-keyczar -python_keystoneclient python-keystoneclient -python_ldap python-ldap -python_libdiscid python-libdiscid -python_libguess python-libguess -python_libpisock python-pisock -python_librtmp python-librtmp -python_libtorrent python-libtorrent +python_libgearman python-gearman.libgearman python_logging_extra python-loggingx -python_lzo python-lzo -python_magnumclient python-magnumclient -python_manilaclient python-manilaclient python_memcached python-memcache -python_messaging python-messaging -python_mhash python-mhash -python_mimeparse python-mimeparse -python_mistralclient python-mistralclient -python_mk_livestatus python-mk-livestatus -python_mpd python-mpd -python_muranoclient python-muranoclient -python_musicbrainz2 python-musicbrainz2 -python_netfilter python-netfilter -python_networkmanager python-networkmanager -python_neutronclient python-neutronclient -python_nmap python-nmap -python_novaclient python-novaclient -python_novnc python-novnc -python_nss python-nss -python_ntlm python-ntlm -python_openid python-openid -python_openstackclient python-openstackclient -python_pam python-pampy -python_passfd python-passfd -python_phoneutils python-phoneutils -python_popcon python-popcon -python_poppler_qt4 python-poppler-qt4 -python_potr python-potr -python_prctl python-prctl -python_presage python-presage -python_pskc python-pskc -python_ptrace python-ptrace -python_redmine python-redmine -python_saharaclient python-saharaclient -python_sane python-sane -python_scciclient python-scciclient -python_seamicroclient python-seamicroclient -python_snappy python-snappy -python_social_auth python-social-auth -python_sql python-sql -python_stdnum python-stdnum -python_subunit python-subunit -python_svipc python-svipc -python_swiftclient python-swiftclient -python_termstyle python-termstyle -python_tldap python-tldap -python_troveclient python-troveclient -python_tuskarclient python-tuskarclient -python_tvrage python-tvrage -python_twitter python-twitter -python_u2flib_server python-u2flib-server -python_unshare python-unshare -python_xlib python-xlib -python_xmltv python-xmltv -python_xmp_toolkit python-libxmp -python_yapps yapps2 -python_yubico python-yubico -python_zaqarclient python-zaqarclient pytidylib python-tidylib -pytils python-pytils pytimechart pytimechart -pytimeparse python-pytimeparse -pytoml python-pytoml -pytools python-pytools -pytrainer pytrainer -pytsk3 python-tsk -pytyrant python-pytyrant pytz python-tz -pyudev python-pyudev pyusb python-usb -pyviennacl python-pyviennacl -pyvmomi python-pyvmomi -pyvorbis python-pyvorbis -pywapi python-pywapi -pywbem python-pywbem -pywcs python-pywcs pyweblib python-weblib -pywinrm python-winrm -pyxattr python-pyxattr pyxdg python-xdg -pyxenstore python-pyxenstore -pyxid python-pyxid -pyxmpp python-pyxmpp -pyxnat python-pyxnat pyxp wmii pyzmq python-zmq -pyzolib python-pyzolib -pyzor pyzor qbzr qbzr -qcli python-qcli qct qct qmtest qmtest qpid_python python-qpid qpid_qmf python-qpid-extras-qmf qpid_tools qpid-tools -qrcode python-qrcode -qrencode python-qrencode -qrtools python-qrtools -qt4reactor python-qt4reactor -quantities python-quantities -queuelib python-queuelib quisk quisk quodlibet exfalso rabbitvcs rabbitvcs-core radiotray radiotray -radix python-radix -rainbow python-rainbow -rally python-rally -ranger ranger -rarfile python-rarfile -rasterio python-rasterio -rawdog rawdog -rdflib python-rdflib +rapid_spring rapid-spring rdiff_backup rdiff-backup rebuildd rebuildd recaptcha_client python-recaptcha -reclass python-reclass -reconfigure python-reconfigure -redis python-redis -rednose python-rednose -regex python-regex -relatorio python-relatorio -releases python-releases remuco remuco-base -rencode python-rencode -reportbug python-reportbug -reportlab python-reportlab -repoze.lru python-repoze.lru -repoze.sphinx.autointerface python-repoze.sphinx.autointerface -repoze.tm2 python-repoze.tm2 -repoze.what python-repoze.what -repoze.what.plugins.sql python-repoze.what-plugins -repoze.what.plugins.xml python-repoze.what-plugins -repoze.what_pylons python-repoze.what-plugins -repoze.what_quickstart python-repoze.what-plugins -repoze.who python-repoze.who -repoze.who.plugins.ldap python-repoze.who-plugins -repoze.who.plugins.openid python-repoze.who-plugins -repoze.who.plugins.sa python-repoze.who-plugins -repoze.who_friendlyform python-repoze.who-plugins -repoze.who_testutil python-repoze.who-plugins -requestbuilder python-requestbuilder -requests python-requests requests_aws python-awsauth -requests_cache python-requests-cache -requests_futures python-requests-futures -requests_kerberos python-requests-kerberos -requests_mock python-requests-mock -requests_oauthlib python-requests-oauthlib -requirements_detector python-requirements-detector -responses python-responses -restkit python-restkit -restless python-restless -restructuredtext_lint python-restructuredtext-lint -retrying python-retrying -rfc3986 python-rfc3986 -rfoo python-rfoo -rgain python-rgain -rhn python-rhn -ricky python-ricky -riemann_client python-riemann-client -roman python-roman -rope python-rope -ropemacs python-ropemacs -ropemode python-ropemode roundup roundup -rows python-rows rpl rpl -rply python-rply -rpm_python python-rpm -rpy python-rpy -rpy2 python-rpy2 -rsa python-rsa -rst2pdf rst2pdf -rtslib_fb python-rtslib-fb -ruamel.ordereddict python-ruamel.ordereddict -rubber rubber -rudolf python-rudolf -ruffus python-ruffus -ryu python-ryu -s3cmd s3cmd -sahara python-sahara salt salt-common -sardana python-sardana -scapy python-scapy -scgi python-scgi -schroot python-schroot -scikit_bio python-skbio scikit_image python-skimage scikit_learn python-sklearn -scipy python-scipy -sciscipy python-sciscipy -sclapp python-sclapp -scoop python-scoop -scour python-scour -scp python-scp -screed python-screed screenkey screenkey -scripttest python-scripttest -scrypt python-scrypt -seaborn python-seaborn -securepass python-securepass -selenium python-selenium -semantic_version python-semantic-version -semver python-semver +seivot seivot sensitivetickets trac-sensitivetickets -seqdiag python-seqdiag -serpent python2-serpent servefile servefile -service_identity python-service-identity -setoptconf python-setoptconf -setproctitle python-setproctitle -setuptools_git python-setuptools-git -setuptools_scm python-setuptools-scm -sfepy python-sfepy sftp_cloudfs sftpcloudfs -sh python-sh -shade python-shade -shadowsocks shadowsocks shedskin shedskin -shelltoolbox python-shelltoolbox -shortuuid python-shortuuid -sievelib python-sievelib -simpleeval python-simpleeval -simplegeneric python-simplegeneric -simplejson python-simplejson -simpy python-simpy3 -singledispatch python-singledispatch -sireader python-sireader -six python-six slapos.core slapos-client -sleekxmpp python-sleekxmpp -slides python-slides slimit slimit -slimmer python-slimmer -slip python-slip slip.dbus python-slip-dbus slip.gtk python-slip-gtk -slowaes python-slowaes smart python-smartpm -smartypants python-smartypants -smbpasswd python-smbpasswd -smbus python-smbus -smmap python-smmap -smstrade python-smstrade -snimpy python-snimpy +snimpy snimpy snmpsim snmpsim -snuggs python-snuggs -soaplib python-soaplib -socketIO_client python-socketio-client -socketpool python-socketpool -sockjs_tornado python-sockjs-tornado -sorl_thumbnail python-sorl-thumbnail -sortedcontainers python-sortedcontainers soundgrain soundgrain -sourcecodegen python-sourcecodegen spambayes spambayes -speaklater python-speaklater -spectacle spectacle specto specto -speedtest_cli speedtest-cli -sphere python-sphere -sphinx_bootstrap_theme python-sphinx-bootstrap-theme -sphinx_paramlinks python-sphinx-paramlinks -sphinx_patchqueue python-sphinx-patchqueue -sphinx_rtd_theme python-sphinx-rtd-theme -sphinx_testing python-sphinx-testing sphinxcontrib_actdiag python-sphinxcontrib.actdiag -sphinxcontrib_autoprogram sphinxcontrib-autoprogram sphinxcontrib_blockdiag python-sphinxcontrib.blockdiag -sphinxcontrib_docbookrestapi python-sphinxcontrib.docbookrestapi -sphinxcontrib_httpdomain python-sphinxcontrib.httpdomain -sphinxcontrib_issuetracker python-sphinxcontrib.issuetracker sphinxcontrib_nwdiag python-sphinxcontrib.nwdiag -sphinxcontrib_pecanwsme python-sphinxcontrib-pecanwsme sphinxcontrib_phpdomain python-sphinxcontrib.phpdomain -sphinxcontrib_plantuml python-sphinxcontrib.plantuml -sphinxcontrib_programoutput python-sphinxcontrib.programoutput -sphinxcontrib_rubydomain python-sphinxcontrib.rubydomain sphinxcontrib_seqdiag python-sphinxcontrib.seqdiag -sphinxcontrib_spelling python-sphinxcontrib.spelling -sphinxcontrib_youtube python-sphinxcontrib.youtube -springpython python-springpython -sprox python-sprox -sptest python-sptest -spur python-spur spyder python-spyderlib -spykeutils python-spykeutils spykeviewer spykeviewer -spyne python-spyne sqlalchemy_migrate python-migrate -sqlkit python-sqlkit -sqlparse python-sqlparse -sqlsoup python-sqlsoup -srp python-srp -ssdeep python-ssdeep ssh_import_id ssh-import-id -stackapplet stackapplet -starpy python-starpy -statsd python-statsd -statsmodels python-statsmodels -stdeb python-stdeb -steadymark python-steadymark -stem python-stem -stepic python-stepic -stevedore python-stevedore -stgit stgit -stomper python-stomper -stompy python-stompy -storm python-storm -structlog python-structlog -stsci.distutils python-stsci.distutils -subliminal python-subliminal -subprocess32 python-subprocess32 -subvertpy python-subvertpy -suds python-suds summain summain -sunlight python-sunlight supervisor supervisor -supybot supybot -sure python-sure suricatasc suricata -svg.path python-svg.path svnmailer svnmailer -swift python-swift swift3 swift-plugin-s3 -swiftsc python-swiftsc -swiginac python-swiginac -sympy python-sympy +synaptiks kde-config-touchpad system_storage_manager system-storage-manager -sysv_ipc python-sysv-ipc -tables python-tables -tablib python-tablib -tabulate python-tabulate -tagpy python-tagpy targetcli targetcli -taskflow python-taskflow -tasklib python-tasklib -taurus python-taurus -tblib python-tblib +tcm lio-utils tcosconfig tcosconfig -tegaki_python python-tegaki -tegaki_tools python-tegakitools -tegaki_train tegaki-train -tempest tempest -tempest_lib python-tempest-lib -templayer python-templayer -termcolor python-termcolor -terminado python-terminado -testrepository python-testrepository -testresources python-testresources -testscenarios python-testscenarios -testtools python-testtools -textile python-textile -texttable python-texttable -tftpy python-tftpy -tg.devtools python-tg.devtools -tgext.admin python-tgext.admin -tgext.crud python-tgext.admin -thrift python-thrift tilelite tilelite -tinyeartrainer tinyeartrainer -tkSnack python-tksnack -tlsh python-tlsh -tnetstring python-tnetstring -tomahawk python-tomahawk -tooz python-tooz -toposort python-toposort -tornado python-tornado -tornado_pyvows python-tornado-pyvows -tornadorpc python-tornadorpc -toro python-toro tortoisehg tortoisehg -tosca_parser python-tosca-parser totalopenstation totalopenstation -traceback2 python-traceback2 -tracer python-tracer -tracing python-tracing -traitlets python-traitlets -traits python-traits -traitsui python-traitsui -transaction python-transaction transifex_client transifex-client translate_toolkit translate-toolkit -translationstring python-translationstring -translitcodec python-translitcodec -transmissionrpc python-transmissionrpc trash_cli trash-cli -trimage trimage -tripleo_heat_templates python-tripleo-heat-templates -tripleo_image_elements python-tripleo-image-elements -tritium tritium -trollius python-trollius -trove python-trove tryton tryton-client trytond tryton-server trytond_account tryton-modules-account -trytond_account_asset tryton-modules-account-asset trytond_account_be tryton-modules-account-be -trytond_account_credit_limit tryton-modules-account-credit-limit trytond_account_de_skr03 tryton-modules-account-de-skr03 -trytond_account_deposit tryton-modules-account-deposit -trytond_account_dunning tryton-modules-account-dunning -trytond_account_dunning_letter tryton-modules-account-dunning-letter -trytond_account_fr tryton-modules-account-fr trytond_account_invoice tryton-modules-account-invoice trytond_account_invoice_history tryton-modules-account-invoice-history trytond_account_invoice_line_standalone tryton-modules-account-invoice-line-standalone -trytond_account_invoice_stock tryton-modules-account-invoice-stock -trytond_account_payment tryton-modules-account-payment -trytond_account_payment_clearing tryton-modules-account-payment-clearing -trytond_account_payment_sepa tryton-modules-account-payment-sepa -trytond_account_payment_sepa_cfonb tryton-modules-account-payment-sepa-cfonb trytond_account_product tryton-modules-account-product trytond_account_statement tryton-modules-account-statement -trytond_account_stock_anglo_saxon tryton-modules-account-stock-anglo-saxon -trytond_account_stock_continental tryton-modules-account-stock-continental -trytond_account_tax_rule_country tryton-modules-account-tax-rule-country trytond_analytic_account tryton-modules-analytic-account trytond_analytic_invoice tryton-modules-analytic-invoice trytond_analytic_purchase tryton-modules-analytic-purchase trytond_analytic_sale tryton-modules-analytic-sale -trytond_bank tryton-modules-bank trytond_calendar tryton-modules-calendar trytond_calendar_classification tryton-modules-calendar-classification trytond_calendar_scheduling tryton-modules-calendar-scheduling trytond_calendar_todo tryton-modules-calendar-todo -trytond_carrier tryton-modules-carrier -trytond_carrier_percentage tryton-modules-carrier-percentage -trytond_carrier_weight tryton-modules-carrier-weight -trytond_commission tryton-modules-commission -trytond_commission_waiting tryton-modules-commission-waiting trytond_company tryton-modules-company trytond_company_work_time tryton-modules-company-work-time trytond_country tryton-modules-country @@ -2178,224 +490,66 @@ trytond_dashboard tryton-modules-dashboard trytond_google_maps tryton-modules-google-maps trytond_ldap_authentication tryton-modules-ldap-authentication +trytond_ldap_connection tryton-modules-ldap-connection trytond_party tryton-modules-party -trytond_party_relationship tryton-modules-party-relationship trytond_party_siret tryton-modules-party-siret trytond_party_vcarddav tryton-modules-party-vcarddav trytond_product tryton-modules-product -trytond_product_attribute tryton-modules-product-attribute trytond_product_cost_fifo tryton-modules-product-cost-fifo trytond_product_cost_history tryton-modules-product-cost-history -trytond_product_measurements tryton-modules-product-measurements trytond_product_price_list tryton-modules-product-price-list -trytond_production tryton-modules-production trytond_project tryton-modules-project -trytond_project_invoice tryton-modules-project-invoice trytond_project_plan tryton-modules-project-plan trytond_project_revenue tryton-modules-project-revenue trytond_purchase tryton-modules-purchase trytond_purchase_invoice_line_standalone tryton-modules-purchase-invoice-line-standalone -trytond_purchase_shipment_cost tryton-modules-purchase-shipment-cost trytond_sale tryton-modules-sale -trytond_sale_credit_limit tryton-modules-sale-credit-limit -trytond_sale_extra tryton-modules-sale-extra -trytond_sale_invoice_grouping tryton-modules-sale-invoice-grouping trytond_sale_opportunity tryton-modules-sale-opportunity trytond_sale_price_list tryton-modules-sale-price-list -trytond_sale_shipment_cost tryton-modules-sale-shipment-cost -trytond_sale_shipment_grouping tryton-modules-sale-shipment-grouping -trytond_sale_supply tryton-modules-sale-supply -trytond_sale_supply_drop_shipment tryton-modules-sale-supply-drop-shipment trytond_stock tryton-modules-stock trytond_stock_forecast tryton-modules-stock-forecast trytond_stock_inventory_location tryton-modules-stock-inventory-location trytond_stock_location_sequence tryton-modules-stock-location-sequence trytond_stock_lot tryton-modules-stock-lot -trytond_stock_lot_sled tryton-modules-stock-lot-sled -trytond_stock_package tryton-modules-stock-package trytond_stock_product_location tryton-modules-stock-product-location -trytond_stock_split tryton-modules-stock-split trytond_stock_supply tryton-modules-stock-supply trytond_stock_supply_day tryton-modules-stock-supply-day -trytond_stock_supply_forecast tryton-modules-stock-supply-forecast -trytond_stock_supply_production tryton-modules-stock-supply-production trytond_timesheet tryton-modules-timesheet -trytond_timesheet_cost tryton-modules-timesheet-cost ttb ttb -ttystatus python-ttystatus -turnin_ng turnin-ng turpial turpial -tuskar python-tuskar -tuskar_ui python-tuskar-ui -tw.forms python-toscawidgets -tweepy python-tweepy -twill python-twill -twython python-twython -txAWS python-txaws -txLibravatar python-txlibravatar -txWS python-txws -txZMQ python-txzmq -txaio python-txaio -txosc python-txosc -txsocksx python-txsocksx -txtorcon python-txtorcon -txzookeeper python-txzookeeper -typogrify python-typogrify -tzlocal python-tzlocal -u1db python-u1db -uTidylib python-utidylib +turses turses +typecatcher typecatcher ubuntu_dev_tools ubuntu-dev-tools -ucltip python-ucltip udev_discover udev-discover -udiskie python-udiskie -ufw python-ufw -ujson python-ujson -uncertainties python-uncertainties -unicodecsv python-unicodecsv -unittest2 python-unittest2 unittest_xml_reporting python-xmlrunner -uritemplate python-uritemplate -uritools python-uritools -urllib3 python-urllib3 urlscan urlscan -urwid python-urwid -urwid_satext python-urwid-satext -usbtc08 python-usbtc08 -validictory python-validictory vamos undertaker -van.pydeb python-van.pydeb -vatnumber python-vatnumber -vcrpy python-vcr -vcversioner python-vcversioner -venusian python-venusian -versiontools python-versiontools -versuchung python-versuchung -vinetto vinetto -viper python-viper virtaal virtaal virtualbricks virtualbricks -virtualenv python-virtualenv virtualenv_clone virtualenv-clone virtualenvwrapper virtualenvwrapper -visionegg python-visionegg -vobject python-vobject volatility volatility -voluptuous python-voluptuous -vsgui python-vsgui -vulndb python-vulndb -vulture vulture -w3lib python-w3lib -wadllib python-wadllib -waitress python-waitress wammu wammu -wapiti wapiti -warlock python-warlock -watchdog python-watchdog -wcsaxes python-wcsaxes -wcwidth python-wcwidth web.py python-webpy -webassets python-webassets -webcolors python-webcolors -weboob python-weboob +weboob python-weboob-core websocket_client python-websocket websockify websockify -webunit python-webunit -wget python-wget -whatmaps whatmaps -wheel python-wheel -whichcraft python-whichcraft -whisper python-whisper -whois python-whois whyteboard whyteboard -wicd python-wicd wikipediafs wikipediafs winpdb winpdb -wit python-wit -withsqlite python-withsqlite -wokkel python-wokkel -woo python-woo -wrapt python-wrapt -ws4py python-ws4py -wsgi_intercept python-wsgi-intercept -wsgicors python-wsgicors -wsgilog python-wsgilog -wstools python-wstools wxPython_common python-wxgtk2.8 -wxmpl python-wxmpl -x2go python-x2go +wxgeometrie wxgeometrie xapers xapers -xappy python-xappy -xattr python-xattr -xcffib python-xcffib -xdo python-xdo xdot xdot -xe python-xe xgflib xgridfit -xia xia -xkcd python-xkcd -xlrd python-xlrd -xlwt python-xlwt xmds2 xmds2 xml_marshaller python-xmlmarshaller -xmlbuilder python-xmlbuilder -xmldiff xmldiff -xmltodict python-xmltodict -xmms2tray xmms2tray -xpra xpra -xtermcolor python-xtermcolor -xvfbwrapper python-xvfbwrapper -xxdiff_scripts xxdiff-scripts -yagtd yagtd -yanc python-nose-yanc -yaql python-yaql +xpra_all xpra yara_python python-yara -yenc python-yenc yokadi yokadi youtube_dl youtube-dl -yowsup2 python-yowsup -yt python-yt -yubikey_neo_manager yubikey-neo-manager -yubikey_piv_manager yubikey-piv-manager yum_metadata_parser python-sqlitecachec -zake python-zake -zaqar python-zaqar -zc.buildout python-zc.buildout -zc.lockfile python-zc.lockfile -zdaemon python-zdaemon zeitgeist_explorer zeitgeist-explorer zenmap zenmap -zeroconf python-zeroconf -zfec python-zfec -zhpy python-zhpy +zeroinstall_injector zeroinstall-injector zim zim -zinnia_python python-zinnia -zipstream python-zipstream -zope.authentication python-zope.authentication -zope.browser python-zope.browser -zope.cachedescriptors python-zope.cachedescriptors -zope.component python-zope.component -zope.configuration python-zope.configuration -zope.contenttype python-zope.contenttype -zope.copy python-zope.copy -zope.deprecation python-zope.deprecation -zope.dottedname python-zope.dottedname -zope.event python-zope.event -zope.exceptions python-zope.exceptions -zope.hookable python-zope.hookable -zope.i18n python-zope.i18n -zope.i18nmessageid python-zope.i18nmessageid -zope.interface python-zope.interface -zope.location python-zope.location -zope.proxy python-zope.proxy -zope.publisher python-zope.publisher -zope.schema python-zope.schema -zope.security python-zope.security -zope.sendmail python-zope.sendmail -zope.sqlalchemy python-zope.sqlalchemy -zope.testbrowser python-zope.testbrowser -zope.testing python-zope.testing -zope.testrunner python-zope.testrunner -zope.traversing python-zope.traversing -zxcvbn python-zxcvbn -zyne zyne -zzzeeksphinx python-zzzeeksphinx diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/pydist/cpython3_fallback dh-python-1.20140128/pydist/cpython3_fallback --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/pydist/cpython3_fallback 2015-10-29 21:49:13.000000000 +0000 +++ dh-python-1.20140128/pydist/cpython3_fallback 2014-01-28 17:20:25.000000000 +0000 @@ -1,1097 +1,65 @@ -pil python3-pil -Pillow python3-pil setuptools python3-pkg-resources -argparse python3 (>= 3.2) -3to2 python3-3to2 -APLpy python3-aplpy Attic attic -Babel python3-babel -Beaker python3-beaker -Brlapi python3-brlapi CDApplet cairo-dock-dbus-plug-in-interface-python CDBashApplet cairo-dock-dbus-plug-in-interface-python -CacheControl python3-cachecontrol -CairoSVG python3-cairosvg -CedarBackup3 cedar-backup3 -Cerealizer python3-cerealizer -Chameleon python3-chameleon CherryPy python3-cherrypy3 -Coffin python3-coffin -ConfArgParse python3-confargparse -ConfigArgParse python3-configargparse -ConsensusCore python3-pbconsensuscore Cython cython3 -Django python3-django -EbookLib python3-ebooklib -ExifRead python3-exif -Fiona python3-fiona -Flask python3-flask -Flask_FlatPages python3-flask-flatpages -Flask_OpenID python3-flask-openid -Flask_Principal python3-flask-principal -Flask_SQLAlchemy python3-flask-sqlalchemy -Flask_Script python3-flask-script -Flask_WTF python3-flaskext.wtf -Frozen_Flask python3-frozen-flask -GDAL python3-gdal -GaussSum gausssum -Genshi python3-genshi -GeoIP python3-geoip -Ghost.py python3-ghost -Glances glances -Gyoto python3-gyoto -Gyoto_std python3-gyoto -HyPhy python3-hyphy -IPy python3-ipy -Jinja2 python3-jinja2 -Kajiki python3-kajiki -Kivy python3-kivy Kyoto_Cabinet python3-kyotocabinet -LEPL python3-lepl -LibAppArmor python3-libapparmor -Logbook python3-logbook -MPD_sima mpd-sima Magic_file_extensions python3-magic -Mako python3-mako -Markdown python3-markdown -MarkupSafe python3-markupsafe -Markups python3-markups -Nautilus_scripts_manager nautilus-scripts-manager -OWSLib python3-owslib -OdooRPC python3-odoorpc -Paste python3-paste -PasteDeploy python3-pastedeploy Pillow python3-pil -Pint python3-pint -Plinth plinth -PyAVM python3-pyavm -PyAudio python3-pyaudio -PyECLib python3-pyeclib -PyGithub python3-pygithub PyHamcrest python3-hamcrest PyICU python3-icu -PyJWT python3-jwt -PyKCS11 python3-pykcs11 -PyKMIP python3-pykmip -PyLD python3-pyld -PyMySQL python3-pymysql -PyNaCl python3-nacl PyOpenGL python3-opengl -PyPDF2 python3-pypdf2 -PyPump python3-pypump -PyRSS2Gen python3-pyrss2gen -PySDL2 python3-sdl2 -PySocks python3-pysocks -PySoundFile python3-soundfile PyStemmer python3-stemmer -PyTango python3-pytango -PyVCF python3-pyvcf -PyVISA python3-pyvisa -PyVISA_py python3-pyvisa-py -PyX python3-pyx -PyXB python3-pyxb PyYAML python3-yaml -Pygments python3-pygments -Pykka python3-pykka -Pyro4 python3-pyro4 -Pysolar python3-pysolar -PythonQwt python3-qwt -Python_fontconfig python3-fontconfig -Recoll python3-recoll -Routes python3-routes -Rtree python3-rtree -SPARQLWrapper python3-sparqlwrapper -SQLAlchemy python3-sqlalchemy -SQLAlchemy_Utils python3-sqlalchemy-utils -SecretStorage python3-secretstorage -Shapely python3-shapely -SimPy python3-simpy -SocksiPy_branch python3-socksipy -SoftLayer python3-softlayer -Sphinx python3-sphinx -Tempita python3-tempita -TornadIO2 python3-tornadio2 -URLObject python3-urlobject -Unidecode python3-unidecode -WSME python3-wsme -WTForms python3-wtforms -Wand python3-wand -WebOb python3-webob -WebTest python3-webtest -Werkzeug python3-werkzeug -Whoosh python3-whoosh -XStatic python3-xstatic -XStatic_Angular python3-xstatic-angular -XStatic_Angular_Bootstrap python3-xstatic-angular-bootstrap -XStatic_Angular_Cookies python3-xstatic-angular-cookies -XStatic_Angular_Gettext python3-xstatic-angular-gettext -XStatic_Angular_Mock python3-xstatic-angular-mock -XStatic_Angular_lrdragndrop python3-xstatic-angular-lrdragndrop -XStatic_Bootstrap_Datepicker python3-xstatic-bootstrap-datepicker -XStatic_Bootstrap_SCSS python3-xstatic-bootstrap-scss -XStatic_D3 python3-xstatic-d3 -XStatic_Font_Awesome python3-xstatic-font-awesome -XStatic_Hogan python3-xstatic-hogan -XStatic_JQuery.Bootstrap.Wizard python3-xstatic-jquery.bootstrap.wizard -XStatic_JQuery.TableSorter python3-xstatic-jquery.tablesorter -XStatic_JQuery.quicksearch python3-xstatic-jquery.quicksearch -XStatic_JQuery_Migrate python3-xstatic-jquery-migrate -XStatic_JSEncrypt python3-xstatic-jsencrypt -XStatic_Jasmine python3-xstatic-jasmine -XStatic_Magic_Search python3-xstatic-magic-search -XStatic_QUnit python3-xstatic-qunit -XStatic_Rickshaw python3-xstatic-rickshaw -XStatic_Spin python3-xstatic-spin -XStatic_bootswatch python3-xstatic-bootswatch -XStatic_jQuery python3-xstatic-jquery -XStatic_jquery_ui python3-xstatic-jquery-ui -XStatic_mdi python3-xstatic-mdi -XStatic_roboto_fontface python3-xstatic-roboto-fontface -XStatic_smart_table python3-xstatic-smart-table -XStatic_term.js python3-xstatic-term.js -XlsxWriter python3-xlsxwriter -Yapsy python3-yapsy -_lxc lxc -abstract_rendering python3-abstract-rendering -actdiag python3-actdiag -admesh python3-admesh -aeidon python3-aeidon -affine python3-affine -aiocoap python3-aiocoap -aioeventlet python3-aioeventlet -aiohttp python3-aiohttp -aiopg python3-aiopg -aioredis python3-aioredis -aioxmlrpc python3-aioxmlrpc -aiozmq python3-aiozmq -alabaster python3-alabaster -alembic python3-alembic -altgraph python3-altgraph -amqp python3-amqp -amqplib python3-amqplib -aniso8601 python3-aniso8601 -anyjson python3-anyjson -apache_libcloud python3-libcloud -apparmor python3-apparmor -appdirs python3-appdirs -apsw python3-apsw -apt_venv apt-venv -argcomplete python3-argcomplete -argh python3-argh -args python3-args -arpy python3-arpy -arrow python3-arrow -asciinema asciinema -astLib python3-astlib -astor python3-astor -astroid python3-astroid -astropy python3-astropy -astropy_helpers python3-astropy-helpers -astroquery python3-astroquery -asyncssh python3-asyncssh -audioread python3-audioread -audiotools audiotools -automaton python3-automaton -avro_python3 python3-avro -babelfish python3-babelfish -backup2swift python3-backup2swift -backupchecker backupchecker -bandit python3-bandit -basemap python3-mpltoolkits.basemap -bashate python3-bashate -bcdoc python3-bcdoc -beanbag python3-beanbag beautifulsoup4 python3-bs4 -billiard python3-billiard -binaryornot python3-binaryornot -biopython python3-biopython -bitarray python3-bitarray -bitstring python3-bitstring -bleach python3-bleach -blessings python3-blessings -blinker python3-blinker -blist python3-blist -blockdiag python3-blockdiag -boto python3-boto -botocore python3-botocore -bottle python3-bottle bpython bpython3 -braintree python3-braintree -breathe python3-breathe brebis brebis -bsddb3 python3-bsddb3 -burrito python3-burrito -bz2file python3-bz2file -cached_property python3-cached-property -cachetools python3-cachetools -caffeine caffeine -cairocffi python3-cairocffi -cassandra_driver python3-cassandra -castellan python3-castellan -cbor python3-cbor -cclib python3-cclib -cdist cdist -cdo python3-cdo -celery python3-celery -celery_haystack python3-django-celery-haystack -certifi python3-certifi -cffi python3-cffi -changelog python3-changelog -characteristic python3-characteristic -chardet python3-chardet -checkbox_ng python3-checkbox-ng -checkbox_support python3-checkbox-support -cigi python3-cigi -circuits python3-circuits -citeproc_py python3-citeproc -click python3-click -click_plugins python3-click-plugins -cliff python3-cliff -cligj python3-cligj -clint python3-clint -cloud_sptheme python3-cloud-sptheme -cmd2 python3-cmd2 -cobra python3-cobra -colander python3-colander -colorama python3-colorama -colorlog python3-colorlog -configobj python3-configobj -construct python3-construct -contextlib2 python3-contextlib2 -cookiecutter python3-cookiecutter -cov_core python3-cov-core -coverage python3-coverage -cppman cppman -cracklib python3-cracklib -cram python3-cram -crank python3-crank -crcmod python3-crcmod -croniter python3-croniter -cryptography python3-cryptography -cryptography_vectors python3-cryptography-vectors -cs python3-cs -csb python3-csb -cssselect python3-cssselect -cssutils python3-cssutils -csvkit python3-csvkit -cupshelpers python3-cupshelpers -curtsies python3-curtsies -cutadapt python3-cutadapt -cycler python3-cycler -d2to1 python3-d2to1 -daemonize python3-daemonize -darts.util.lru python3-darts.lib.utils.lru -dbf python3-dbf -ddt python3-ddt -deap python3-deap -debdry debdry debmake debmake -debocker debocker -debtags python3-debtagshw -debtcollector python3-debtcollector -decorator python3-decorator -defer python3-defer -defusedxml python3-defusedxml -demjson python3-demjson -dep11 python3-dep11 -descartes python3-descartes devscripts devscripts -dexml python3-dexml -diaspy python3-diaspy -dib_utils python3-dib-utils -diff_match_patch python3-diff-match-patch -diffoscope diffoscope -dill python3-dill -dirspec python3-dirspec -distlib python3-distlib -distro_info python3-distro-info -django_ajax_selects python3-ajax-select -django_appconf python3-django-appconf -django_assets python3-django-assets -django_audit_log python3-django-audit-log -django_babel python3-django-babel -django_bitfield python3-django-bitfield -django_bootstrap_form python3-bootstrapform -django_braces python3-django-braces -django_celery python3-django-celery -django_celery_transactions python3-django-celery-transactions -django_classy_tags python3-django-classy-tags -django_compressor python3-django-compressor -django_contact_form python3-django-contact-form -django_cors_headers python3-django-cors-headers -django_countries python3-django-countries -django_crispy_forms python3-django-crispy-forms -django_debug_toolbar python3-django-debug-toolbar -django_discover_runner python3-django-discover-runner -django_downloadview python3-django-downloadview -django_extensions python3-django-extensions -django_filter python3-django-filters -django_floppyforms python3-django-floppyforms -django_formtools python3-django-formtools -django_fsm python3-django-fsm -django_fsm_admin python3-django-fsm-admin -django_guardian python3-django-guardian -django_haystack python3-django-haystack -django_housekeeping python3-django-housekeeping -django_jinja python3-django-jinja -django_jsonfield python3-django-jsonfield -django_localflavor python3-django-localflavor -django_markupfield python3-django-markupfield -django_model_utils python3-django-model-utils -django_mptt python3-django-mptt -django_nose python3-django-nose -django_oauth_toolkit python3-django-oauth-toolkit -django_openstack_auth python3-django-openstack-auth -django_picklefield python3-django-picklefield -django_pipeline python3-django-pipeline -django_polymorphic python3-django-polymorphic -django_pyscss python3-django-pyscss -django_ratelimit python3-django-ratelimit -django_recurrence python3-django-recurrence -django_reversion python3-django-reversion -django_sekizai python3-django-sekizai -django_session_security python3-django-session-security -django_shortuuidfield python3-django-shortuuidfield -django_simple_captcha python3-django-captcha -django_sitetree python3-django-sitetree -django_sortedm2m python3-sortedm2m -django_stronghold python3-django-stronghold -django_tables2 python3-django-tables2 -django_taggit python3-django-taggit -django_tastypie python3-django-tastypie -django_treebeard python3-django-treebeard -django_uwsgi python3-django-uwsgi -django_xmlrpc python3-django-xmlrpc -djangorestframework python3-djangorestframework -djangorestframework_gis python3-djangorestframework-gis -djoser python3-djoser -djvubind djvubind dkimpy python3-dkim dnspython3 python3-dnspython -dnsq python3-dnsq -doc8 python3-doc8 -docker_py python3-docker -dockerpty python3-dockerpty -docopt python3-docopt -docutils python3-docutils -dogpile.cache python3-dogpile.cache -dogpile.core python3-dogpile.core -doit python3-doit -dominate python3-dominate -doublex python3-doublex -drf_fsm_transitions python3-djangorestframework-fsm-transitions -drf_haystack python3-djangorestframework-haystack -drslib python3-drslib -dtcwt python3-dtcwt -dugong python3-dugong -dulwich python3-dulwich -easygui python3-easygui -easywebdav python3-easywebdav -ecdsa python3-ecdsa -elasticsearch python3-elasticsearch -elasticsearch_curator python3-elasticsearch-curator -empy python3-empy -enjarify enjarify -enzyme python3-enzyme -esmre python3-esmre -eventlet python3-eventlet -expeyes python-expeyes -expiringdict python3-expiringdict -extras python3-extras -fabio python3-fabio -factory_boy python3-factory-boy -fail2ban fail2ban -falcon python3-falcon -fann2 python3-fann2 -fasteners python3-fasteners -fdb python3-fdb -feedgenerator python3-feedgenerator -feedparser python3-feedparser -first python3-first -fiu python3-fiu -fixtures python3-fixtures -flake8 python3-flake8 -flexmock python3-flexmock -flufl.bounce python3-flufl.bounce -flufl.i18n python3-flufl.i18n -freezegun python3-freezegun -fudge python3-fudge -funcparserlib python3-funcparserlib -funcsigs python3-funcsigs -future python3-future -futurist python3-futurist -fuzzywuzzy python3-fuzzywuzzy -fysom python3-fysom -gabbi python3-gabbi -gccjit python3-gccjit -gear python3-gear -geojson python3-geojson -geolinks python3-geolinks -geopandas python3-geopandas -geopy python3-geopy -germinate python3-germinate -gerritlib python3-gerritlib -glue glue-sprite -gmpy2 python3-gmpy2 -google_api_python_client python3-googleapi -google_apputils python3-google-apputils -googlecloudapis python3-googlecloudapis -gphoto2_cffi python3-gphoto2 -gramps gramps -graphite_api graphite-api -graypy python3-graypy -greenio python3-greenio -greenlet python3-greenlet -gssapi python3-gssapi -gsw python3-gsw gtimelog gtimelog -guacamole python3-guacamole -guess_language_spirit python3-guess-language -guessit python3-guessit -gumbo python3-gumbo -gunicorn python3-gunicorn -gvb gvb -h5py python3-h5py -hacking python3-hacking -healpy python3-healpy -hidapi_cffi python3-hidapi -hiredis python3-hiredis -hl7 python3-hl7 -hpack python3-hpack -hplefthandclient python3-hplefthandclient -html2text python3-html2text -html5lib python3-html5lib -http_parser python3-http-parser -httplib2 python3-httplib2 -httpretty python3-httpretty -humanize python3-humanize -hunspell python3-hunspell -hurry.filesize python3-hurry.filesize -hy python3-hy -hypothesis python3-hypothesis -iapws python3-iapws -icalendar python3-icalendar -idna python3-idna -iep python3-ieplib -ijson python3-ijson -imaplib2 python3-imaplib2 -influxdb python3-influxdb -iniparse python3-iniparse -invocations python3-invocations -invoke python3-invoke -iowait python3-iowait -ipdb python3-ipdb ipython ipython3 -ipython_genutils python3-ipython-genutils -isbnlib python3-isbnlib -iso8601 python3-iso8601 -isodate python3-isodate -isort python3-isort -isoweek python3-isoweek -itsdangerous python3-itsdangerous -jdcal python3-jdcal -jedi python3-jedi -jenkins_job_builder python3-jenkins-job-builder -jingo python3-jingo -jmespath python3-jmespath -joblib python3-joblib -jsmin python3-jsmin -jsonpatch python3-jsonpatch -jsonpath_rw python3-jsonpath-rw -jsonpath_rw_ext python3-jsonpath-rw-ext -jsonpickle python3-jsonpickle jsonpointer python3-json-pointer -jsonschema python3-jsonschema -junit_xml python3-junit.xml -junitxml python3-junitxml -kafka_python python3-kafka kazam kazam -kazoo python3-kazoo -kdtree python3-kdtree -keyring python3-keyring -keystoneauth1 python3-keystoneauth1 -keystonemiddleware python3-keystonemiddleware -kombu python3-kombu -launchpadlib python3-launchpadlib -lazr.config python3-lazr.config -lazr.delegates python3-lazr.delegates -lazr.restfulclient python3-lazr.restfulclient -lazr.smtptest python3-lazr.smtptest -lazr.uri python3-lazr.uri -ldap3 python3-ldap3 -ldif3 python3-ldif3 -lesscpy python3-lesscpy -leveldb python3-leveldb -libarchive_c python3-libarchive-c -libhfst_swig python3-libhfst -libvirt_python python3-libvirt -lift lift -linecache2 python3-linecache2 -linop python3-linop -livereload python3-livereload -livestreamer python3-livestreamer -llfuse python3-llfuse -lmdb python3-lmdb -lmfit python3-lmfit -lockfile python3-lockfile -logging_tree python3-logging-tree -logilab_astng python3-logilab-astng -logilab_common python3-logilab-common -logutils python3-logutils -louis python3-louis -lttnganalyses python3-lttnganalyses -lttngust python3-lttngust -lxml python3-lxml -lz4 python3-lz4 -macholib python3-macholib -magcode_core python3-magcode-core -manuel python3-manuel -mapnik python3-mapnik -marisa python3-marisa -mate_tweak mate-tweak -matplotlib python3-matplotlib -matplotlib_venn python3-matplotlib-venn -maxminddb python3-maxminddb -mccabe python3-mccabe -meld3 python3-meld3 -memory_profiler python3-memory-profiler -memprof python3-memprof menulibre menulibre -metaconfig python3-metaconfig -minieigen python3-minieigen -misaka python3-misaka -mistune python3-mistune -mkdocs mkdocs -mock python3-mock -mockito python3-mockito -monotonic python3-monotonic -morris python3-morris -mox3 python3-mox3 -mpi4py python3-mpi4py -mpld3 python3-mpld3 -mplexporter python3-mplexporter -mpmath python3-mpmath -mps_youtube mps-youtube msgpack_python python3-msgpack -mugshot mugshot -multicorn python3-multicorn -multipletau python3-multipletau -munkres python3-munkres -musicbrainzngs python3-musicbrainzngs -mutagen python3-mutagen -mwparserfromhell python3-mwparserfromhell -mysql_connector_python python3-mysql.connector -mysqlclient python3-mysqldb -nagiosplugin python3-nagiosplugin -natsort python3-natsort -nbxmpp python3-nbxmpp -netCDF4 python3-netcdf4 -netaddr python3-netaddr -netifaces python3-netifaces -networkx python3-networkx -nibabel python3-nibabel -nine python3-nine -nltk python3-nltk -nml nml -nodeenv nodeenv -nose python3-nose -nose2 python3-nose2 -nose2_cov python3-nose2-cov -nose_exclude python3-nose-exclude -nose_parameterized python3-nose-parameterized -nose_timer python3-nose-timer -nosexcover python3-nosexcover -notify2 python3-notify2 -notmuch python3-notmuch -npm2deb npm2deb -numexpr python3-numexpr -numpy python3-numpy -numpydoc python3-numpydoc -nwdiag python3-nwdiag -oauth python3-oauth -oauth2client python3-oauth2client -oauthlib python3-oauthlib -objgraph python3-objgraph -odfpy python3-odf -ofxparse python3-ofxparse -onboard onboard -openpyxl python3-openpyxl -openslide_python python3-openslide -openstack.nose_plugin python3-openstack.nose-plugin -openstack_doc_tools python3-openstack-doc-tools -os_brick python3-os-brick -os_client_config python3-os-client-config -os_testr python3-os-testr -oslo.cache python3-oslo.cache -oslo.concurrency python3-oslo.concurrency -oslo.config python3-oslo.config -oslo.context python3-oslo.context -oslo.db python3-oslo.db -oslo.i18n python3-oslo.i18n -oslo.log python3-oslo.log -oslo.messaging python3-oslo.messaging -oslo.middleware python3-oslo.middleware -oslo.policy python3-oslo.policy -oslo.reports python3-oslo.reports -oslo.rootwrap python3-oslo.rootwrap -oslo.serialization python3-oslo.serialization -oslo.service python3-oslo.service -oslo.utils python3-oslo.utils -oslo.versionedobjects python3-oslo.versionedobjects -oslotest python3-oslotest -osmapi python3-osmapi -osprofiler python3-osprofiler -packaging python3-packaging -pacparser python3-pacparser -padme python3-padme -pafy python3-pafy -pandas python3-pandas -pandocfilters python3-pandocfilters -paramiko python3-paramiko -passlib python3-passlib -path.py python3-path -pathtools python3-pathtools -patsy python3-patsy -pbkdf2 python3-pbkdf2 -pbr python3-pbr -pdfrw python3-pdfrw -pecan python3-pecan -pep8 python3-pep8 -pep8_naming python3-pep8-naming -persistent python3-persistent -pex python3-pex -pexpect python3-pexpect -pgpdump python3-pgpdump -phply python3-phply -phpserialize python3-phpserialize -pies python3-pies -pip python3-pip -pkgconfig python3-pkgconfig -pkginfo python3-pkginfo -plainbox python3-plainbox -planetfilter planetfilter -plotly python3-plotly -pluggy python3-pluggy -plumbum python3-plumbum -ply python3-ply -polib python3-polib -portalocker python3-portalocker -posix_ipc python3-posix-ipc -power python3-power -powerline_status python3-powerline -praw python3-praw -pretend python3-pretend -prettytable python3-prettytable -proboscis python3-proboscis -progressbar python3-progressbar -prompt_toolkit python3-prompt-toolkit -protorpc_standalone python3-protorpc-standalone -psutil python3-psutil -psycopg2 python3-psycopg2 -ptyprocess python3-ptyprocess -publicsuffix python3-publicsuffix -pudb python3-pudb -purl python3-purl -py python3-py py3dns python3-dns -pyClamd python3-pyclamd -pyFAI python3-pyfai -pyFFTW python3-pyfftw pyLibravatar python3-libravatar -pyNFFT python3-pynfft pyOpenSSL python3-openssl -pyRFC3339 python3-rfc3339 pySFML python3-sfml -pyScss python3-pyscss py_bcrypt python3-bcrypt -py_enigma python3-enigma -py_moneyed python3-moneyed py_postgresql python3-postgresql -pyacoustid python3-acoustid -pyapi_gitlab python3-gitlab -pyasn1 python3-pyasn1 -pyasn1_modules python3-pyasn1-modules -pycadf python3-pycadf -pycountry python3-pycountry -pycparser python3-pycparser pycrypto python3-crypto -pycups python3-cups -pycurl python3-pycurl -pydicom python3-dicom -pydot python3-pydot -pyds9 python3-pyds9 -pyelftools python3-pyelftools -pyelliptic python3-pyelliptic pyenchant python3-enchant pyepr python3-epr -pyfastaq fastaq -pyfiglet python3-pyfiglet -pyfits python3-pyfits pyflakes pyflakes -pygit2 python3-pygit2 pygobject python3-gi -pygpgme python3-gpgme -pygraphviz python3-pygraphviz pygrib python3-grib pygtkspellcheck python3-gtkspellcheck -pyinotify python3-pyinotify -pykerberos python3-kerberos -pylast python3-pylast -pylibacl python3-pylibacl pyliblo python3-liblo -pylibmc python3-pylibmc -pylint pylint3 -pylint_celery python3-pylint-celery -pylint_common python3-pylint-common -pylint_django python3-pylint-django -pylint_plugin_utils python3-pylint-plugin-utils -pymemcache python3-pymemcache pymia python3-mia -pyocr python3-pyocr -pyopencl python3-pyopencl -pyoperators python3-pyoperators -pyorick python3-pyorick -pyosmium python3-pyosmium -pyparsing python3-pyparsing -pyparted python3-parted -pyperclip python3-pyperclip pypolicyd_spf postfix-policyd-spf-python pyppd pyppd -pyproj python3-pyproj -pypuppetdb python3-pypuppetdb -pypureomapi python3-pypureomapi -pyqtgraph python3-pyqtgraph -pyrad python3-pyrad -pyramid python3-pyramid -pyregion python3-pyregion -pyresample python3-pyresample -pyroma python3-pyroma -pyroute2 python3-pyroute2 -pysam python3-pysam -pysaml2 python3-pysaml2 +pysane python3-sane pyserial python3-serial -pyshp python3-pyshp -pysmbc python3-smbc pysnmp python3-pysnmp4 pyspf python3-spf -pysrt python3-pysrt -pystache python3-pystache pysubnettree python3-subnettree pytaglib python3-taglib -pyte python3-pyte -pytest python3-pytest -pytest_catchlog python3-pytest-catchlog -pytest_cov python3-pytest-cov -pytest_django python3-pytest-django -pytest_instafail python3-pytest-instafail -pytest_localserver python3-pytest-localserver -pytest_mock python3-pytest-mock -pytest_timeout python3-pytest-timeout -pytest_tornado python3-pytest-tornado -python3_openid python3-openid -python_Levenshtein python3-levenshtein -python_aalib python3-aalib -python_afl python3-afl -python_apt python3-apt -python_augeas python3-augeas -python_axolotl_curve25519 python3-axolotl-curve25519 -python_barbicanclient python3-barbicanclient -python_ceilometerclient python3-ceilometerclient -python_cinderclient python3-cinderclient -python_cpl python3-cpl -python_crontab python3-crontab -python_daemon python3-daemon -python_dateutil python3-dateutil -python_dbusmock python3-dbusmock -python_debian python3-debian -python_debianbts python3-debianbts -python_distutils_extra python3-distutils-extra -python_djvulibre python3-djvu -python_dvdvideo python3-dvdvideo -python_editor python3-editor -python_espeak python3-espeak -python_gammu python3-gammu -python_gflags python3-gflags -python_glanceclient python3-glanceclient -python_gnupg python3-gnupg +python3_libgearman python3-gearman.libgearman python_graph_core python3-pygraph python_graph_dot python3-pygraph -python_heatclient python3-heatclient -python_hglib python3-hglib -python_hpilo python3-hpilo -python_ironicclient python3-ironicclient -python_jenkins python3-jenkins -python_keystoneclient python3-keystoneclient -python_libdiscid python3-libdiscid -python_libguess python3-libguess -python_librtmp python3-librtmp -python_libtorrent python3-libtorrent -python_ly python3-ly -python_magnumclient python3-magnumclient -python_memcached python3-memcache -python_mimeparse python3-mimeparse -python_mistralclient python3-mistralclient -python_musicpd python3-musicpd -python_netfilter python3-netfilter -python_nmap python3-nmap -python_novaclient python3-novaclient -python_pam python3-pampy -python_popcon python3-popcon -python_poppler_qt4 python3-poppler-qt4 -python_poppler_qt5 python3-poppler-qt5 -python_potr python3-potr -python_pskc python3-pskc -python_redmine python3-redmine -python_sane python3-sane -python_scciclient python3-scciclient -python_social_auth python3-social-auth -python_sql python3-sql -python_stdnum python3-stdnum -python_subunit python3-subunit -python_svipc python3-svipc -python_swiftclient python3-swiftclient -python_systemd python3-systemd -python_termstyle python3-termstyle -python_tldap python3-tldap -python_troveclient python3-troveclient -python_xlib python3-xlib -python_xmp_toolkit python3-libxmp -pythondialog python3-dialog -pytils python3-pytils -pytimeparse python3-pytimeparse -pytoml python3-pytoml -pytools python3-pytools -pytsk3 python3-tsk pytz python3-tz -pyudev python3-pyudev -pyusb python3-usb -pyviennacl python3-pyviennacl -pyvmomi python3-pyvmomi -pywapi python3-pywapi -pywinrm python3-winrm -pyxattr python3-pyxattr pyxdg python3-xdg pyzmq python3-zmq -pyzolib python3-pyzolib -queuelib python3-queuelib -qweborf qweborf -rarfile python3-rarfile -rasterio python3-rasterio -rdflib python3-rdflib -reconfigure python3-reconfigure -redis python3-redis -rednose python3-rednose -regex python3-regex -relational python3-relational -relational_gui relational -relational_readline relational-cli -releases python3-releases -rencode python3-rencode -reportlab python3-reportlab -repoze.lru python3-repoze.lru -repoze.tm2 python3-repoze.tm2 -requests python3-requests requests_aws python3-awsauth -requests_cache python3-requests-cache -requests_futures python3-requests-futures -requests_kerberos python3-requests-kerberos -requests_mock python3-requests-mock -requests_oauthlib python3-requests-oauthlib -requirements_detector python3-requirements-detector -responses python3-responses -restless python3-restless -restructuredtext_lint python3-restructuredtext-lint -retrying python3-retrying -rfc3986 python3-rfc3986 rhythmbox_ampache rhythmbox-ampache -roman python3-roman -rply python3-rply -rpm_python python3-rpm -rpy2 python3-rpy2 -rsa python3-rsa -rss2email rss2email -rtslib_fb python3-rtslib-fb -ruffus python3-ruffus -schroot python3-schroot -scikit_bio python3-skbio scikit_image python3-skimage -scipy python3-scipy -scoop python3-scoop -scp python3-scp -screed python3-screed -scripttest python3-scripttest -seaborn python3-seaborn -semantic_version python3-semantic-version -semver python3-semver -seqdiag python3-seqdiag -serpent python3-serpent -service_identity python3-service-identity -setoptconf python3-setoptconf -setproctitle python3-setproctitle -setuptools_git python3-setuptools-git -setuptools_scm python3-setuptools-scm -sh python3-sh shatag shatag -shortuuid python3-shortuuid -sievelib python3-sievelib -simple_cdd python3-simple-cdd -simpleeval python3-simpleeval -simplegeneric python3-simplegeneric -simplejson python3-simplejson -simpy python3-simpy3 -sireader python3-sireader -six python3-six -sleekxmpp python3-sleekxmpp -slimmer python3-slimmer -slip python3-slip -slip.dbus python3-slip-dbus -smartypants python3-smartypants -smstrade python3-smstrade -snakemake snakemake -snimpy python3-snimpy -snuggs python3-snuggs -sockjs_tornado python3-sockjs-tornado -sorl_thumbnail python3-sorl-thumbnail -sortedcontainers python3-sortedcontainers -sphere python3-sphere -sphinx_bootstrap_theme python3-sphinx-bootstrap-theme -sphinx_paramlinks python3-sphinx-paramlinks -sphinx_patchqueue python3-sphinx-patchqueue -sphinx_rtd_theme python3-sphinx-rtd-theme -sphinx_testing python3-sphinx-testing -sphinxcontrib_actdiag python3-sphinxcontrib.actdiag -sphinxcontrib_autoprogram python3-sphinxcontrib.autoprogram -sphinxcontrib_blockdiag python3-sphinxcontrib.blockdiag -sphinxcontrib_httpdomain python3-sphinxcontrib.httpdomain -sphinxcontrib_nwdiag python3-sphinxcontrib.nwdiag -sphinxcontrib_plantuml python3-sphinxcontrib.plantuml -sphinxcontrib_programoutput python3-sphinxcontrib.programoutput -sphinxcontrib_rubydomain python3-sphinxcontrib.rubydomain -sphinxcontrib_seqdiag python3-sphinxcontrib.seqdiag -sphinxcontrib_spelling python3-sphinxcontrib.spelling -sphinxcontrib_youtube python3-sphinxcontrib.youtube -spur python3-spur -spyder python3-spyderlib -sqlalchemy_migrate python3-migrate -sqlparse python3-sqlparse -srp python3-srp -ssdeep python3-ssdeep -statsd python3-statsd -stdeb python3-stdeb -stem python3-stem -stevedore python3-stevedore -structlog python3-structlog -stsci.distutils python3-stsci.distutils -subliminal python3-subliminal -sunlight python3-sunlight -sure python3-sure -svg.path python3-svg.path -swiftsc python3-swiftsc -sympy python3-sympy -sysv_ipc python3-sysv-ipc -tables python3-tables -tabulate python3-tabulate -taskflow python3-taskflow -tasklib python3-tasklib -tblib python3-tblib -tempest_lib python3-tempest-lib -termcolor python3-termcolor -terminado python3-terminado -testrepository python3-testrepository -testresources python3-testresources -testscenarios python3-testscenarios -testtools python3-testtools -tkSnack python3-tksnack -tlsh python3-tlsh -tomahawk python3-tomahawk -tooz python3-tooz -toposort python3-toposort -tornado python3-tornado -tosca_parser python3-tosca-parser -tox tox -traceback2 python3-traceback2 -traitlets python3-traitlets -traits python3-traits -transaction python3-transaction -translationstring python3-translationstring -transmissionrpc python3-transmissionrpc -trollius python3-trollius -tweepy python3-tweepy -twine twine -twython python3-twython -txaio python3-txaio -typecatcher typecatcher -typogrify python3-typogrify -tz_converter tz-converter -tzlocal python3-tzlocal -udiskie python3-udiskie ufw ufw -ujson python3-ujson unattended_upgrades unattended-upgrades -uncertainties python3-uncertainties -unicodecsv python3-unicodecsv -unittest2 python3-unittest2 -uritemplate python3-uritemplate -uritools python3-uritools -urllib3 python3-urllib3 -urwid python3-urwid uucp_lmtp uucp-lmtp -validictory python3-validictory -vatnumber python3-vatnumber -vcrpy python3-vcr -vcversioner python3-vcversioner -venusian python3-venusian -versiontools python3-versiontools -virtualenv python3-virtualenv -voluptuous python3-voluptuous -w3lib python3-w3lib -wadllib python3-wadllib -waitress python3-waitress -warlock python3-warlock -watchdog python3-watchdog -wcsaxes python3-wcsaxes -wcwidth python3-wcwidth -webassets python3-webassets -webcolors python3-webcolors -websocket_client python3-websocket -websockets python3-websockets -wget python3-wget -wheel python3-wheel -whichcraft python3-whichcraft -whois python3-whois -willie willie -woo python3-woo -wrapt python3-wrapt -ws4py python3-ws4py -wsgi_intercept python3-wsgi-intercept -wsgicors python3-wsgicors -xcffib python3-xcffib -xkcd python3-xkcd -xlrd python3-xlrd -xmltodict python3-xmltodict -xtermcolor python3-xtermcolor -xvfbwrapper python3-xvfbwrapper -yaql python3-yaql yara_python python3-yara -yt python3-yt -zake python3-zake -zeroconf python3-zeroconf -zipstream python3-zipstream -zope.browser python3-zope.browser -zope.component python3-zope.component -zope.configuration python3-zope.configuration -zope.contenttype python3-zope.contenttype -zope.deprecation python3-zope.deprecation -zope.event python3-zope.event -zope.exceptions python3-zope.exceptions -zope.fixers python3-zope.fixers -zope.hookable python3-zope.hookable -zope.i18n python3-zope.i18n -zope.i18nmessageid python3-zope.i18nmessageid -zope.interface python3-zope.interface -zope.location python3-zope.location -zope.proxy python3-zope.proxy -zope.schema python3-zope.schema -zope.security python3-zope.security -zope.testrunner python3-zope.testrunner -zzzeeksphinx python3-zzzeeksphinx +zeroinstall_injector zeroinstall-injector diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/pydist/generate_fallback_list.py dh-python-1.20140128/pydist/generate_fallback_list.py --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/pydist/generate_fallback_list.py 2015-07-28 18:49:08.000000000 +0000 +++ dh-python-1.20140128/pydist/generate_fallback_list.py 2014-01-28 17:20:25.000000000 +0000 @@ -1,5 +1,5 @@ #! /usr/bin/python3 -# Copyright © 2010-2015 Piotr Ożarowski +# Copyright © 2010-2013 Piotr Ożarowski # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal @@ -21,21 +21,12 @@ import re import sys -try: - from distro_info import DistroInfo # python3-distro-info package -except ImportError: - DistroInfo = None from gzip import decompress from os import chdir, mkdir from os.path import dirname, exists, isdir, join, split from urllib.request import urlopen -if '--ubuntu' in sys.argv and DistroInfo: - SOURCE = 'http://archive.ubuntu.com/ubuntu/dists/%s/Contents-amd64.gz' % \ - DistroInfo('ubuntu').devel() -else: - SOURCE = 'http://ftp.debian.org/debian/dists/unstable/main/Contents-amd64.gz' - +SOURCE = 'http://ftp.debian.org/debian/dists/unstable/main/Contents-amd64.gz' IGNORED_PKGS = {'python-setuptools', 'python3-setuptools', 'pypy-setuptools'} DEFAULTS = { 'cpython2': [ @@ -44,13 +35,9 @@ 'wsgiref python (>= 2.5) | python-wsgiref\n', 'argparse python (>= 2.7) | python-argparse\n', # not recognized due to .pth file (egg-info is in PIL/ and not in *-packages/) - 'pil python-pil\n', - 'Pillow python-pil\n'], + 'pil python-imaging\n'], 'cpython3': [ - 'pil python3-pil\n', - 'Pillow python3-pil\n', - 'setuptools python3-pkg-resources\n', - 'argparse python3 (>= 3.2)\n'], + 'setuptools python3-pkg-resources\n'], 'pypy': [] } @@ -89,10 +76,7 @@ fp.write(data) else: data = open(cache_fpath, 'rb').read() -try: - data = str(decompress(data), encoding='UTF-8') -except UnicodeDecodeError as e: # Ubuntu - data = str(decompress(data), encoding='ISO-8859-15') +data = str(decompress(data), encoding='UTF-8') result = { 'cpython2': {}, @@ -105,11 +89,7 @@ if line.startswith('FILE'): is_header = False continue - try: - path, desc = line.rsplit(maxsplit=1) - except ValueError: - # NOTE(jamespage) some lines in Ubuntu are not parseable. - continue + path, desc = line.rsplit(maxsplit=1) path = '/' + path.rstrip() section, pkg_name = desc.rsplit('/', 1) if pkg_name in IGNORED_PKGS: diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/pydist/Makefile dh-python-1.20140128/pydist/Makefile --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/pydist/Makefile 2015-07-28 18:13:17.000000000 +0000 +++ dh-python-1.20140128/pydist/Makefile 2014-01-28 17:20:25.000000000 +0000 @@ -1,14 +1,12 @@ #!/usr/bin/make -f -FALLBACK_FLAGS = $(shell dpkg-vendor --is ubuntu && echo '--ubuntu') - clean: rm -rf cache #rm -f dist_fallback rm -f README.PyDist.html dist_fallback: - python3 ./generate_fallback_list.py $(FALLBACK_FLAGS) + python3 ./generate_fallback_list.py --skip-sensible-names README.PyDist.html: README.PyDist rst2html $< $@ diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/pydist/pypy_fallback dh-python-1.20140128/pydist/pypy_fallback --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/pydist/pypy_fallback 2015-10-29 21:49:13.000000000 +0000 +++ dh-python-1.20140128/pydist/pypy_fallback 2014-01-28 17:20:25.000000000 +0000 @@ -1,18 +1,2 @@ -Unidecode pypy-unidecode -Wand pypy-wand -appdirs pypy-appdirs beautifulsoup4 pypy-bs4 -dulwich pypy-dulwich -enum34 pypy-enum34 -fastimport pypy-fastimport -idna pypy-idna -ipaddress pypy-ipaddress -iso8601 pypy-iso8601 -mutagen pypy-mutagen -pretend pypy-pretend -pyasn1 pypy-pyasn1 pyzmq pypy-zmq -rply pypy-rply -simplejson pypy-simplejson -six pypy-six -sqlparse pypy-sqlparse diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/README.rst dh-python-1.20140128/README.rst --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/README.rst 2015-11-03 22:18:52.000000000 +0000 +++ dh-python-1.20140128/README.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,192 +0,0 @@ -=========== - dh-python -=========== - -``dh-python`` provides various tools that help packaging Python related files -in Debian. - -* ``pybuild`` is a tool that implements ``dh`` sequencer's ``dh_auto_foo`` - commands (but it can be used outside ``dh`` as well). It builds and installs - files. - -* ``dh_python2`` / ``dh_python3`` / ``dh_pypy`` are tools that take what - ``pybuild`` produces and generates runtime dependencies and maintainer - scripts. It fixes some common mistakes, like installing files into - ``site-packages`` instead of ``dist-packages``, ``/usr/local/bin/`` - shebangs, removes ``.py`` files from ``-dbg`` packages, etc.) - - To translate ``requires.txt`` (a file installed in - ``dist-packages/foo.egg-info/``) into Debian dependencies, a list of - packages that provide given egg distribution is used. If the dependency - is not found there, ``dpkg -S`` is used (i.e. a given dependency has to be - installed; you need it in ``Build-Depends`` in order to run tests anyway). - See *dependencies* section in ``dh_python3``'s manpage for more details. - - * ``dh_python2`` works on ``./debian/python-foo/`` files and other binary - packages that have ``${python:Depends}`` in the ``Depends`` field. - It ignores Python 3.X and PyPy specific directories. - See ``dh_python2`` manpage for more details. - - * ``dh_python3`` works on ``./debian/python3-foo/`` files and other binary - packages that have ``${python3:Depends}`` in the ``Depends`` field. - It ignores Python 2.X and PyPy specific directories. - See ``dh_python3`` manpage for more details. - - * ``dh_pypy`` works on ``./debian/pypy-foo/`` files and other binary - packages that have ``${pypy:Depends}`` in the ``Depends`` field. - It ignores Python 2.X and Python 3.X specific directories. - See ``dh_pypy`` manpage for more details. - - -How it works -============ - -A simplified work flow looks like this: - -.. code:: python - - # dh_auto_clean stage - for interpreter in REQUESTED_INTERPRETERS: - for version in interpreter.REQUESTED_VERSIONS: - PYBUILD_BEFORE_CLEAN - pybuild --clean - PYBUILD_AFTER_CLEAN - - plenty_of_other_dh_foo_tools_invoked_here - - # dh_auto_configure stage - for interpreter in REQUESTED_INTERPRETERS: - for version in interpreter.REQUESTED_VERSIONS: - PYBUILD_BEFORE_CONFIGURE - pybuild --configure - PYBUILD_AFTER_CONFIGURE - - plenty_of_other_dh_foo_tools_invoked_here - - # dh_auto_build stage - for interpreter in REQUESTED_INTERPRETERS: - for version in interpreter.REQUESTED_VERSIONS: - PYBUILD_BEFORE_BUILD - pybuild --build - PYBUILD_AFTER_BUILD - - plenty_of_other_dh_foo_tools_invoked_here - - # dh_auto_test stage - for interpreter in REQUESTED_INTERPRETERS: - for version in interpreter.REQUESTED_VERSIONS: - PYBUILD_BEFORE_TEST - pybuild --test - PYBUILD_AFTER_TEST - - plenty_of_other_dh_foo_tools_invoked_here - - # dh_auto_install stage - for interpreter in REQUESTED_INTERPRETERS: - for version in interpreter.REQUESTED_VERSIONS: - PYBUILD_BEFORE_INSTALL - pybuild --install - PYBUILD_AFTER_INSTALL - - plenty_of_other_dh_foo_tools_invoked_here - - dh_python2 - dh_python3 - dh_pypy - - plenty_of_other_dh_foo_tools_invoked_here - - -pybuild --$step ---------------- - -This command is auto-detected, it currently supports distutils, autotools, -cmake and a custom build system where you can define your own set of -commands. Why do we need it? ``dh_auto_foo`` doesn't know each command has to -be invoked for each interpreter and version. - - -REQUESTED_INTERPRETERS ----------------------- - -is parsed from ``Build-Depends`` if ``--buildsystem=pybuild`` is set. If it's -not, you have to pass ``--interpreter`` to ``pybuild`` (more in its manpage) - -* ``python{3,}-all{,-dev}`` - all CPython interpreters (for packages that - provide public modules / extensions) -* ``python{3,}-all-dbg`` - all CPython debug interpreters (if ``-dbg`` package - is provided) -* ``python{3,}`` - default CPython or closest to default interpreter only (use - this if you build a Python application) -* ``python{3,}-dbg`` - default CPython debug (or closest to the default one) - only -* ``pypy`` - PyPy interpreter - - -REQUESTED_VERSIONS ------------------- - -is parsed from ``X-Python{,3}-Version`` and ``Build-Depends`` (the right -``X-*-Version`` is parsed based on interpreters listed in ``Build-Depends``, -see above) See also Debian Python Policy for ``X-Python-Version`` description. - - -BEFORE and AFTER commands -------------------------- - -can be different for each interpreter and/or version, examples: - -* ``PYBUILD_AFTER_BUILD_python3.5=rm {destdir}/{build_dir}/foo/bar2X.py`` -* ``PYBUILD_BEFORE_INSTALL_python3=touch {destdir}/{install_dir}/foo/bar/__init__.py`` - -These commands should be used only if overriding ``dh_auto_foo`` is not enough -(example below) - -.. code:: - - override_dh_auto_install: - before_auto_install_commands - dh_auto_install - after_auto_install_commands - -See the ``pybuild`` manpage for more details (search for ``BUILD SYSTEM ARGUMENTS``) - - -overrides ---------- - -How to override ``pybuild`` autodetected options: -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - -* Each ``pybuild`` call can be disabled (for given interpreter, version or - stage). See the ``pybuild`` manpage for more details (search for - ``--disable`` description). -* You can pass options in ``override_dh_auto_foo`` via command line options: - - .. code:: - - dh_auto_test -- --system=custom --test-args='{interpreter} setup.py test' - - or env. variables: - - .. code:: - - PYBUILD_SYSTEM=custom PYBUILD_TEST_ARGS='{interpreter} setup.py test' dh_auto_test - -* You can export env. variables globally at the beginning of debian/rules - - .. code:: - - export PYBUILD_TEST_ARGS={dir}/tests/ - -How to override dh_python* options: -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - * via command line, f.e. - -.. code:: - - override_dh_python3: - dh_python3 --shebang=/usr/bin/python3 - diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/tests/Makefile dh-python-1.20140128/tests/Makefile --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/tests/Makefile 2014-07-01 18:20:52.000000000 +0000 +++ dh-python-1.20140128/tests/Makefile 2014-01-28 17:20:25.000000000 +0000 @@ -4,8 +4,8 @@ # Note that all these packages have to be installed during tests export DEBPYTHON_DEFAULT=2.7 export DEBPYTHON_SUPPORTED=2.6,2.7 -export DEBPYTHON3_DEFAULT=3.4 -export DEBPYTHON3_SUPPORTED=3.4 +export DEBPYTHON3_DEFAULT=3.3 +export DEBPYTHON3_SUPPORTED=3.2,3.3 # enable or disable tests here: TESTS := test101 test201 test202 test203 test204 test205 test206 test207 test301 test302 test303 test304 diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/tests/t202/debian/install dh-python-1.20140128/tests/t202/debian/install --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/tests/t202/debian/install 2015-07-19 20:53:02.000000000 +0000 +++ dh-python-1.20140128/tests/t202/debian/install 2014-01-28 17:20:25.000000000 +0000 @@ -1,4 +1,3 @@ foo.py /usr/share/pyshared/ __init__.py /usr/share/pyshared/bar/ -__init__.py /usr/share/pyshared/tests/ bar.py /usr/share/pyshared/bar/ diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/tests/t202/Makefile dh-python-1.20140128/tests/t202/Makefile --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/tests/t202/Makefile 2015-07-19 20:53:02.000000000 +0000 +++ dh-python-1.20140128/tests/t202/Makefile 2014-01-28 17:20:25.000000000 +0000 @@ -4,8 +4,7 @@ clean: clean-common check: - test -f debian/python-foo/usr/lib/python2.7/dist-packages/foo.py - test -f debian/python-foo/usr/lib/python2.7/dist-packages/bar/bar.py - test \! -f debian/python-foo/usr/lib/python2.7/dist-packages/tests/__init__.py + test -f debian/python-foo/usr/lib/python2.6/dist-packages/foo.py + test -f debian/python-foo/usr/lib/python2.6/dist-packages/bar/bar.py grep -q pycompile debian/python-foo/DEBIAN/postinst grep -q pyclean debian/python-foo/DEBIAN/prerm diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/tests/t204/Makefile dh-python-1.20140128/tests/t204/Makefile --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/tests/t204/Makefile 2014-07-01 18:20:52.000000000 +0000 +++ dh-python-1.20140128/tests/t204/Makefile 2014-01-28 17:20:25.000000000 +0000 @@ -5,7 +5,7 @@ check: grep -q python2.6 debian/foo/usr/share/foo/foo.py - grep -q Depends:.*python debian/foo/DEBIAN/control + grep -q Depends:.*python2.6 debian/foo/DEBIAN/control #grep -q python2.5 debian/foo/usr/share/bar/bar.py #grep -q Depends:.*python2.5 debian/foo/DEBIAN/control grep -q python2.4 debian/foo/usr/share/foo/baz.py diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/tests/t206/Makefile dh-python-1.20140128/tests/t206/Makefile --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/tests/t206/Makefile 2014-07-01 18:20:52.000000000 +0000 +++ dh-python-1.20140128/tests/t206/Makefile 2014-01-28 17:20:25.000000000 +0000 @@ -13,6 +13,6 @@ grep -q '\-V 2.5 /usr/share/bar25' debian/foo/usr/share/python/runtime.d/foo.rtupdate grep -q '/usr/share/bar25 \-V 2.5' debian/foo/DEBIAN/postinst # python2.6 hardcoded via shebang - #grep -q Depends:.*python2.6 debian/foo/DEBIAN/control + grep -q Depends:.*python2.6 debian/foo/DEBIAN/control grep -q '\-V 2.6 /usr/share/foo' debian/foo/usr/share/python/runtime.d/foo.rtupdate grep -q '/usr/share/foo \-V 2.6' debian/foo/DEBIAN/postinst diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/tests/t304/foo.py dh-python-1.20140128/tests/t304/foo.py --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/tests/t304/foo.py 2014-07-01 18:20:52.000000000 +0000 +++ dh-python-1.20140128/tests/t304/foo.py 2014-01-28 17:20:25.000000000 +0000 @@ -1,2 +1,2 @@ -#!/usr/local/bin/python3.4 -"/usr/local/bin/python3.4 hardcoded in shebang" +#!/usr/local/bin/python3.3 +"/usr/local/bin/python3.3 hardcoded in shebang" diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/tests/t304/Makefile dh-python-1.20140128/tests/t304/Makefile --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/tests/t304/Makefile 2014-07-01 18:20:52.000000000 +0000 +++ dh-python-1.20140128/tests/t304/Makefile 2014-01-28 17:20:25.000000000 +0000 @@ -6,10 +6,10 @@ check: # python3.2 hardcoded via `dh_python3 --shebang ...python3.2` grep -q '#! /usr/bin/python3.2 -OO' debian/foo/usr/share/baz32/baz.py - # python3.4 hardcoded via shebang - grep -q '/usr/share/foo \-V 3.4' debian/foo/DEBIAN/postinst + # python3.3 hardcoded via shebang + grep -q '/usr/share/foo \-V 3.3' debian/foo/DEBIAN/postinst # /env removed from shebang grep -q '#! /usr/bin/python3' debian/foo/usr/share/bar/bar.py # /local removed from shebang grep -q '#! /usr/bin/python3' debian/foo/usr/share/foo/baz.py - grep -q '#! /usr/bin/python3.4' debian/foo/usr/share/foo/foo.py + grep -q '#! /usr/bin/python3.3' debian/foo/usr/share/foo/foo.py diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/tests/test_depends.py dh-python-1.20140128/tests/test_depends.py --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/tests/test_depends.py 2015-07-06 06:41:41.000000000 +0000 +++ dh-python-1.20140128/tests/test_depends.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,128 +0,0 @@ -import os -import unittest -from copy import deepcopy -from pickle import dumps -from tempfile import TemporaryDirectory - -from dhpython.depends import Dependencies - - -class FakeOptions: - def __init__(self, **kwargs): - opts = { - 'depends': (), - 'guess_deps': False, - 'recommends': (), - 'requires': (), - 'suggests': (), - 'vrange': None, - } - opts.update(kwargs) - for k, v in opts.items(): - setattr(self, k, v) - - -def prime_pydist(impl, pydist): - """Fake the pydist data for impl. Returns a cleanup function""" - from dhpython.pydist import load - - for name, entries in pydist.items(): - if not isinstance(entries, list): - pydist[name] = entries = [entries] - for i, entry in enumerate(entries): - if isinstance(entry, str): - entries[i] = entry = {'dependency': entry} - entry.setdefault('name', name) - entry.setdefault('standard', '') - entry.setdefault('rules', []) - entry.setdefault('versions', set()) - - key = dumps(((impl,), {})) - load.cache[key] = pydist - return lambda: load.cache.pop(key) - - -class DependenciesTestCase(unittest.TestCase): - pkg = 'foo' - impl = 'cpython3' - pydist = {} - stats = { - 'compile': False, - 'egg-info': set(), - 'ext_no_version': set(), - 'ext_vers': set(), - 'nsp.txt': set(), - 'private_dirs': {}, - 'public_vers': set(), - 'requires.txt': set(), - 'shebangs': set(), - } - requires = {} - options = FakeOptions() - - def setUp(self): - self.d = Dependencies(self.pkg, self.impl) - - stats = deepcopy(self.stats) - if self.requires: - self.tempdir = TemporaryDirectory() - self.addCleanup(self.tempdir.cleanup) - old_wd = os.getcwd() - os.chdir(self.tempdir.name) - self.addCleanup(os.chdir, old_wd) - - for fn, lines in self.requires.items(): - os.makedirs(os.path.dirname(fn)) - with open(fn, 'w') as f: - f.write('\n'.join(lines)) - stats['requires.txt'].add(fn) - - cleanup = prime_pydist(self.impl, self.pydist) - self.addCleanup(cleanup) - - self.d.parse(stats, self.options) - - -class TestRequiresCPython3(DependenciesTestCase): - options = FakeOptions(guess_deps=True) - pydist = { - 'bar': 'python3-bar', - 'baz': {'dependency': 'python3-baz', 'standard': 'PEP386'}, - 'quux': {'dependency': 'python3-quux', 'standard': 'PEP386'}, - } - requires = { - 'debian/foo/usr/lib/python3/dist-packages/foo.egg-info/requires.txt': ( - 'bar', - 'baz >= 1.0', - 'quux', - ), - } - - def test_depends_on_bar(self): - self.assertIn('python3-bar', self.d.depends) - - def test_depends_on_baz(self): - self.assertIn('python3-baz (>= 1.0)', self.d.depends) - - -class TestRequiresPyPy(DependenciesTestCase): - impl = 'pypy' - options = FakeOptions(guess_deps=True) - pydist = { - 'bar': 'pypy-bar', - 'baz': {'dependency': 'pypy-baz', 'standard': 'PEP386'}, - 'quux': {'dependency': 'pypy-quux', 'standard': 'PEP386'}, - } - requires = { - 'debian/foo/usr/lib/pypy/dist-packages/foo.egg-info/requires.txt': ( - 'bar', - 'baz >= 1.0', - 'quux', - ) - } - - def test_depends_on_bar(self): - self.assertIn('pypy-bar', self.d.depends) - - def test_depends_on_baz(self): - self.assertIn('pypy-baz (>= 1.0)', self.d.depends) diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/tests/test_interpreter.py dh-python-1.20140128/tests/test_interpreter.py --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/tests/test_interpreter.py 2015-07-24 14:26:58.000000000 +0000 +++ dh-python-1.20140128/tests/test_interpreter.py 2014-01-28 17:20:25.000000000 +0000 @@ -45,7 +45,7 @@ self.assertIsNone(i.check_extname('foo.MYARCH_d.so')) self.assertIsNone(i.check_extname('foo.abi3.so')) self.assertIsNone(i.check_extname('foo.OTHER.so')) # different architecture - self.assertEqual(i.check_extname('foo/bar/bazmodule.so'), 'foo/bar/baz.MYARCH.so') + self.assertEqual(i.check_extname('foo/bar/bazmodule.so'), 'foo/bar/bazmodule.MYARCH.so') @unittest.skipUnless(exists('/usr/bin/python2.7-dbg'), 'python2.7-dbg is not installed') def test_python27dbg(self): @@ -55,7 +55,7 @@ self.assertEqual(i.check_extname('foo_d.so'), 'foo.MYARCH_d.so') self.assertIsNone(i.check_extname('foo.MYARCH_d.so')) self.assertIsNone(i.check_extname('foo.OTHER_d.so')) # different architecture - self.assertEqual(i.check_extname('foo/bar/bazmodule.so'), 'foo/bar/baz.MYARCH_d.so') + self.assertEqual(i.check_extname('foo/bar/bazmodule.so'), 'foo/bar/bazmodule.MYARCH_d.so') @unittest.skipUnless(exists('/usr/bin/python3.1'), 'python3.1 is not installed') def test_python31(self): @@ -93,68 +93,26 @@ self.assertIsNone(i.check_extname('foo.abi3.so')) self.assertEqual(i.check_extname('foo/bar/bazmodule.so'), r'foo/bar/bazmodule.cpython-32dmu.so') - @unittest.skipUnless(exists('/usr/bin/python3.4'), 'python3.4 is not installed') - def test_python34(self): - i = Interpreter('python3.4') - self.assertEqual(i.soabi(), 'cpython-34m') - self.assertEqual(i.check_extname('foo.so'), r'foo.cpython-34m-MYARCH.so') + @unittest.skipUnless(exists('/usr/bin/python3.3'), 'python3.3 is not installed') + def test_python33(self): + i = Interpreter('python3.3') + self.assertEqual(i.soabi(), 'cpython-33m') + self.assertEqual(i.check_extname('foo.so'), r'foo.cpython-33m-MYARCH.so') + self.assertIsNone(i.check_extname('foo.cpython-32m.so')) # different version + self.assertIsNone(i.check_extname('foo.cpython-33m-OTHER.so')) # different architecture + self.assertEqual(i.check_extname('foo.cpython-33m.so'), r'foo.cpython-33m-MYARCH.so') + self.assertIsNone(i.check_extname('foo.abi3.so')) + self.assertEqual(i.check_extname('foo/bar/bazmodule.so'), r'foo/bar/baz.cpython-33m-MYARCH.so') + + @unittest.skipUnless(exists('/usr/bin/python3.3-dbg'), 'python3.3-dbg is not installed') + def test_python33dbg(self): + i = Interpreter('python3.3-dbg') + self.assertEqual(i.soabi(), 'cpython-33dm') + self.assertEqual(i.check_extname('foo.so'), r'foo.cpython-33dm-MYARCH.so') self.assertIsNone(i.check_extname('foo.cpython-32m.so')) # different version - self.assertIsNone(i.check_extname('foo.cpython-34m-OTHER.so')) # different architecture - self.assertEqual(i.check_extname('foo.cpython-34m.so'), r'foo.cpython-34m-MYARCH.so') + self.assertIsNone(i.check_extname('foo.cpython-33m-OTHER.so')) # different architecture self.assertIsNone(i.check_extname('foo.abi3.so')) - self.assertEqual(i.check_extname('foo/bar/bazmodule.so'), r'foo/bar/baz.cpython-34m-MYARCH.so') - - @unittest.skipUnless(exists('/usr/bin/python3.4-dbg'), 'python3.4-dbg is not installed') - def test_python34dbg(self): - i = Interpreter('python3.4-dbg') - self.assertEqual(i.soabi(), 'cpython-34dm') - self.assertEqual(i.check_extname('foo.so'), r'foo.cpython-34dm-MYARCH.so') - self.assertIsNone(i.check_extname('foo.cpython-32m.so')) # different version - self.assertIsNone(i.check_extname('foo.cpython-34m-OTHER.so')) # different architecture - self.assertIsNone(i.check_extname('foo.abi3.so')) - self.assertEqual(i.check_extname('foo/bar/bazmodule.so'), r'foo/bar/baz.cpython-34dm-MYARCH.so') - - @unittest.skipUnless(exists('/usr/bin/python3.5'), 'python3.5 is not installed') - def test_python35(self): - i = Interpreter('python3.5') - self.assertEqual(i.soabi(), 'cpython-35m') - self.assertEqual(i.check_extname('foo.so'), r'foo.cpython-35m-MYARCH.so') - self.assertIsNone(i.check_extname('foo.cpython-32m.so')) # different version - self.assertIsNone(i.check_extname('foo.cpython-35m-OTHER.so')) # different architecture - self.assertEqual(i.check_extname('foo.cpython-35m.so'), r'foo.cpython-35m-MYARCH.so') - self.assertIsNone(i.check_extname('foo.abi3.so')) - self.assertEqual(i.check_extname('foo/bar/bazmodule.so'), r'foo/bar/baz.cpython-35m-MYARCH.so') - - @unittest.skipUnless(exists('/usr/bin/python3.5-dbg'), 'python3.5-dbg is not installed') - def test_python35dbg(self): - i = Interpreter('python3.5-dbg') - self.assertEqual(i.soabi(), 'cpython-35dm') - self.assertEqual(i.check_extname('foo.so'), r'foo.cpython-35dm-MYARCH.so') - self.assertIsNone(i.check_extname('foo.cpython-32m.so')) # different version - self.assertIsNone(i.check_extname('foo.cpython-35m-OTHER.so')) # different architecture - self.assertIsNone(i.check_extname('foo.abi3.so')) - self.assertEqual(i.check_extname('foo/bar/bazmodule.so'), r'foo/bar/baz.cpython-35dm-MYARCH.so') - - @unittest.skipUnless(exists('/usr/bin/python3.6'), 'python3.6 is not installed') - def test_python36(self): - i = Interpreter('python3.6') - self.assertEqual(i.soabi(), 'cpython-36m') - self.assertEqual(i.check_extname('foo.so'), r'foo.cpython-36m-MYARCH.so') - self.assertIsNone(i.check_extname('foo.cpython-32m.so')) # different version - self.assertIsNone(i.check_extname('foo.cpython-36m-OTHER.so')) # different architecture - self.assertEqual(i.check_extname('foo.cpython-36m.so'), r'foo.cpython-36m-MYARCH.so') - self.assertIsNone(i.check_extname('foo.abi3.so')) - self.assertEqual(i.check_extname('foo/bar/bazmodule.so'), r'foo/bar/baz.cpython-36m-MYARCH.so') - - @unittest.skipUnless(exists('/usr/bin/python3.6-dbg'), 'python3.6-dbg is not installed') - def test_python36dbg(self): - i = Interpreter('python3.6-dbg') - self.assertEqual(i.soabi(), 'cpython-36dm') - self.assertEqual(i.check_extname('foo.so'), r'foo.cpython-36dm-MYARCH.so') - self.assertIsNone(i.check_extname('foo.cpython-32m.so')) # different version - self.assertIsNone(i.check_extname('foo.cpython-36m-OTHER.so')) # different architecture - self.assertIsNone(i.check_extname('foo.abi3.so')) - self.assertEqual(i.check_extname('foo/bar/bazmodule.so'), r'foo/bar/baz.cpython-36dm-MYARCH.so') + self.assertEqual(i.check_extname('foo/bar/bazmodule.so'), r'foo/bar/baz.cpython-33dm-MYARCH.so') def test_version(self): i = Interpreter(impl='cpython2') diff -Nru dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/tests/test_tools.py dh-python-1.20140128/tests/test_tools.py --- dh-python-2.20151103ubuntu1~ubuntu12.04.1~ppa1/tests/test_tools.py 2015-07-06 06:41:41.000000000 +0000 +++ dh-python-1.20140128/tests/test_tools.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,44 +0,0 @@ -from tempfile import TemporaryDirectory -import os -import unittest - -from dhpython.tools import relpath, move_matching_files - - -class TestRelpath(unittest.TestCase): - def test_common_parent_dir(self): - r = relpath('/usr/share/python-foo/foo.py', '/usr/bin/foo') - self.assertEqual(r, '../share/python-foo/foo.py') - - def test_strips_common_prefix(self): - r = relpath('/usr/share/python-foo/foo.py', '/usr/share') - self.assertEqual(r, 'python-foo/foo.py') - - def test_trailing_slash_ignored(self): - r = relpath('/usr/share/python-foo/foo.py', '/usr/share/') - self.assertEqual(r, 'python-foo/foo.py') - - -class TestMoveMatchingFiles(unittest.TestCase): - def setUp(self): - self.tmpdir = TemporaryDirectory() - self.addCleanup(self.tmpdir.cleanup) - os.makedirs(self.tmppath('foo/bar/a/b/c/spam')) - for path in ('foo/bar/a/b/c/spam/file.so', - 'foo/bar/a/b/c/spam/file.py'): - open(self.tmppath(path), 'w').close() - - move_matching_files(self.tmppath('foo/bar/'), - self.tmppath('foo/baz/'), - 'spam/.*\.so$') - - def tmppath(self, *path): - return os.path.join(self.tmpdir.name, *path) - - def test_moved_matching_file(self): - self.assertTrue(os.path.exists( - self.tmppath('foo/baz/a/b/c/spam/file.so'))) - - def test_left_non_matching_file(self): - self.assertTrue(os.path.exists( - self.tmppath('foo/bar/a/b/c/spam/file.py')))