I'm pleased to announce the latest release of esky, an auto-update framework for frozen python apps. New features include:
* ability to escalate to root privileges when necessary * better safety guarantees on Windows XP and lower * better support for py2exe with different bundle_files options
More details below for those who are interested.
esky: keep frozen apps fresh
Esky is an auto-update framework for frozen Python applications. It provides a simple API through which apps can find, fetch and install updates, and a bootstrapping mechanism that keeps the app safe in the face of failed or partial updates.
Esky is currently capable of freezing apps with bbfreeze, cxfreeze, py2exe and py2app.
The latest version is v0.7.0, with the following major changes:
* Renamed "esky.helper" to "esky.sudo" along with much refactoring: * @esky.use_helper_app is now @esky.allow_from_sudo() and is used to declare a type signature. * Esky.helper_app is now Esky.sudo_proxy and is always an instance of esky.sudo.SudoProxy. * added Esky.drop_root() method to drop root privileges. * implemented multiple safeguards against malicious input when running with root privileges. * Cause all scripts to automagically call esky.run_startup_hooks() on startup. Currently this: * detects the --esky-spawn-sudo option, runs sudo helper. * detects the --esky-spawn-cleanup option, runs cleanup helper. * Have Esky.auto_update() call Esky.cleanup() automatically (mostly so it can immediately drop any root privileges it has acquired). * Use a separate file "esky-lockfile.txt" for version locking. This will help protect against strange behaviour when fcntl.flock is simulated using fcntl.lockf (which released the lock when *any* handle to the file is closed). * Try to load correctly if executed from a temporary backup file (e.g. running from "prog.old.exe" instead of "prog.exe"). * Allow direct overwriting of existing bootstrap files on win32 (instead of renaming the old version out of the way) but only in very special circumstances: * currently only for executables where the icon or version info has changed but the rest of the exe has not. * may require spawning a new copy of the process at shutdown, to overwrite any in-use bootstrap exes (use Esky.cleanup_at_exit) * Several improvements to py2exe support: * implemented "optimize" and "unbuffered" settings in the custom bootstrap code. * more robust support for the various bundle_files options.
Code, bugs, etc: http://github.com/rfk/esky/