# Distribution

# py2app

To use the py2app framework you must install it first. Do this by opening terminal and entering the following command:

sudo easy_install -U py2app

You can also pip install the packages as :

pip install py2app 

Then create the setup file for your python script:

py2applet --make-setup MyApplication.py

Edit the settings of the setup file to your liking, this is the default:

"""
This is a setup.py script generated by py2applet

Usage:
    python setup.py py2app
"""

from setuptools import setup

APP = ['test.py']
DATA_FILES = []
OPTIONS = {'argv_emulation': True}

setup(
    app=APP,
    data_files=DATA_FILES,
    options={'py2app': OPTIONS},
    setup_requires=['py2app'],
)

To add an icon file (this file must have a .icns extension), or include images in your application as reference, change your options as shown:

DATA_FILES = ['myInsertedImage.jpg']
OPTIONS = {'argv_emulation': True, 'iconfile': 'myCoolIcon.icns'}

Finally enter this into terminal:

python setup.py py2app

The script should run and you will find your finished application in the dist folder.

Use the following options for more customization:

optimize (-O)         optimization level: -O1 for "python -O", -O2 for
                      "python -OO", and -O0 to disable [default: -O0]

includes (-i)         comma-separated list of modules to include

packages (-p)         comma-separated list of packages to include

extension             Bundle extension [default:.app for app, .plugin for
                      plugin]

extra-scripts         comma-separated list of additional scripts to include
                      in an application or plugin.

# cx_Freeze

Install cx_Freeze from here (opens new window)

Unzip the folder and run these commands from that directory:

python setup.py build
sudo python setup.py install

Create a new directory for your python script and create a "setup.py" file in the same directory with the following content:

application_title = "My Application" # Use your own application name
main_python_file = "my_script.py" # Your python script

import sys

from cx_Freeze import setup, Executable

base = None
if sys.platform == "win32":
    base = "Win32GUI"

includes = ["atexit","re"]

setup(
        name = application_title,
        version = "0.1",
        description = "Your Description",
        options = {"build_exe" : {"includes" : includes }},
        executables = [Executable(main_python_file, base = base)])

Now run your setup.py from terminal:

python setup.py bdist_mac

NOTE: On El Capitan this will need to be run as root with SIP mode disabled.