
Pyship: Static Python for desktop apps - burrows
https://github.com/burrows-labs/pyship
======
p4wnc6
Another route is to compile via Cython with the interpreter embedded.

[https://github.com/cython/cython/tree/master/Demos/embed](https://github.com/cython/cython/tree/master/Demos/embed)

You could take your existing Python code and simply change the .py extension
to .pyx and compile with the `--embed` option.

Of course, it requires compile dependence on Cython.

------
Slippery_John
> Currently only supports OSX

Not sure how this is particularly useful then, since OSX ships with python
2.7. Something like this could be useful on Windows / Linux since they don't
necessarily have a python installed, or if it was bundling 3.5.

~~~
burrows
Have you tried shipping a python application to end users while relying on the
OS X system python? In my experience, this is an extremely painful process.

You would either need to do all of your development/testing with the system
python or ensure that you're development environment is compatible with the
system python (including stuff like distutils.util.get_platform(),
[https://github.com/MacPython/wiki/wiki/Spinning-
wheels](https://github.com/MacPython/wiki/wiki/Spinning-wheels)).

What do you do when Apple doesn't update their python with some patch you
want?

~~~
makecheck
Yes, I do this for my project.

Although, I do not attempt to install any libraries, I keep everything in the
application bundle and set environment variables as needed.

It is limiting in the sense that I must use the Python version that Apple does
but at the same time, the shipping executable is downright tiny compared to
most Mac OS X applications.

~~~
burrows
Are you modifying sys.path() to load the dependencies that are shipped with
the app; or some other technique?

~~~
makecheck
I use the location of the script to find the absolute path to the bundle
(MacOS folder), from which I can work backwards using ".." to find other
things like bundled libraries.

In my case some of the libraries are also compiled so I have a starter script
that sets DYLD_LIBRARY_PATH, PYTHONPATH, etc. and runs a 2nd script that can
then successfully import whatever is required.

------
thln666
So...like pex but worse?

[https://github.com/pantsbuild/pex](https://github.com/pantsbuild/pex)

------
rkeene2
I wonder if Python can't support something like starkits/starpacks from the
Tcl world ?

There's a somewhat similar Perl implementation but it extracts files to the
real filesystem and executes them rather than just reading from a VFS.

~~~
jofer
That's basically what pyinstaller is. It's not quite the same (extracts files
to the temp directory), but it's the same general idea.

A lot of Python applications on Windows are distributed this way.

------
akkartik
I love the command in the readme for computing dependencies of arbitrary
projects.

------
mwcampbell
How is this different from py2app?

~~~
burrows
I initially tried using py2app/py2exe/cx_Freeze, but stuff kept crashing.
They're trying to do something considerably more complicated than my 90 LOC
bash script; namely trying to bundle your application, it's dependencies and
the python interpreter into one package.

This bash script just gives you a python interpreter that should run on any
system. From there, your install script can setup a virtualenv, grab
dependencies and do whatever else.

------
w_t_payne
How is this different from eGenix PyRun?

------
topkekz
Nuitka compiles python into a native executable

[http://nuitka.net/pages/overview.html](http://nuitka.net/pages/overview.html)

