Distributing Python Scripts - the Batchtraveller.app

Reading time ~3 minutes

[en]This is a short intro on how Python-scripts can be packaged into an easy to distribute mac-app.

Essentially I followed two tutorials. The first on how to turn your python script into a self-contained app, the second on how to make compressed diskimages for mac. The final result aswell as the files necessary to reproduce the steps can be downloaded here. A detailed desription can be found in the remainder of this post.

0. Make a nice skript

I used my previous python skript that batch-queries google maps to gather distances and travel times between a start and an end-address. I added two guis one that asks for the input file and one that asks for the location where results should be stored.

1. Use py2app to compile the binary

The package py2app (install/upgrade with “easy_install -U py2app”) is a package that automatically gathers all necessary packages and builds an app. It is employed in two steps:

1.1. Make a setup.py file:

This can be done with the following command:

<blockquote>py2applet --make-setup Batchtraveller.py</blockquote>

#As mine resulted in an errors, I had to add the option argv_emulation: False.
<blockquote>"""
This is a setup.py script generated by py2applet

Usage:
python setup.py py2app
"""

from setuptools import setup

APP = ['Batchtraveller.py']
DATA_FILES = []
<strong>OPTIONS = {'argv_emulation': False}</strong>

setup(
app=APP,
data_files=DATA_FILES,
options={'py2app': OPTIONS},
setup_requires=['py2app'],
)</blockquote>

1.2. Build the app:

To build the app (with a nice icon), the following command was used:

python setup.py py2app --iconfile browser.icns

This results in two new folders “built” and “dist”, the latter of which contains the Batchtraveller.app.

2. Make a “standard” compressed *.dmg

Instead of just giving the application away, I wanted to make a compressed diskimage, that contains the file, the licence-information and a shortcut to the applications directory. So here is what I did.

  1. I made a new diskimage of roughly the same size as the files using the Mac Disk Utility.

  2. Then I copied the *.app and licence.txt files into the disk image, and made a shortcut to the Applications directory.

  3. I used the Disk Utility again to convert the diskimage to a compressed dmg.[/en]

[de]Dies ist eine kurze Einführung bezüglich der Frage, wie Python-Scripts in einer verteilende Mac-App präsentiert werden können.

Im Wesentlichen habe ich mich an zwei Übungen orientiert. Die erste (first) bezüglich wie man ein Python-Script in eine eigenständige App wandelt und die Zweite (second) bezüglich wie komprimierte Disk-Images für Mac hergestellt werden. Die Ergebnisse sowie die Dateien, die zur Reproduzierung der Schritte nötig sind, können here heruntergeladen werden. Eine detaillierte Beschreibung kann im Rest dieses Posts gefunden werden.

0. Erstelle ein schönes Skript

Ich habe mein previous python -Skript genutzt, welches google maps batchs abfragt, um Abstände und Reisezeit zwischen einem Start- und Zielpunkt zu erfassen. Ich fügte zwei GUIs hinzu, eins fragt nach der Input-Datei und eins nach dem Ort, in dem die Ergebnisse gespeichert werden sollen.

1. Nutze py2app um die Binary zu übersetzen

Das Paket py2app (install/upgrade with “easy_install -U py2app”) ist ein Paket, welches automatisch alle nötigen Pakete sammelt und eine App erstellt. Es ist in zwei Schritten tätig:

1.1. Erstelle eine setup.py Datei:

Das kann mit folgendem Befehl realisiert werden:

py2applet --make-setup Batchtraveller.py

Da meins in Fehlern resultierte, musste ich die Option argv_emulation: False. hinzufügen

""" This is a setup.py script generated by py2applet Usage: python setup.py py2app """ from setuptools import setup APP = ['Batchtraveller.py'] DATA_FILES = [] **OPTIONS = {'argv_emulation': False}** setup( app=APP, data_files=DATA_FILES, options={'py2app': OPTIONS}, setup_requires=['py2app'], )

1.2. Erstellen der App:

Um die App (mit einem netten Icon) zu erstellen, wurde der folgende Befehl genutzt:

python setup.py py2app --iconfile browser.icns

Das resultierte in zwei neuen Ordnern “built” und “dist”, der letztere enthält die Batchtraveller.app.

2. Mach eine “standard” komprimierte *.dmg

Anstelle des einfachen Herausgeben der App wollte ich ein komprimiertes Disk-Image machen, welches die Datei, die Lizenzinformation und eine Abkürzung zum Apps-Verzeichnis enthält. Hier ist, was ich gemacht habe:

  1. Ich habe ein neues Disk-Image erstellt, mit ungefähr der gleichen Größe wie die Datei, welche Mac Disk Utility nutzt.

  2. Anschließend habe ich die *.app und die licence.txt-Datei ins Disk-Image kopiert und eine Abkürzung zum Apps-Verzeichnis erstellt.

  3. Ich habe die Disk Utility erneut genutzt, um das Disk-Image in eine komprimierte dmg zu konvertieren.[/de]

The world is flat F(1,18) = 39.200; p = .335 - or p < .01 or p <.001? - Check your stats!

A reviewers dream has come true. The new __statcheck__-package for [R](r-project.org) automagically checks the accurate __reporting__ of ...… Continue reading

Publication-lists-4-Your-Website

Published on June 19, 2015

Relaunch on Jekyll

Published on June 04, 2015