Create self contained python executables.
Every one knows the special file "__init__.py". There is another special file "__main__.py". If this file exists in a directory, the python interpreter will try to execute it.
Here is an example:
- #fred:$ find .
- .
- ./hello
- ./hello/__main__.py
In our example the content of the file is a simple loop that prints hello world.
- #fred:$ cat ./hello/__main__.py
- #
- for count in range(3):
- print 'hello (cruel) world'
Just call python with the directory name and the python interpreter will execute the file __main__.py
- #fred:$ python hello
- hello (cruel) world
- hello (cruel) world
- hello (cruel) world
Now the interesting part...
Python is capable of importing and executing whatever python code is in a zip file. Therefore we can do the following:
- #fred:$ (cd hello; zip -r ../hello.zip .)
- adding: __main__.py (stored 0%)
- #fred:$ python hello.zip
- hello (cruel) world
- hello (cruel) world
- hello (cruel) world
On any Unix like system we can use a shebang (#!) line at the beginning of a file to pass the content of that file to the interpreter specified after the shebang.
- #fred:$ echo '#!/usr/bin/env python' > greetings
- #fred:$ cat hello.zip >> greetings
- #fred:$ chmod a+x greetings
We can now execute that file.
- #fred:$ ./greetings
- hello (cruel) world
- hello (cruel) world
- hello (cruel) world
Mix that with virtualenv and you will have a powerful way to simply distribute and execute your code.