Hacker News new | past | comments | ask | show | jobs | submit login
Pyship: Static Python for desktop apps (github.com/burrows-labs)
54 points by par1970 on March 19, 2016 | hide | past | favorite | 14 comments



Another route is to compile via Cython with the interpreter embedded.

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.


> 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.


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).

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


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.


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


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.


So...like pex but worse?

https://github.com/pantsbuild/pex


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.


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.


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


How is this different from py2app?


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.


How is this different from eGenix PyRun?


Nuitka compiles python into a native executable

http://nuitka.net/pages/overview.html




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: