A template for building Python apps that will run under macOS.
This repository branch contains a template for Python 2.7. Other Python versions are available by cloning other branches of repository.
The easiest way to use this project is to not use it at all - at least,
not directly. Briefcase is a
tool that uses this template, rolling it out using data extracted from
your setup.py
.
However, if you do want use this template directly...
Install cookiecutter. This is a tool used to bootstrap complex project templates:
$ pip install cookiecutter
Run
cookiecutter
on the Python-macOS template:$ cookiecutter https://github.com/pybee/Python-macOS-template --checkout 2.7
Download the Python Apple support package for macOS, and extract it. This will give you three frameworks.
BZip2.framework
OpenSSL.framework
Python.framework
Alternatively, you can download the Python-Apple-support project, and build your own versions of these frameworks.
These framework directories should be placed in the same directory as the
app
andapp_packages
directories generated by the cookiecutter project template - theContents
subdirectory of the main application bundle.Add your code to the template. At the very minimum, you need to have an
app/<app name>/__main__.py
file that defines an entry point that will start your application. If<app name>
contains a dash, it will be converted to an underscore in the expected package nameIf your code has any dependencies, they should be installed under the
app_packages
directory.
If you've done this correctly, a project with a formal name of My Project
,
with an app name of `my-project
should have a directory structure that
looks something like:
My Project.app/ Contents/ MacOS/ My Project Resources/ app/ my_project/ __init__.py __main__.py app_packages/ ...
The top level directory should identify as an macOS application, and can be distributed as a standalone package.
Of course, just running Python code isn't very interesting by itself - you'll be able to output to the console, and see that output in XCode, but if you tap the app icon on your phone, you won't see anything - because there isn't a visible console on an iPhone.
To do something interesting, you'll need to work with the native macOS system libraries to draw widgets and respond to screen taps. The Rubicon Objective C bridging library can be used to enable an easy interface with the macOS system libraries. You could also use the toga library to provides a cross-platform widget toolkit that supports macOS.
If you have any external library dependencies (like toga
, or anything other
third-party library), you should install the library code into the
app_packages
directory. This directory is the same as a site_packages
directory on a normal Python install.