Changes between Version 6 and Version 7 of TalkPackaging


Ignore:
Timestamp:
Mar 13, 2010, 1:35:36 PM (14 years ago)
Author:
davidf
Comment:

Added some notes from Stefano's talk

Legend:

Unmodified
Added
Removed
Modified
  • TalkPackaging

    v6 v7  
    124124 * Beware of dependencies from `setup.py` - somebody may be trying to do something that doesn't need the dependency, so trap `ImportError`s etc
    125125
     126== Debian Packaging ==
     127
     128[http://tumbleweed.org.za/ tumbleweed]'s talk on building debian packages:
     129
     130 * Package your source up nicely using `sdist`
     131 * Things get named `name_version.orig.tar.gz`
     132 * Unpack the source distribution, and run `dh_make`
     133 * Look through the different example files that are produced:
     134   * There are loads of them, you don't have to use all of them
     135   * `debian/control` tells what different packages should be produced
     136     * You can have separate `binary` and `source` files
     137   * `debian/copyright` is important to signal the licenses etc, following Debian rules
     138   * `debian/rules` is a makefile that generates a deb
     139     * It's a lot of work to write all the rules, so there are a lot of helper tools
     140     * This used to involve lots of separate build steps
     141     * debhelper 7 is the way to go nowadays... Now you just use `dh`:
     142{{{
     143
     144#!/usr/bin/make -f
     145
     146%:
     147        dh %
     148}}}
     149     * You can have pre- and post- install scripts
     150   * For a python package, you just need a few files (those mentioned above)
     151   * `dch` lets you edit `debian/changelog`
     152   * To install scripts, create a little script that loads the module (`debian/hellopy`) and add the instruction to install in `debian/install`: `debian/hellopy /usr/bin`
     153   * Call the package `python-$libname` to follow convention
     154   * `Architecture`: `any` means build on every architecture; `all` means just build one package for all libraries
     155   * `Description` - first line is summary, the rest is detail
     156   * Format is the same as email: To continue on a new line, put a space as the first character; for a blank line use `<space><dot>` like so: ` .`
     157   * `XS-Python-Version`: You can set this to `all` or limit to greater than `2.5` etc
     158   * `Depends`: calls the macro `${python_Depends}`
     159 * There are two competing ways to do python dependencies on debian: `python-central` and `python-support`
     160   * `python-central` is maintained by the Python maintainer, used by 10-20% of the packages.
     161   * `python-support` is much more popular, and the maintainer is more reactive. Integrates nicely with `debhelper 7`
     162   * Specify `Build-Depends: debhelper (>= 7), python-support`
     163 * Patching the source directly is frowned upon, there are systems for managing patches
     164   * Put `3.0 (quilt)` in `debian/source/format` and then you can use `quilt` to maintain patches
     165 * Then you build with `debuild`:
     166   * Your package should automatically clean everything it creates - `clean` gets run before `build`
     167   * Everything gets installed under a fake root, so you need to specify anything that your build requires
     168   * `debc` lists the contents of the deb file
     169 * Then you install...
     170   * As you install, `python-support` will automatically byte compile your python code for you by calling `update-python-modules`
     171   * `/usr/lib/pymodules/python2.x` contains symlinks to the original code under `/usr/share/pyshared/` as well as the byte-compiled files for that version
     172   * Extensions go into `/usr/lib/python-support/python-$libname/python2.x/`
     173   * These symlinks and byte-compiled files aren't actually owned by the package, but will be regenerated/cleaned up if you run `update-python-modules` for that package again
     174
    126175== Future of Python packaging ==
    127176