The use of __main__.py
to create executables
myprojectfolder/
|_ __main__.py
|_ __init__.py
Being __main__.py
:
print("Hello")
if you do
python myprojectfolder
Hello
it can also work in submodules if you have a subfolder just use the dot
python myprojectfolder.subfolder
and the__main__.py
inside that folder will be executed
Python will execute the code in __main__.py
as this file is an entry point.
You can also zip the folder
python -m zipfile -c myproject.zip myprojectfolder
YES Python can Zip files and folders!
and now you can get rid of myprojectfolder source code and run
python myproject.zip
YES! Python can execute zipped files (remember the .egg)
also you can easily obfuscate it and turn in to a binary like program
echo '#!/usr/bin/env python' >> myprogram
cat myproject.zip >>myprogram
chmod +x myprogram
Now you can delete myproject.zip and run
./myprogram
Sometimes it is better than the hackkish if __name__ == "__main__"
as seen on https://www.youtube.com/watch?v=0oTh1CXRaQ0
I've run into a problem where there doesn't seem to be any way (other than manually hacking the path) to expose the other code in the module to main.py from init.py. Relative imports fail. Any tips?