Menu
Bob Savage <bobsavage@mac.com>
Python on a Macintosh running Mac OS X is in principle very similar to Python onany other Unix platform, but there are a number of additional features such asthe IDE and the Package Manager that are worth pointing out.
Mac Catalyst. Native Mac apps built with Mac Catalyst can share code with your iPad apps, and you can add more features just for Mac. In macOS Big Sur, you can create even more powerful versions of your apps and take advantage of every pixel on the screen by running them at native Mac resolution. Apps built with Mac Catalyst can now be fully controlled using just the keyboard, access more iOS.
4.1. Getting and Installing MacPython¶
Mac OS X 10.8 comes with Python 2.7 pre-installed by Apple. If you wish, youare invited to install the most recent version of Python 3 from the Pythonwebsite (https://www.python.org). A current “universal binary” build of Python,which runs natively on the Mac’s new Intel and legacy PPC CPU’s, is availablethere.
What you get after installing is a number of things:
- A
Python3.8
folder in yourApplications
folder. In hereyou find IDLE, the development environment that is a standard part of officialPython distributions; and PythonLauncher, which handles double-clicking Pythonscripts from the Finder. - A framework
/Library/Frameworks/Python.framework
, which includes thePython executable and libraries. The installer adds this location to your shellpath. To uninstall MacPython, you can simply remove these three things. Asymlink to the Python executable is placed in /usr/local/bin/.
The Apple-provided build of Python is installed in
/System/Library/Frameworks/Python.framework
and /usr/bin/python
,respectively. You should never modify or delete these, as they areApple-controlled and are used by Apple- or third-party software. Remember thatif you choose to install a newer Python version from python.org, you will havetwo different but functional Python installations on your computer, so it willbe important that your paths and usages are consistent with what you want to do.IDLE includes a help menu that allows you to access Python documentation. If youare completely new to Python you should start reading the tutorial introductionin that document.
If you are familiar with Python on other Unix platforms you should read thesection on running Python scripts from the Unix shell.
4.1.1. How to run a Python script¶
Your best way to get started with Python on Mac OS X is through the IDLEintegrated development environment, see section The IDE and use the Help menuwhen the IDE is running.
If you want to run Python scripts from the Terminal window command line or fromthe Finder you first need an editor to create your script. Mac OS X comes with anumber of standard Unix command line editors, vim andemacs among them. If you want a more Mac-like editor,BBEdit or TextWrangler from Bare Bones Software (seehttp://www.barebones.com/products/bbedit/index.html) are good choices, as isTextMate (see https://macromates.com/). Other editors includeGvim (http://macvim-dev.github.io/macvim/) and Aquamacs(http://aquamacs.org/).
To run your script from the Terminal window you must make sure that
/usr/local/bin
is in your shell search path.To run your script from the Finder you have two options:
- Drag it to PythonLauncher
- Select PythonLauncher as the default application to open yourscript (or any .py script) through the finder Info window and double-click it.PythonLauncher has various preferences to control how your script islaunched. Option-dragging allows you to change these for one invocation, or useits Preferences menu to change things globally.
4.1.2. Running scripts with a GUI¶
With older versions of Python, there is one Mac OS X quirk that you need to beaware of: programs that talk to the Aqua window manager (in other words,anything that has a GUI) need to be run in a special way. Use pythonwinstead of python to start such scripts.
With Python 3.8, you can use either python or pythonw.
4.1.3. Configuration¶
Python on OS X honors all standard Unix environment variables such as
PYTHONPATH
, but setting these variables for programs started from theFinder is non-standard as the Finder does not read your .profile
or.cshrc
at startup. You need to create a file~/.MacOSX/environment.plist
. See Apple’s Technical Document QA1067 fordetails.For more information on installation Python packages in MacPython, see sectionInstalling Additional Python Packages.
4.2. The IDE¶
MacPython ships with the standard IDLE development environment. A goodintroduction to using IDLE can be found athttp://www.hashcollision.org/hkn/python/idle_intro/index.html.
4.3. Installing Additional Python Packages¶
There are several methods to install additional Python packages:
- Packages can be installed via the standard Python distutils mode (
pythonsetup.pyinstall
). - Many packages can also be installed via the setuptools extensionor pip wrapper, see https://pip.pypa.io/.
4.4. GUI Programming on the Mac¶
There are several options for building GUI applications on the Mac with Python.
PyObjC is a Python binding to Apple’s Objective-C/Cocoa framework, which isthe foundation of most modern Mac development. Information on PyObjC isavailable from https://pypi.org/project/pyobjc/.
The standard Python GUI toolkit is
tkinter
, based on the cross-platformTk toolkit (https://www.tcl.tk). An Aqua-native version of Tk is bundled with OSX by Apple, and the latest version can be downloaded and installed fromhttps://www.activestate.com; it can also be built from source.wxPython is another popular cross-platform GUI toolkit that runs natively onMac OS X. Packages and documentation are available from https://www.wxpython.org.
PyQt is another popular cross-platform GUI toolkit that runs natively on MacOS X. More information can be found athttps://riverbankcomputing.com/software/pyqt/intro.
Macos App Store
4.5. Distributing Python Applications on the Mac¶
The standard tool for deploying standalone Python applications on the Mac ispy2app. More information on installing and using py2app can be foundat http://undefined.org/python/#py2app.
4.6. Other Resources¶
The MacPython mailing list is an excellent support resource for Python users anddevelopers on the Mac:
Another useful resource is the MacPython wiki:
-->Azure Pipelines
Use a pipeline to automatically build and test your Python apps or scripts. After those steps are done, you can then deploy or publish your project.
If you want an end-to-end walkthrough, see Use CI/CD to deploy a Python web app to Azure App Service on Linux.
To create and activate an Anaconda environment and install Anaconda packages with
conda
, see Run pipelines with Anaconda environments.Create your first pipeline
Are you new to Azure Pipelines? If so, then we recommend you try this section before moving on to other sections.
Get the code
Import this repo into your Git repo in Azure DevOps Server 2019:
Sign in to Azure Pipelines
Sign in to Azure Pipelines. After you sign in, your browser goes to
https://dev.azure.com/my-organization-name
and displays your Azure DevOps dashboard.Within your selected organization, create a project. If you don't have any projects in your organization, you see a Create a project to get started screen. Otherwise, select the Create Project button in the upper-right corner of the dashboard.
Create the pipeline
- Sign in to your Azure DevOps organization and navigate to your project.
- Go to Pipelines, and then select New Pipeline.
- Walk through the steps of the wizard by first selecting GitHub as the location of your source code.NoteIf this is not what you see, then make sure the Multi-stage pipelines experience is turned on.
- You might be redirected to GitHub to sign in. If so, enter your GitHub credentials.
- When the list of repositories appears, select your repository.
- You might be redirected to GitHub to install the Azure Pipelines app. If so, select Approve and install.
When the Configure tab appears, select Python package. This will create a Python package to test on multiple Python versions.
- When your new pipeline appears, take a look at the YAML to see what it does. When you're ready, select Save and run.
- You're prompted to commit a new azure-pipelines.yml file to your repository. After you're happy with the message, select Save and run again.If you want to watch your pipeline in action, select the build job.You just created and ran a pipeline that we automatically created for you, because your code appeared to be a good match for the Python package template.You now have a working YAML pipeline (
azure-pipelines.yml
) in your repository that's ready for you to customize! - When you're ready to make changes to your pipeline, select it in the Pipelines page, and then Edit the
azure-pipelines.yml
file.
See the sections below to learn some of the more common ways to customize your pipeline.
YAML
- Add an
azure-pipelines.yml
file in your repository. Customize this snippet for your build.
- Create a pipeline (if you don't know how, see Create your first pipeline), and for the template select YAML.
- Set the Agent pool and YAML file path for your pipeline.
- Save the pipeline and queue a build. When the Build #nnnnnnnn.n has been queued message appears, select the number link to see your pipeline in action.
- When you're ready to make changes to your pipeline, Edit it.
- See the sections below to learn some of the more common ways to customize your pipeline.
Build environment
You don't have to set up anything for Azure Pipelines to build Python projects. Python is preinstalled on Microsoft-hosted build agents for Linux, macOS, or Windows. To see which Python versions are preinstalled, see Use a Microsoft-hosted agent.
Use a specific Python version
To use a specific version of Python in your pipeline, add the Use Python Version task to azure-pipelines.yml. This snippet sets the pipeline to use Python 3.6:
Use multiple Python versions
To run a pipeline with multiple Python versions, for example to test a package against those versions, define a
job
with a matrix
of Python versions. Then set the UsePythonVersion
task to reference the matrix
variable.You can add tasks to run using each Python version in the matrix.
Run Python scripts
To run Python scripts in your repository, use a
script
element and specify a filename. For example:You can also run inline Python scripts with the Python Script task:
To parameterize script execution, use the
PythonScript
task with arguments
values to pass arguments into the executing process. You can use sys.argv
or the more sophisticated argparse
library to parse the arguments.Install dependencies
You can use scripts to install specific PyPI packages with
pip
. For example, this YAML installs or upgrades pip
and the setuptools
and wheel
packages.Install requirements
After you update
pip
and friends, a typical next step is to install dependencies from requirements.txt:Run tests
You can use scripts to install and run various tests in your pipeline.
Run lint tests with flake8
To install or upgrade
flake8
and use it to run lint tests, use this YAML:Test with pytest and collect coverage metrics with pytest-cov
Use this YAML to install
pytest
and pytest-cov
, run tests, output test results in JUnit format, and output code coverage results in Cobertura XML format:Run tests with Tox
Azure Pipelines can run parallel Tox test jobs to split up the work. On a development computer, you have to run your test environments in series. This sample uses
tox -e py
to run whichever version of Python is active for the current job.Publish test results
Add the Publish Test Results task to publish JUnit or xUnit test results to the server:
Publish code coverage results
Add the Publish Code Coverage Results task to publish code coverage results to the server. You can see coverage metrics in the build summary, and download HTML reports for further analysis.
Package and deliver code
To authenticate with
twine
, use the Twine Authenticate task to store authentication credentials in the PYPIRC_PATH
environment variable.Then, add a custom script that uses
twine
to publish your packages.You can also use Azure Pipelines to build an image for your Python app and push it to a container registry.
Related extensions
- PyLint Checker (Darren Fuller)
- Python Test (Darren Fuller)
- Azure DevOps plugin for PyCharm (IntelliJ) (Microsoft)
- Python in Visual Studio Code (Microsoft)