The purpose of this document is to list all of the notable changes to this project. The format was inspired by Keep a Changelog. This project adheres to semantic versioning.
- Release 5.0 (2020-08-05)
- Release 4.0 (2020-08-04)
- Release 3.2 (2020-08-04)
- Release 3.1 (2020-08-04)
- Release 3.0.1 (2020-08-04)
- Release 3.0 (2020-08-04)
- Release 2.3 (2020-07-28)
- Release 2.2 (2020-07-28)
- Release 2.1.1 (2020-05-26)
- Release 2.1 (2018-12-16)
- Release 2.0 (2018-11-18)
- Release 1.1 (2018-02-24)
- Release 1.0 (2017-08-08)
- Release 0.25 (2017-05-23)
- Release 0.24.4 (2017-01-17)
- Release 0.24.3 (2016-04-15)
- Release 0.24.2 (2016-01-19)
- Release 0.24.1 (2015-09-24)
- Release 0.24 (2015-09-24)
- Release 0.23.2 (2015-09-04)
- Release 0.23.1 (2015-06-28)
- Release 0.23 (2015-04-22)
- Release 0.22 (2015-04-12)
- Release 0.21.1 (2015-04-05)
- Release 0.21 (2015-04-04)
- Release 0.20.11 (2015-03-18)
- Release 0.20.10 (2015-03-04)
- Release 0.20.9 (2015-03-04)
- Release 0.20.8 (2015-03-01)
- Release 0.20.7 (2015-03-01)
- Release 0.20.6 (2015-03-01)
- Release 0.20.5 (2015-02-27)
- Release 0.20.4 (2015-02-25)
- Release 0.20.3 (2014-12-09)
- Release 0.20.2 (2014-11-29)
- Release 0.20.1 (2014-11-28)
- Release 0.20 (2014-11-28)
- Release 0.19.1 (2014-11-18)
- Release 0.19 (2014-11-12)
- Release 0.18.9 (2014-11-09)
- Release 0.18.8 (2014-07-23)
- Release 0.18.7 (2014-07-15)
- Release 0.18.6 (2014-07-15)
- Release 0.18.5 (2014-07-15)
- Release 0.18.4 (2014-07-15)
- Release 0.18.3 (2014-07-15)
- Release 0.18.2 (2014-07-02)
- Release 0.18.1 (2014-06-27)
- Release 0.18 (2014-06-16)
- Release 0.17 (2014-06-07)
- Release 0.16 (2014-06-05)
- Release 0.15 (2014-06-01)
- Release 0.14.9 (2014-05-31)
- Release 0.14.8 (2014-05-26)
- Release 0.14.7 (2014-05-24)
- Release 0.14.6 (2014-05-24)
- Release 0.14.5 (2014-05-22)
- Release 0.14.4 (2014-05-16)
- Release 0.14.3 (2014-05-07)
- Release 0.14.2 (2014-05-07)
- Release 0.14.1 (2014-05-05)
- Release 0.14 (2014-05-05)
- Release 0.13.15 (2014-05-04)
- Release 0.13.14 (2014-05-03)
- Release 0.13.13 (2014-05-03)
- Release 0.13.12 (2014-04-23)
- Release 0.13.11 (2014-04-22)
- Release 0.13.10 (2014-04-11)
- Release 0.13.9 (2014-04-11)
- Release 0.13.8 (2014-04-11)
- Release 0.13.7 (2014-04-09)
- Release 0.13.6 (2014-04-09)
- Release 0.13.5 (2014-04-01)
- Release 0.13.4 (2014-03-31)
- Release 0.13.3 (2014-03-27)
- Release 0.13.2 (2014-03-20)
- Release 0.13.1 (2014-03-20)
- Release 0.13 (2014-03-20)
- Release 0.12.3 (2014-02-01)
- Release 0.12.2 (2014-01-30)
- Release 0.12.1 (2013-11-03)
- Release 0.12 (2013-11-03)
- Release 0.11.2 (2013-11-03)
- Release 0.11.1 (2013-11-03)
- Release 0.11 (2013-11-03)
- Release 0.10.8 (2013-11-03)
- Release 0.10.7 (2013-11-02)
- Release 0.10.6 (2013-11-02)
- Release 0.10.5 (2013-11-01)
- Release 0.10.4 (2013-10-22)
- Release 0.10.3 (2013-10-22)
- Release 0.10.2 (2013-10-21)
- Release 0.10.1 (2013-10-20)
- Release 0.10 (2013-10-20)
- Release 0.9.10 (2013-10-20)
- Release 0.9.9 (2013-10-20)
- Release 0.9.8 (2013-10-20)
- Release 0.9.7 (2013-10-20)
- Release 0.9.6 (2013-10-17)
- Release 0.9.5 (2013-10-12)
- Release 0.9.4 (2013-10-12)
- Release 0.9.3 (2013-10-12)
- Release 0.9.2 (2013-10-12)
- Release 0.9.1 (2013-10-12)
- Release 0.9 (2013-10-12)
- Release 0.8.6 (2013-09-29)
- Release 0.8.5 (2013-09-29)
- Release 0.8.4 (2013-09-14)
- Release 0.8.3 (2013-09-14)
- Release 0.8.2 (2013-08-13)
- Release 0.8.1 (2013-08-13)
- Release 0.8 (2013-08-13)
- Release 0.7.7 (2013-08-11)
- Release 0.7.6 (2013-08-11)
- Release 0.7.5 (2013-08-11)
- Release 0.7.4 (2013-08-11)
- Release 0.7.3 (2013-08-11)
- Release 0.7.2 (2013-08-07)
- Release 0.7.1 (2013-08-05)
- Release 0.7 (2013-07-23)
- Release 0.6.10 (2013-07-05)
- Release 0.6.9 (2013-06-27)
- Release 0.6.8 (2013-06-27)
- Release 0.6.7 (2013-06-27)
- Release 0.6.6 (2013-06-27)
- Release 0.6.5 (2013-06-26)
- Release 0.6.4 (2013-06-25)
- Release 0.6.2 (2013-06-25)
- Release 0.6.1 (2013-06-24)
- Release 0.6.0 (2013-06-24)
- Release 0.5.41 (2013-06-04)
- Release 0.5.40 (2013-06-04)
- Release 0.5.39 (2013-06-04)
- Release 0.5.38 (2013-06-04)
- Release 0.5.37 (2013-06-04)
- Release 0.5.36 (2013-05-30)
- Release 0.5.35 (2013-05-17)
- Release 0.5.34 (2013-05-17)
- Release 0.5.33 (2013-05-02)
- Release 0.5.32 (2013-05-02)
- Release 0.5.31 (2013-05-02)
- Release 0.5.30 (2013-05-02)
- Release 0.5.29 (2013-05-02)
- Release 0.5.28 (2013-05-02)
- Release 0.5.27 (2013-05-02)
- Release 0.5.26 (2013-05-01)
- Release 0.5.25 (2013-05-01)
- Release 0.5.24 (2013-05-01)
- Release 0.5.23 (2013-04-29)
- Release 0.5.22 (2013-04-29)
- Release 0.5.21 (2013-04-29)
- Release 0.5.20 (2013-04-29)
- Release 0.5.19 (2013-04-29)
- Release 0.5.18 (2013-04-29)
- Release 0.5.17 (2013-04-29)
- Release 0.5.16 (2013-04-29)
- Release 0.5.15 (2013-04-29)
- Release 0.5.14 (2013-04-29)
- Release 0.5.13 (2013-04-29)
- Release 0.5.12 (2013-04-25)
- Release 0.5.11 (2013-04-25)
- Release 0.5.10 (2013-04-25)
- Release 0.5.9 (2013-04-25)
- Release 0.5.8 (2013-04-25)
- Release 0.5.7 (2013-04-25)
- Release 0.5.6 (2013-04-25)
- Release 0.5.5 (2013-04-25)
- Release 0.5.4 (2013-04-25)
- Release 0.5.3 (2013-04-25)
- Release 0.5.2 (2013-04-25)
- Release 0.5.1 (2013-04-25)
- Release 0.5.0 (2013-04-24)
Release 5.0 (2020-08-05)
- Added support for :mod:`pkgutil` style namespace packages. This should be considered experimental because it hasn't seen any real world use yet.
- Explicitly documented Python compatibility in the readme (see also #17, #18, #27 and #31) to avoid more issues being reported about Python 3.8+ not being supported.
Release 4.0 (2020-08-04)
Note
While I don't consider this a major release feature wise, the major version number was bumped because this change is backwards incompatible (although clearly an improvement).
Merged pull request #22 to stop :pypi:`py2deb` from normalizing "local version labels" as defined by PEP 440. One important thing to note is that the "Debian revision" safe guard is applied after the "local version label" is restored, which means the "local version label" may not be the final part of the generated Debian version string.
Release 3.2 (2020-08-04)
Merged pull request #25 which adds support for the $DEBFULLNAME
and
$DEBEMAIL
environment variables to override package maintainer metadata.
Release 3.1 (2020-08-04)
Merged pull request #20 which adds a Provides
Debian control field for
converted packages that have "extras" encoded in their name.
One caveat to point out: Provides
is a second-class citizen in the Debian
packaging ecosystem in the sense that it satisfies only unversioned
relationships.
Nevertheless this may prove useful, so it was merged 🙂.
Release 3.0.1 (2020-08-04)
Release 3.0 was yanked from PyPI just minutes after uploading, because I
forgot to include a python_requires
definition in the setup.py
script,
which means Python 2.6 and 3.4 installations could end up downloading
incompatible :pypi:`py2deb` releases. This has since been added.
Release 3.0 (2020-08-04)
Note
While I don't consider this a major release feature wise, the major version number was bumped because of the compatibility changes (dropping 2.6 and 3.4).
Updated compatibility:
- PyPy 3 is now officially supported (and tested on Travis CI). This was triggered by pull requests #29 and #30.
- Python 2.6 and 3.4 are no longer supported (nor tested on Travis CI) following the same change in my other 20+ open source Python projects (some of which are requirements of :pypi:`py2deb`).
Project maintenance:
- Spent several days stabilizing the test suite on Travis CI, to avoid finding myself in a situation where I'm releasing new features without the safety net provided by a test suite that runs automatically and shouts loudly when breakage is found 😇.
- Spent several days getting PyPy 3 testing to work on Travis CI, due to fatal incompatibilities between the most recent release of :pypi:`pip` and PyPy 3. For more then you ever wanted to know consult these commits and the related Travis CI build failures (some of which are linked in commit messages).
- Updated some imports to be compatible with :pypi:`humanfriendly` 8.0.
Miscellaneous changes:
- Merged pull request #21 which fixes a typo in the hooks module.
Release 2.3 (2020-07-28)
Merged pull request #30:
- Added support
pypy3
in replacement hashbangs. - Added support for
pypy3
package name prefix.
Release 2.2 (2020-07-28)
Addded support for pypy3
hashbangs via pull request #29.
Release 2.1.1 (2020-05-26)
Defensively pin pip-accel requirement.
I intend to revive :pypi:`pip-accel` based on the latest :pypi:`pip` release, offering a minimal conceptual subset of previous functionality of pip-accel, just enough for py2deb to use for downloading and unpacking distribution archives.
However this will surely take some time to flesh out - possibly multiple releases of both projects. I'm not even sure yet what will be involved in getting pip-accel and py2deb running on the latest version of pip (I can however already tell that large architectural changes will be required in pip-accel and consequently also py2deb).
In the mean time I don't want any users (including my employer) run into breakage caused by this endeavor. Alpha / beta releases on PyPI should be able to avoid this problem, however I've never published those myself, so I'm opting for "defense in depth" 😇.
Release 2.1 (2018-12-16)
Enable optional backwards compatibility with the old version number conversion up to release 0.25 in which pre-release identifiers didn't receive any special treatment.
My reason for adding this backwards compatibility now is that it will allow me to upgrade py2deb on the build server of my employer to the latest version without being forced to switch to the new version number format at the same time. This simplifies the transition significantly.
Release 2.0 (2018-11-18)
New features:
- Added support for Python 3.7 🎉 (configured Travis CI to run the test suite on Python 3.7 and updated the project metadata and documentation).
- Added support for PyPy 🎉 (configured Travis CI to run the test suite on PyPy, changed the test suite to accommodate PyPy, fixed several incompatibilities in the code base, updated the project metadata and documentation).
- Make it possible for callers to change Lintian overrides embedded in the generated binary packages. Also, update the default overrides.
Bug fixes:
Make the default name prefix conditional on the Python version that's running py2deb (this is backwards incompatible although clearly the correct behavior):
- On PyPy the default name prefix is now
pypy
. - On Python 2 the default name prefix is still
python
. - On Python 3 the default name prefix is now
python3
.
The old behavior of using the
python
name prefix on Python 3 and PyPy was definitely wrong and quite likely could lead to serious breakage, but even so this change is of course backwards incompatible.- On PyPy the default name prefix is now
Don't raise an exception from
transform_version()
when a partial requirement set is converted using pip's--no-deps
command line option (this is a valid use case that should be supported).
Documentation changes:
- Added this changelog 🎉. The contents were generated by a Python script that collects tags and commit messages from the git repository. I manually summarized and converted the output to reStructuredText format (which was a whole lot work 😛).
- Changed the theme of the documentation from
classic
tonature
. The classic theme is heavily customized by Read the Docs whereas the nature theme more closely matches what is rendered locally by Sphinx versus what is rendered 'remotely' on Read the Docs. - Changed the location of the intersphinx mapping for setuptools (it now uses Read the Docs).
Internal improvements:
- Move the finding of shared object files and the 👨`dpkg-shlibdeps`
integration to :pypi:`deb-pkg-tools` (strictly speaking this is backwards
incompatible). This functionality originated in py2deb but since then I'd
wanted to reuse it outside of py2deb several times and so I eventually
reimplemented it in deb-pkg-tools. Switching to that implementation now made
sense (in order to reduce code duplication and simplify the py2deb code
base). Strictly speaking this is backwards incompatible because methods have
been removed but this only affects those who extend
PackageToConvert
which I don't expect anyone to have actually done 🙂. - Switched from :pypi:`cached-property` to :pypi:`property-manager`. The py2deb project comes from a time (2013) when Python descriptors were still magic to me and so I chose to use cached-property. However since then I created the property-manager project (2015). At this point in time (2018) several of the dependencies of py2deb (other projects of mine) already use property-manager and the integration of property-manager in py2deb can help to improve the project, so this seemed like the logical choice 😇.
Release 1.1 (2018-02-24)
- Add support for conditional dependencies via environment markers.
- Include the documentation in source distributions (the
*.tar.gz
files).
Release 1.0 (2017-08-08)
- Fixed issue #8: Support PEP 440 pre-release versions.
- Document Python 3.6 support, configure Travis CI to test Python 3.6.
- Merged pull request #11: Update comparison with fpm to remove invalid statement about the lack of support for converting multiple packages at once.
Since release 0.25 I've only made bug fixes (i.e. no features were added) however the change related to #8 is backwards incompatible, which is why I've decided to bump the major version number.
Release 0.25 (2017-05-23)
Make it possible to "replace" specific Python packages (installation
requirements) with a user defined system package using the new command line
option --use-system-package=PYTHON_PACKAGE_NAME,DEBIAN_PACKAGE_NAME
.
The package PYTHON_PACKAGE_NAME
will be excluded from the convertion
process. Converted packages that depended on PYTHON_PACKAGE_NAME
will have
their dependencies updated to refer to DEBIAN_PACKAGE_NAME
instead.
Release 0.24.4 (2017-01-17)
- Fixed a bug in
py2deb.utils.embed_install_prefix()
(reported in issue #9 and fixed in pull request #10) that accidentally truncated binary executables when using a custom installation prefix. - Fixed a broken import in the documentation (reported in issue #6).
- Added Python 3.5 to versions tested on Travis CI (but don't look
at the build logs just yet, for example Lintian complains with
python-module-in-wrong-location
, to be investigated if and how this can be 'improved'). - Improved
docs/conf.py
and addedhumanfriendly.sphinx
usage. - Refactored setup script (added docstring and classifiers) and
Makefile
and related files.
Release 0.24.3 (2016-04-15)
Refactor setup.py
script, improving Python 3 support:
- Counteract a possible
UnicodeDecodeError
whensetup.py
loadsREADME.rst
to populate thelong_description
field. - Could have fixed this with a two line diff, but noticed some other things I wanted to improve, so here we are 🙂.
Release 0.24.2 (2016-01-19)
Bug fix: Restore compatibility with latest coloredlogs (fixes #4).
Release 0.24.1 (2015-09-24)
Bug fix to restore Python 3 compatibility (execfile()
versus exec
).
Release 0.24 (2015-09-24)
Added support for Python callbacks that enable arbitrary manipulation during packaging.
Release 0.23.2 (2015-09-04)
- Strip trailing zeros in required versions when necessary (improves compatibility with :pypi:`pip`).
- Document ideas for future improvements.
Release 0.23.1 (2015-06-28)
Moved usage message munging to :pypi:`humanfriendly` package.
Release 0.23 (2015-04-22)
Make it possible to disable automatic Lintian checks.
Release 0.22 (2015-04-12)
Refactor maintainer scripts into a proper Python module:
The post-installation and pre-removal scripts that py2deb bundled with generated Debian packages were lacking functionality and were not easy to extend. I've now refactored these scripts into a Python module with proper coding standards (documentation, tests, readable and maintainable code) and some additional features:
- Robust support for pkg_resources-style namespace packages.
- Smart enough to clean up properly after PEP 3147 (>= Python 3.2).
Use :func:`executor.quote()` instead of :func:`pipes.quote()`.
Always clean up temporary directories created by :pypi:`pip` and :pypi:`pip-accel`.
Remove redundant temporary directory creation.
Release 0.21.1 (2015-04-05)
Update usage instructions in readme (and automate the process for the future).
Release 0.21 (2015-04-04)
Upgraded dependencies: :pypi:`pip-accel` 0.25 and :pypi:`pip` 6.
Release 0.20.11 (2015-03-18)
Switched to deb_pkg_tools.utils.find_debian_architecture()
.
Release 0.20.10 (2015-03-04)
Move control field override handling to separate, documented method.
Release 0.20.9 (2015-03-04)
Normalize package names during stdeb.cfg
parsing.
Release 0.20.8 (2015-03-01)
- Include a detailed comparison to :pypi:`stdeb`, dh-virtualenv and fpm in the documentation (for details see #1).
- Clarify in the readme that py2deb builds binary Debian packages and that Lintian is an optional dependency.
Release 0.20.7 (2015-03-01)
This was a "vanity release" that contained no code changes relevant to users: I'd finally gotten the full test suite to pass on Travis CI (see issue #3 for details) and I wanted to add badges to the readme 😇.
Release 0.20.6 (2015-03-01)
Improve PackageToConvert.determine_package_architecture()
.
In the previous release I added the armv6l
to armhf
mapping to
PackageConverter
and I just noticed that PackageToConvert
didn't
respect this change.
I'm not sure why PackageConverter
and PackageToConvert
both ended up
having separate ways to detect the current Debian architecture (I guess this
was left over from a previous refactoring) but clearly this logic should be
contained in a single place, not spread over multiple places like it was before
this change.
Release 0.20.5 (2015-02-27)
- Improved Python 3.4 compatibility, also bumped :pypi:`deb-pkg-tools` requirement to improve Python 3 compatibility.
- Replaced the use of
uname -m
withos.uname()
and added anarmv6l
toarmhf
mapping (to enable support for Raspbian). - Start running the test suite on Travis CI against Python 2.6, 2.7 and 3.4 and collect coverage statistics on Coveralls.
Release 0.20.4 (2015-02-25)
Give up on conversion of package descriptions using :pypi:`docutils`:
- It was always just a nice to have.
- I'm never going to get it working reliably.
- Right now it adds several "dead weight" dependencies (because the feature was disabled in release 0.18.6).
- This "dead code" was reducing test coverage.
This release was the first release to be published on PyPI.
Release 0.20.3 (2014-12-09)
Add a log message when the control field overrides file is not found.
Release 0.20.2 (2014-11-29)
Bug fix: Change initialization order.
Release 0.20.1 (2014-11-28)
Re-enable auto-install runtime/configuration option.
Release 0.20 (2014-11-28)
Upgraded to the newest :pypi:`pip-accel` (0.19.2).
Release 0.19.1 (2014-11-18)
- Moved :func:`~humanfriendly.coerce_boolean()` to the :pypi:`humanfriendly` package.
- Workaround for dependency specifications like
pytz > dev
.
Release 0.19 (2014-11-12)
Load configuration files and environment variables by default (with an escape hatch should it ever turn out to be problematic 😇).
Release 0.18.9 (2014-11-09)
Upgrade to :pypi:`pip-accel` 0.14.1.
Release 0.18.8 (2014-07-23)
Avoid Lintian complaining about debian-revision-should-not-be-zero
.
Release 0.18.7 (2014-07-15)
Bug fix for custom installation prefix embedding in executable scripts.
Release 0.18.6 (2014-07-15)
Disable package description conversion until I find out what's wrong with it:
- Starting from release 0.16 py2deb would use :pypi:`docutils` to convert the
long_description
of each Python package to HTML which was then translated to plain text in order to generate a readme text that was embedded in the metadata of the binary package. - However lots of packages on PyPI (including mine) automatically embed their
README.rst
as thelong_description
in thesetup.py
script, making for rather complex documents to transform. - This interaction caused "Unable to parse package file" warnings from
apt-get
during installation of packages (given input packages with complex enough long descriptions).
Given that this was a "nice to have" and I had more important things on my plate I decided to just disable this feature for now.
Release 0.18.5 (2014-07-15)
Bug fix: Make sure the "Debian revision" part of converted version numbers contains a digit.
Release 0.18.4 (2014-07-15)
Bug fix: Tildes in Debian binary package versions considered harmful!
Because of the special semantics of ~
in Debian binary pakcage versions
I've decided to switch from ~
to -
as the separator between tokens in
the version string.
About those special semantics:
$ dpkg --compare-versions '0.21.1~paylogic' '>=' '0.21.1'; echo $? 1 $ dpkg --compare-versions '0.21.1~paylogic' '>=' '0.21.1'; echo $? 1 $ dpkg --compare-versions '0.21.1-paylogic' '>=' '0.21.1'; echo $? 0 $ dpkg --compare-versions '0.21.1-paylogic-0' '>=' '0.21.1'; echo $? 0
Release 0.18.3 (2014-07-15)
Bug fix: Cleanup temporary source directories.
These are created when you tell :pypi:`pip` to install from a directory
containing an unpacked source distribution: pip copies the complete directory
to /tmp
before doing anything with it, but because this directory cannot be
set using --build-directory
py2deb never cleaned up directories created in
this manner.
Release 0.18.2 (2014-07-02)
Automatically add the Vcs-Hg
control field when possible.
This works by parsing the .hg_archival.txt
file generated by the hg
archive
command so for now this only supports Python source distributions
exported from Mercurial repositories.
Release 0.18.1 (2014-06-27)
This release consists of more than 10 commits that were part of an effort to prepare the py2deb project for open sourcing under the name of Paylogic. Here's a short summary:
- Bumped :pypi:`pip-accel` requirement (to pull in an upstream bug fix) and minor changes to be compatible with the new version.
- Support for default configuration files (
/etc/py2deb.ini
and~/.py2deb.ini
). - Don't copy files during builds (performance optimization).
- Add logging in order to debug handling of postinst/prerm scripts.
- Explicitly iterate postinst/prerm scripts (explicit is better than implicit).
- Bug fix: Include postinst/prerm scripts during installation!
- Bug fix: Reformat version strings to comply with Debian policy manual.
- Make
converter.convert()
return list of generated package archives. - Check for duplicate files in converted dependency sets.
- Improved the documentation.
Release 0.18 (2014-06-16)
This release consists of about 15 commits that were part of an effort to prepare the py2deb project for open sourcing under the name of Paylogic. Here's a short summary:
- Support for environment variables.
- Make py2deb compatible with Python 3.4.
- Explicitly document that py2deb invokes pip.
- Improve :attr:`.PackageToConvert.python_requirements`.
- Improve :attr:`.PackageToConvert.debian_dependencies`.
- Rename
find_package()
toget_package()
. - Rename
find_python_version()
topython_version()
. - Improve
compact_repeating_words()
. - Add comparison between py2deb and :pypi:`stdeb` to readme.
- Bring test coverage up to 92%.
Release 0.17 (2014-06-07)
This release consists of almost 50 commits that were part of an effort to prepare the py2deb project for open sourcing under the name of Paylogic. Here's a short summary:
- Implemented PEP-8 and PEP-257 compatibility and code style checks.
- Implemented
--report-dependencies
option. - Encode Python requirement 'extras' in Debian package names.
- Document the
--
trick in the usage message. - Document several missing installation requirements.
- Restore compatibility with
stdeb.cfg
configuration files (for now there's no reason not to use the same file, since the file serves the exact same purpose - if and when I need non-compatible behavior I can switch to or addpy2deb.cfg
support). - Bug fix: Don't move generated archives if already in target directory.
- Big refactoring: Split main module into several sub modules.
- Significantly improve test coverage.
- Enable Sphinx viewcode extension.
Release 0.16 (2014-06-05)
Remove the :pypi:`stdeb` backend and focus fully on the :pypi:`pip-accel` backend:
I don't need something that's refined and elegant but only supports a subset of packages (:pypi:`stdeb`).
I see stdeb as the more idealistic choice.
What I need instead is something that supports all or most packages, and when it does, then it doesn't matter if the way in which it works isn't the most elegant way to do things.
I see the :pypi:`pip-accel` backend as the pragmatic choice.
Release 0.15 (2014-06-01)
Abusing 👨`update-alternatives` for fun and profit?
This makes it possible to create a package with an isolated installation prefix
that nevertheless installs global executables in the default executable search
path ($PATH
).
Release 0.14.9 (2014-05-31)
- Update dependencies.
- Update tests to use new version of :pypi:`deb-pkg-tools` (including support for relationship parsing and matching).
- Bug fix: Exclude other architectures from
*.deb
filename matching.
Release 0.14.8 (2014-05-26)
- Rename
packages_to_rename
→name_mapping
. - Update requirements (:pypi:`python-debian` 0.1.21-nmu2 for Python 3.x compatibility).
- Replace configuration (global state) with function arguments (local state).
Release 0.14.7 (2014-05-24)
Bug fix for last commit.
Release 0.14.6 (2014-05-24)
Don't implicitly forbid automatic installation by :pypi:`pip-accel`.
Release 0.14.5 (2014-05-22)
- Moved
package_name_from_filename()
to :func:`deb_pkg_tools.package.parse_filename()`. - Fix non fatal bug in logger format string.
Release 0.14.4 (2014-05-16)
Implement py2deb --inject-deps=CTRL_FILE
option.
Release 0.14.3 (2014-05-07)
- Implement
--no-name-prefix=PKG
option, use it in the automated tests. - Test conversion of isolated packages and the
--rename=FROM,TO
option.
Release 0.14.2 (2014-05-07)
- Bug fixes for
--rename=FROM,TO
functionality. - Bug fix for stdeb backend.
- Start writing new tests that cover both backends.
- Start using Sphinx for documentation.
- Add a test involving a package with Python dependencies as well as system
dependencies (
stdeb.cfg
).
Release 0.14.1 (2014-05-05)
Bug fix for py2deb.util.apply_script()
.
Release 0.14 (2014-05-05)
Introduce the --rename=FROM,TO
option to make things more robust.
Release 0.13.15 (2014-05-04)
Switch from deb_pkg_tools.utils.execute()
to :func:`executor.execute()`
(today I decided to extract this functionality into a separate package called
:pypi:`executor`).
Release 0.13.14 (2014-05-03)
Support for default configuration files (~/.py2deb.ini
and /etc/py2deb.ini
).
Release 0.13.13 (2014-05-03)
Support for environment variables ($PY2DEB_CONFIG
, $PY2DEB_REPO
and
$PY2DEB_VERBOSE
).
Release 0.13.12 (2014-04-23)
Check command line options for non-empty arguments (feedback from Bart :-).
Release 0.13.11 (2014-04-22)
Ignore overridden Debian package names when building isolated packages.
Release 0.13.10 (2014-04-11)
- Don't make the post-installation script error out on syntax errors reported by :mod:`py_compile`.
- Bug fix for
apply-script
command in :pypi:`pip-accel` backend.
Release 0.13.9 (2014-04-11)
Bug fix for order of unpack/apply script/cleanup commands in :pypi:`pip-accel` backend.
Release 0.13.8 (2014-04-11)
- Use :func:`deb_pkg_tools.package.clean_package_tree()` in :pypi:`pip-accel` backend.
- Move
apply_script()
to common code, call it from both backends - Move sanity checking from :pypi:`stdeb` backend to common code.
Release 0.13.7 (2014-04-09)
Bug fix: Never use the root logger.
Release 0.13.6 (2014-04-09)
Bug fix: Remove output redirection, change --print-deps
to --report-deps=PATH
.
Release 0.13.5 (2014-04-01)
Bug fix: Don't patch control files of isolated packages.
Release 0.13.4 (2014-03-31)
Bug fix: Move output redirection to main()
function (where it belongs).
Release 0.13.3 (2014-03-27)
Reset primary package name when building name/install prefixed packages.
Release 0.13.2 (2014-03-20)
Cleanup handling & documentation of command line arguments.
Release 0.13.1 (2014-03-20)
Add a post-installation script to generate *.pyc
files.
Release 0.13 (2014-03-20)
Initial support for isolated packages (not in the default :data:`sys.path`).
Release 0.12.3 (2014-02-01)
Bump :pypi:`pip-accel` requirement (another upstream bug fixed).
Release 0.12.2 (2014-01-30)
Bump :pypi:`pip-accel` requirement (upstream bug fixed).
Release 0.12.1 (2013-11-03)
Bug fix: Don't fail when a PKG-INFO
file can't be parsed.
Release 0.12 (2013-11-03)
Improve the :pypi:`pip-accel` backend (use a prerm
script to cleanup left over byte code files).
Release 0.11.2 (2013-11-03)
Improve the :pypi:`pip-accel` backend (the maintainer field is now preserved).
Release 0.11.1 (2013-11-03)
Improve logging of :pypi:`pip-accel` backend.
Release 0.11 (2013-11-03)
- Improve the :pypi:`pip-accel` backend (for example it now respects
stdeb.cfg
). - Move generation of tagged descriptions to common function.
- Make Python >= 2.6 dependency explicit in
stdeb.cfg
.
Release 0.10.8 (2013-11-03)
- Add a test case for converting packages with dependencies on replacements.
- Increase the verbosity of the :pypi:`stdeb` logger.
Release 0.10.7 (2013-11-02)
Bug fix: Properly convert dependencies on packages with replacements (and add a test case for converting packages with dependencies).
Release 0.10.6 (2013-11-02)
- Bug fix: Make
convert()
report direct dependencies but not transitive ones. - Add a first test case to the test suite, use
py.test
to run it.
Release 0.10.5 (2013-11-01)
- Bug fix for logging in
py2deb.backends.stdeb_backend.patch_control()
. - Add
make reset
target to (re)create virtual environment
Release 0.10.4 (2013-10-22)
Bug fix for :pypi:`pip-accel` backend (fallback on e.g. Jaunty and Karmic) by
rewriting /site-packages/
to /dist-packages/
.
Release 0.10.3 (2013-10-22)
Remove automatic dependency installation (way too much magic, a silly idea in retrospect).
Release 0.10.2 (2013-10-21)
Add a missing Debian dependency: python-setuptools
.
Release 0.10.1 (2013-10-20)
Bug fix for last commit.
Release 0.10 (2013-10-20)
Fall back to alternative backend when requested backend fails.
Release 0.9.10 (2013-10-20)
Enable compatiblity with Ubuntu 9.04 (Jaunty) by changing from
sort --version-sort
to sort --general-numeric-sort
.
Release 0.9.9 (2013-10-20)
Bug fix: Don't assume iterable arguments are lists (they might be tuples).
Release 0.9.8 (2013-10-20)
Fix recursive import error between __init__.py
and bootstrap.py
.
Release 0.9.7 (2013-10-20)
Automatic installation of required system packages.
Release 0.9.6 (2013-10-17)
Bug fix: Send the output of Lintian to stderr! (otherwise --print-deps
is broken)
Release 0.9.5 (2013-10-12)
Bump some requirements.
Release 0.9.4 (2013-10-12)
Bug fix for py2deb.bootstrap.install()
.
Release 0.9.3 (2013-10-12)
Bug fix for py2deb.converter.convert()
.
Release 0.9.2 (2013-10-12)
Bug fix for py2deb --install
.
Release 0.9.1 (2013-10-12)
Bug fix for broken import.
Release 0.9 (2013-10-12)
- Created a shell script that uses magic in :pypi:`deb-pkg-tools` to convert
py2deb using itself and install the resulting
*.deb
packages on the local system. This shell script was then converted to Python and is available from the command line interface usingpy2deb --install
. - Bug fix: Don't error out when repository directory matches archive directory.
Release 0.8.6 (2013-09-29)
Make it simpler to call py2deb from Python (by moving logic
from py2deb.main()
to py2deb.converter.convert()
).
Release 0.8.5 (2013-09-29)
Cleanup handling of logging.
Release 0.8.4 (2013-09-14)
Be compatible with upstream Debianized packages (e.g. Kazoo).
Release 0.8.3 (2013-09-14)
Process required packages in alphabetical sort order.
Release 0.8.2 (2013-08-13)
Improved decision process for choosing :pypi:`stdeb` version:
And here's for a very peculiar bug fix... I was trying to convert PyXML 0.8.4 to a Debian package and the setup.py script kept failing with
error: invalid command 'debianize'
. After much digging:py2deb runs
python setup.py --command-packages=stdeb.command debianize
which implies thatfrom stdeb.command import debianize
is run.import stdeb
actually imports the module bundled with py2deb (which automatically pick the right version of stdeb for the current platform) and this module imported py2deb -> pip-accel -> pip -> html5lib (bundled with pip) which then blows up with:>>> import xml.etree.ElementTree as default_etree ImportError: No module named etree.ElementTree
Turns out PyXML 0.8.4 indeed contains an
xml
module... This all happens because Python implicitly imports from the current working directory before the rest of the entries in :data:`sys.path` and PyXML actually depends on this; take a look at thesetup.py
script.
Lesson learned: I guess it's wise to restrict our bundled fake stdeb module to standard library module imports :-).
Improved
py2deb.util.patch_control_file()
.
Release 0.8.1 (2013-08-13)
- Implement control overrides for :pypi:`pip-accel` backend (also: refactor configuration handling).
- Make it possible to override individual Debian package names.
- Backends shouldn't know about "replacements".
Release 0.8 (2013-08-13)
Start work on a backend using :pypi:`pip-accel` instead of :pypi:`stdeb`:
- After working with stdeb for over four months it had become painfully clear that it would never be able to convert the huge dependency trees I had in mind for it because it was simply way too fragile.
- At the same time I knew from working on pip-accel that
python setup.py bdist
was much more reliable / robust and gave usable results, even if completely specific to the major and minor version of the running Python interpreter.
This is how I decided to start working on an alternative package conversion backend for py2deb.
Release 0.7.7 (2013-08-11)
- Remove reference to :pypi:`stdeb` from
py2deb.ini
(bundled with py2deb anyway). - Log external command execution.
- Fix copy/paste error in
setup.py
. - Improve :pypi:`stdeb` version selection.
Release 0.7.6 (2013-08-11)
Use :func:`coloredlogs.increase_verbosity()` (always keep logger at full verbosity).
Release 0.7.5 (2013-08-11)
- Start using :func:`deb_pkg_tools.package.clean_package_tree()`.
- Add
README
andLICENSE
toMANIFEST.in
.
Release 0.7.4 (2013-08-11)
Compatibility with :pypi:`pip-accel` 0.9.4.
Release 0.7.3 (2013-08-11)
Improve the setup.py
script and move the installation requirements to a
separate requirements.txt
file.
Release 0.7.2 (2013-08-07)
Tweak the requirements.
Release 0.7.1 (2013-08-05)
- Compatibility with the latest version of :pypi:`pip-accel` (0.9.12).
- Compatibility with the latest version of :pypi:`deb-pkg-tools`.
- Restore release tag in pinned versions only.
- Abuse "Description" field to advertise py2deb.
- Make
py2deb -v
implyDH_VERBOSE=1
(pass verbosity to debian-helper scripts).
Release 0.7 (2013-07-23)
This is a snapshot in the middle of a big refactoring...
I'd love to use py2deb in a dozen places but was blocked from doing so because of a handful of unrelated issues that remained to be solved. After lots of testing, failed attempts and frustration I now have something that seems to work (although I have to clean it up and there are still some minor issues that I'm aware of):
My original goal with py2deb was to use two name spaces for the names of generated packages: The real name space
pl-python-...
would be very explicit but dependencies would refer to virtual packages namedpython-...
. Then thepl-python-...
packages could haveProvides:
fields giving thepython-...
names.It turns out this cannot work the way I want it to; virtual packages are second class citizens in Debian :-(. AFAICT the only way to get everything working properly is to just use the
python-...
name space directly, so that's what the new code is slowly working towards.Merging of control files was not working properly, however some months ago (I think before py2deb was born) I wrote my own control file merger. I've now extracted that from the project where it originated and moved it to a package called :pypi:`deb-pkg-tools`, which hasn't been released yet but will be soon. py2deb now uses deb-pkg-tools to patch/merge control files.
The Python
==
version matching operator was copied verbatim to the Debian control files which is invalid. This is now fixed.:pypi:`stdeb` 0.6.0 is required on Ubuntu 10.04, stdeb 0.6.0+git is required on Ubuntu 12.04, however stdeb 0.6.0+git hasn't been released yet. Also Python nor Debian can simply/elegantly express this very explicit distinction between stdeb versions and Ubuntu distributions. The only remaining way to keep my sanity was to bundle both versions of stdeb inside py2deb.
TODO: Add READMEs, LICENSEs.
Lots of changes to logging including the version of :pypi:`coloredlogs` and the introduction of separate loggers for separate modules.
Lots of moving around with code and responsibilities while I tried to make sense of the way py2deb should and could work.
Release 0.6.10 (2013-07-05)
- Replace nasty rules file patching with an environment variable
- Improved the README.
Release 0.6.9 (2013-06-27)
Minor changes to logging output (changed severity levels + made logger name visible).
Release 0.6.8 (2013-06-27)
Make it possible to set the repository directory as a command line option.
Release 0.6.7 (2013-06-27)
Sneaking in a minor bug fix.
Release 0.6.6 (2013-06-27)
Redirect pip's output to stderr.
Release 0.6.5 (2013-06-26)
- Updated README.
- Return of the sanity_check
Release 0.6.4 (2013-06-25)
- Will now correctly remove the script field.
- Fixed dependency issues.
Release 0.6.2 (2013-06-25)
Temporarily removed sanity checking.
Release 0.6.1 (2013-06-24)
Added sanity check on dependencies using :pypi:`pip-accel`.
Release 0.6.0 (2013-06-24)
- Moved and rewrote converter, package, util to reflect changes to the cli.
- Fixed check on returncodes from subprocesses.
- Overhauled command line options.
- Changed verbosity option.
- Renamed
control.ini
.
Release 0.5.41 (2013-06-04)
Try to deal better with packages that have Debian replacements.
Release 0.5.40 (2013-06-04)
Deal with the python-imaging vs. pil vs. pillow mess 😞.
Release 0.5.39 (2013-06-04)
Added pil
to control.ini
.
Release 0.5.38 (2013-06-04)
Lots of changes to deal with the whole setuptools/distribute contraption...
Release 0.5.37 (2013-06-04)
Added :pypi:`Pillow` conflict with python-imaging
to control.ini
.
Release 0.5.36 (2013-05-30)
- Mark the
python-support
package as a requirement of py2deb in the configuration file. - Added the command line option
-d
,--no-deps
to ignore dependencies.
Release 0.5.35 (2013-05-17)
Raise an exception if there is no dependency file to recall.
Release 0.5.34 (2013-05-17)
Properly integrate :pypi:`pip-accel` 0.8.5 into py2deb and remove the embedded (and simplified) variant of pip-accel from the py2deb code base.
Release 0.5.33 (2013-05-02)
Workaround :pypi:`Fabric` bundling :pypi:`Paramiko`.
Release 0.5.32 (2013-05-02)
Bug fix: Requirement instance has no attribute 'specs'.
Release 0.5.31 (2013-05-02)
Remove confusion about py2deb.package.Requirement
versus
pkg_resources.Requirement
.
Release 0.5.30 (2013-05-02)
- Rename
[replace_dependencies]
section to[replacements]
. - Add
[replacements]
workarounds for specific packages to the configuration file. - Don't translate replacement package names.
Release 0.5.29 (2013-05-02)
Make pinned Debian dependencies explicit.
Release 0.5.28 (2013-05-02)
Change the location of the default repository when running as root
.
Release 0.5.27 (2013-05-02)
- Pinned version of :pypi:`python-debian`.
- Support for "replacing" dependencies (for example :pypi:`setuptools` versus :pypi:`distribute`).
- Lots of changes and improvements to dependency/requirement handling.
Release 0.5.26 (2013-05-01)
Incorporate release numbers in pinned versions (without this, pl-py2deb
--recall
reports invalid versions).
Release 0.5.25 (2013-05-01)
- Make it possible to persist and recall Debianized dependencies.
- Add a simple command line interface.
- Place built packages in
/tmp
if user is notroot
. - Make sure
python setup.py debianize
runs inside the virtual environment.
Release 0.5.24 (2013-05-01)
Report dependencies as well as required versions.
Release 0.5.23 (2013-04-29)
Another bug fix.
Release 0.5.22 (2013-04-29)
Another bug fix.
Release 0.5.21 (2013-04-29)
Another bug fix.
Release 0.5.20 (2013-04-29)
Sorry, forgot to call the function...
Release 0.5.19 (2013-04-29)
Bug fix for previous release.
Release 0.5.18 (2013-04-29)
Bug fix for dependency introspection.
Release 0.5.17 (2013-04-29)
Remove merge_dicts
usage.
Release 0.5.16 (2013-04-29)
Don't print empty Depends:
fields.
Release 0.5.15 (2013-04-29)
Bug fix for deb822 usage (merge_fields
doesn't work if you start with an
empty field).
Release 0.5.14 (2013-04-29)
Bug fix for release 0.5.13.
Release 0.5.13 (2013-04-29)
Print the Depends:
fields of built packages.
Release 0.5.12 (2013-04-25)
Code style noise.
Release 0.5.11 (2013-04-25)
Bug fix: Use pkg_resources.Requirement.parse()
to properly parse
requirement expressions.
Release 0.5.10 (2013-04-25)
Don't silence the output of 👨`dpkg-buildpackage`.
Release 0.5.9 (2013-04-25)
- Ignore GPG signing when building packages.
- Don't cleanup build directory on exceptions (allows post-mortem debugging).
- Added a readme and todo list.
Release 0.5.8 (2013-04-25)
Yet another bug fix for release 0.5.5...
Release 0.5.7 (2013-04-25)
Another bug fix for release 0.5.5.
Release 0.5.6 (2013-04-25)
Bug fix for release 0.5.5.
Release 0.5.5 (2013-04-25)
Fixes for installation of global build dependencies.
Release 0.5.4 (2013-04-25)
Don't silence the output of 👨`apt-get` when installing build dependencies.
Release 0.5.3 (2013-04-25)
Use system wide :pypi:`pip-accel` cache directories when running as root
.
Release 0.5.2 (2013-04-25)
Add dependency on :pypi:`chardet` which is imported by :pypi:`python-debian` but not included in its installation requirements.
Release 0.5.1 (2013-04-25)
Properly nest all Python modules under
pydeb.*
namespace.Renamed command line entry point from
py2deb
topl-py2deb
.Context: py2deb is developed at Paylogic where a lot of our internal command line tools use the
pl-*
namespace inspired by themk-*
/pt-*
namespace that Percona Toolkit uses.
Release 0.5.0 (2013-04-24)
The initial release, very much a rough work in progress 😇.
The py2deb project was kicked off by Arjan, an intern at Paylogic at the time, in collaboration with Peter (who guided Arjan's internship). The abstract idea that we set out to create was as follows:
- Use :pypi:`pip` to download a Python package from PyPI and recursively gather installation requirements until we can satisfy all dependencies.
- Use :pypi:`stdeb` to batch convert all of the downloaded Python packages to Debian packages.