For a while I've been trying to find the best way to package a python app as a debian file that I can distribute for installing on Ubuntu.
I also didn't necessarily want to rely on the python packages that are distributed with the system because with python you tend to get used to having the latest packages installed through pip.
Then I found dh-virtualenv which is a very neat way of packaging python into debs with the key advantage that these apps are packaged as a virtualenv so that the latest packages can be included without relying on the packages on the system... But system packages can also be used.
This includes all the files necessary to package the example as a deb, where the app we are building into a python package is contained in a single file:
ExImView/image_app.py
Setup for ubuntu 14.04
A few packages are required for building packages (let me know if more are required)
- Install the python development packages
sudo apt-get install python-dev git
- Create a virtualenv (so that the latest pip and setuptools can be install and activate)
virtualenv virt-example
source ~/virt-example/bin/activate
- Install the latest dh-virtualenv from source as discussed in step 1 of the dh-virtualenv instructions
Build the example debian package of the GUI
Download the example
git clone https://github.com/benjaminirving/python-debian-packaging-example.git
cd python-debian-packaging-example
dpkg-buildpackage -us -uc -b
Screenshots
The newly created debian package can be installed as you would any other package
[Obviously this is just an illustrative example so make sure that the installed files don't overwrite any existing applications. But I wouldn't expect anything to be called eximview or eximview2]
The package now show up in search, can be added to the dock, and includes an icon
Explanations of the packaging files
The key to packaging are the files in the debian folder, which is where the debian packaging and dh-virtualenv settings are contained.
The dh-virtualenv documentation does a very good job at explaining the following files:
debian/compat
debian/control
debian/changelog
debian/rules
debian/«pkgname».triggers
I'll explain the following files that turn this package into a GUI script
debian/ExImView.desktop
This file specifies the desktop entry once installed on the system. Modify appropriately.
debian/install
This script is used to copy the .desktop entry, the icon and a bask script to run the app into the appropriate system folders.
debian/rules
eximview2
This is the script that is copied to usr/bin and basically runs the app in the virtualenv that has been created by the deb install.
This is the script that is copied to usr/bin and basically runs the app in the virtualenv that has been created by the deb install.
setup.py
A standard setup.py file is also used. At the bottom of the script an entry point is added, which creates an executable in the virtualenv that is called by the script copied to /usr/bin. This is the best way I could think to link it but there might be better options.
Notes
Note that this example doesn't take advantage of the main use of dh-virtualenv, which is packaging the latest dependencies with the app. But this can be done trivially by adding them to the requirements.txt file as explained in the dh-virtualenv documentation.Please suggest changes that improve this example