Distribution

cx_Freeze

Install cx_Freeze from here

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.

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.