Skip to content

crasiak/myppy

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

76 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

myppy: make you a portable python

Myppy is a set of tools for building and managing a portable python environment. The end result is something similar in spirit to portable python but can be built for a variety of different platforms.

Currently targeted build environments are linux-i686 and OSX. There is some initial support for win32 but I need to figure out a lot of finer details of the build process.

The secret sauce is basically:

  • Using the autopackage build tools to hide newer glibc symbols on Linux, so that compiled libs can be used unmodified on older boxen.
  • Setting MACOSX_DEPLOYMENT_TARGET=10.4 and building universal binaries on OSX.
  • Setting the rpath or loader_path on all shared libs to a sensible value, so that their deps can be found regardless of where the myppy env is located.

Some things haven't quite been sorted out yet:

  • Scripts installed by easy_install and pip embed the absolute path to the interpreter in the shebang line; they should be replaced by a loader stub that finds python at runtime.
  • distutils and sysconfig embed the absolute library paths as they were at build time, meaning you can't properly build C-extensions if you move the environment around. They should be patched in a simlar way to virtualenv.

Building a myppy environment

To build a myppy environment, you'll need some basic command-line build tools and a recent version of gcc. Initialise a new myppy env with the following command:

#> myppy PATH/TO/ENV init

This will build and set up a basic python installation (currently python 2.6.6) along with setuptools and pip. Most python packages can be installed directly using pip. For packages with more complex needs a myppy "recipe" is provided, and you can install them using e.g.:

#> myppy PATH/TO/ENV install py_wxpython

This would build and install a custom wxPython version that is patched to be more portable.

Using a myppy environment

In the top level of a myppy environment there are three shell scripts named "python", "myppy" and "shell". These set up some relevant environment vars and then chainload the appropriate command.

Here's how you might get a shell inside a myppy envionment, then install a third-party package using pip:

#>
#> PATH/TO/ENV/shell
myppy(ENV):$
myppy(ENV):$ pip install esky
...lots of output as esky is installed...
myppy(ENV):$
myppy(ENV):$ <ctrl-D>
#>

What is it good for?

Why, everything that something like portable python is good for, but on Linux or OSX instead of Windows! Use it as a convenient portable scripting or testing environment, or to run multiple python versions side-by-side.

One thing it's particularly good for (actually, the reason it was created) is building frozen Python apps. Myppy comes with recipes for patched of cx-freeze and py2app that will build stand-alone applications having the same portability as the myppy env itself - meaning they should run anywhere from ancient Red Hat distros to the latest Ubuntu release.

Myppy also has a few modifications that make it play nicely with other tools for building frozen applications, such as esky and signedimp, mostly to do with what modules are avilable as builtins.

References

About

make you a portable python

Resources

License

Stars

Watchers

Forks

Packages

No packages published