Deep Freeze: building better stand-alone apps with Python

Type:
Talk
Audience level:
Experienced
Category:
Useful libraries
March 11th 1:30 p.m. – 2:10 p.m.

Description

There's more to shipping a stand-alone python app than just running py2exe over your code. Want to deploy automatic updates? Want to be sure it runs on legacy platforms? Want to add professional touches like code signing? And want to do this all in a cross-platform manner? This talk will show you the tools you can use to make your frozen apps better in a variety of small yet important ways.

Abstract

Overview

Python has a powerful and mature suite tools of tools for "freezing" your python scripts into a stand-alone application, including py2exe, py2app, cxfreeze, bbfeezee and PyInstaller. But there's more to shipping a stand-alone app than just running py2exe over your code.

This talk will show you the tools you can use to make your frozen apps better in a variety of small yet important ways.

Want to deploy automatic updates? The "esky" package provides a simple API for building, publishing and installing updates, and jumps through all the hoops needed to ensure failed updates won't leave your program unusable.

Need to run on older versions of OSX or ancient linux boxes? The "myppy" package can build a python runtime optimized for portable deployment and binary compatibility with older systems.

Want to add code-signing for that professional touch? The "signedimp" package provides cross-platform hooks for code signing and extends the protection to code loaded at runtime.

Each of these tools has been extracted from a real-life build process for a complex cross-platform application, and each is designed to help make your frozen applications just that little bit better.

Outline

  • introduction: the basics of "freezing" your app, with a quick py2exe demo
  • what do I know about this anyway?
    • built "saltdrive": http://www.saltdrive.com
    • a cross-platform app run from a USB stick
    • plug it in, double-click, and it has to work anywhere - windows, linux or mac, any version
    • that's hard :-)
    • all these tools where extracted from the saltdrive build process
  • automatic updates with esky
    • why are automatic updates important?
    • getting it right is hard; esky gets it right so you don't have to
    • converting an app from py2exe to esky
    • demo of building, deploying and installing an updated version
    • patch-based updates
  • binary compatibility with myppy
    • win32 developers have it easy
    • OSX tries hard to get your programs using new APIs; Linux is even worse
    • building on a newer platform and deploying to an older platform requires careful management of compiler flags, library paths etc
    • myppy is a suite of recipes to do this for python
    • think of it as compiling a virtualenv from source, optimized for portability
    • demo of use on Linux
  • code signing with signedimp
    • code signing is becoming more important - think the scary "untrusted program" popups in Windows
    • but code signing is useless if you load untrusted code at runtime
    • signedimp gives you an API to sign an entire frozen application, including the library.zip and C extension modules
    • and an importhook that prevents loading of unsigned code at runtime
  • conclusion
    • lots of little things can add up to a much better user experience
    • I'm sure everyone has their own little suite of tools for tweaking their frozen apps
    • lets keep building up the public repository of knowledge and tools in this area