mirror of
				https://github.com/bunny-lab-io/Borealis.git
				synced 2025-10-30 00:01:57 -06:00 
			
		
		
		
	
		
			
				
	
	
		
			741 lines
		
	
	
		
			50 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			741 lines
		
	
	
		
			50 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!DOCTYPE html>
 | ||
| 
 | ||
| <html lang="en" data-content_root="../">
 | ||
|   <head>
 | ||
|     <meta charset="utf-8" />
 | ||
|     <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
 | ||
| <meta property="og:title" content="5. Using Python on macOS" />
 | ||
| <meta property="og:type" content="website" />
 | ||
| <meta property="og:url" content="https://docs.python.org/3/using/mac.html" />
 | ||
| <meta property="og:site_name" content="Python documentation" />
 | ||
| <meta property="og:description" content="This document aims to give an overview of macOS-specific behavior you should know about to get started with Python on Mac computers. Python on a Mac running macOS is very similar to Python on other..." />
 | ||
| <meta property="og:image" content="https://docs.python.org/3/_static/og-image.png" />
 | ||
| <meta property="og:image:alt" content="Python documentation" />
 | ||
| <meta name="description" content="This document aims to give an overview of macOS-specific behavior you should know about to get started with Python on Mac computers. Python on a Mac running macOS is very similar to Python on other..." />
 | ||
| <meta property="og:image:width" content="200">
 | ||
| <meta property="og:image:height" content="200">
 | ||
| <meta name="theme-color" content="#3776ab">
 | ||
| 
 | ||
|     <title>5. Using Python on macOS — Python 3.13.3 documentation</title><meta name="viewport" content="width=device-width, initial-scale=1.0">
 | ||
|     
 | ||
|     <link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=b86133f3" />
 | ||
|     <link rel="stylesheet" type="text/css" href="../_static/pydoctheme.css?v=23252803" />
 | ||
|     <link id="pygments_dark_css" media="(prefers-color-scheme: dark)" rel="stylesheet" type="text/css" href="../_static/pygments_dark.css?v=5349f25f" />
 | ||
|     
 | ||
|     <script src="../_static/documentation_options.js?v=5d57ca2d"></script>
 | ||
|     <script src="../_static/doctools.js?v=9bcbadda"></script>
 | ||
|     <script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
 | ||
|     
 | ||
|     <script src="../_static/sidebar.js"></script>
 | ||
|     
 | ||
|     <link rel="search" type="application/opensearchdescription+xml"
 | ||
|           title="Search within Python 3.13.3 documentation"
 | ||
|           href="../_static/opensearch.xml"/>
 | ||
|     <link rel="author" title="About these documents" href="../about.html" />
 | ||
|     <link rel="index" title="Index" href="../genindex.html" />
 | ||
|     <link rel="search" title="Search" href="../search.html" />
 | ||
|     <link rel="copyright" title="Copyright" href="../copyright.html" />
 | ||
|     <link rel="next" title="6. Using Python on Android" href="android.html" />
 | ||
|     <link rel="prev" title="4. Using Python on Windows" href="windows.html" />
 | ||
|     
 | ||
|     <link rel="canonical" href="https://docs.python.org/3/using/mac.html">
 | ||
|     
 | ||
|       
 | ||
|     
 | ||
| 
 | ||
|     
 | ||
|     <style>
 | ||
|       @media only screen {
 | ||
|         table.full-width-table {
 | ||
|             width: 100%;
 | ||
|         }
 | ||
|       }
 | ||
|     </style>
 | ||
| <link rel="stylesheet" href="../_static/pydoctheme_dark.css" media="(prefers-color-scheme: dark)" id="pydoctheme_dark_css">
 | ||
|     <link rel="shortcut icon" type="image/png" href="../_static/py.svg" />
 | ||
|             <script type="text/javascript" src="../_static/copybutton.js"></script>
 | ||
|             <script type="text/javascript" src="../_static/menu.js"></script>
 | ||
|             <script type="text/javascript" src="../_static/search-focus.js"></script>
 | ||
|             <script type="text/javascript" src="../_static/themetoggle.js"></script> 
 | ||
|             <script type="text/javascript" src="../_static/rtd_switcher.js"></script>
 | ||
|             <meta name="readthedocs-addons-api-version" content="1">
 | ||
| 
 | ||
|   </head>
 | ||
| <body>
 | ||
| <div class="mobile-nav">
 | ||
|     <input type="checkbox" id="menuToggler" class="toggler__input" aria-controls="navigation"
 | ||
|            aria-pressed="false" aria-expanded="false" role="button" aria-label="Menu" />
 | ||
|     <nav class="nav-content" role="navigation">
 | ||
|         <label for="menuToggler" class="toggler__label">
 | ||
|             <span></span>
 | ||
|         </label>
 | ||
|         <span class="nav-items-wrapper">
 | ||
|             <a href="https://www.python.org/" class="nav-logo">
 | ||
|                 <img src="../_static/py.svg" alt="Python logo"/>
 | ||
|             </a>
 | ||
|             <span class="version_switcher_placeholder"></span>
 | ||
|             <form role="search" class="search" action="../search.html" method="get">
 | ||
|                 <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" class="search-icon">
 | ||
|                     <path fill-rule="nonzero" fill="currentColor" d="M15.5 14h-.79l-.28-.27a6.5 6.5 0 001.48-5.34c-.47-2.78-2.79-5-5.59-5.34a6.505 6.505 0 00-7.27 7.27c.34 2.8 2.56 5.12 5.34 5.59a6.5 6.5 0 005.34-1.48l.27.28v.79l4.25 4.25c.41.41 1.08.41 1.49 0 .41-.41.41-1.08 0-1.49L15.5 14zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"></path>
 | ||
|                 </svg>
 | ||
|                 <input placeholder="Quick search" aria-label="Quick search" type="search" name="q" />
 | ||
|                 <input type="submit" value="Go"/>
 | ||
|             </form>
 | ||
|         </span>
 | ||
|     </nav>
 | ||
|     <div class="menu-wrapper">
 | ||
|         <nav class="menu" role="navigation" aria-label="main navigation">
 | ||
|             <div class="language_switcher_placeholder"></div>
 | ||
|             
 | ||
| <label class="theme-selector-label">
 | ||
|     Theme
 | ||
|     <select class="theme-selector" oninput="activateTheme(this.value)">
 | ||
|         <option value="auto" selected>Auto</option>
 | ||
|         <option value="light">Light</option>
 | ||
|         <option value="dark">Dark</option>
 | ||
|     </select>
 | ||
| </label>
 | ||
|   <div>
 | ||
|     <h3><a href="../contents.html">Table of Contents</a></h3>
 | ||
|     <ul>
 | ||
| <li><a class="reference internal" href="#">5. Using Python on macOS</a><ul>
 | ||
| <li><a class="reference internal" href="#using-python-for-macos-from-python-org">5.1. Using Python for macOS from <code class="docutils literal notranslate"><span class="pre">python.org</span></code></a><ul>
 | ||
| <li><a class="reference internal" href="#installation-steps">5.1.1. Installation steps</a></li>
 | ||
| <li><a class="reference internal" href="#how-to-run-a-python-script">5.1.2. How to run a Python script</a></li>
 | ||
| </ul>
 | ||
| </li>
 | ||
| <li><a class="reference internal" href="#alternative-distributions">5.2. Alternative Distributions</a></li>
 | ||
| <li><a class="reference internal" href="#installing-additional-python-packages">5.3. Installing Additional Python Packages</a></li>
 | ||
| <li><a class="reference internal" href="#gui-programming">5.4. GUI Programming</a></li>
 | ||
| <li><a class="reference internal" href="#advanced-topics">5.5. Advanced Topics</a><ul>
 | ||
| <li><a class="reference internal" href="#installing-free-threaded-binaries">5.5.1. Installing Free-threaded Binaries</a></li>
 | ||
| <li><a class="reference internal" href="#installing-using-the-command-line">5.5.2. Installing using the command line</a></li>
 | ||
| <li><a class="reference internal" href="#distributing-python-applications">5.5.3. Distributing Python Applications</a></li>
 | ||
| <li><a class="reference internal" href="#app-store-compliance">5.5.4. App Store Compliance</a></li>
 | ||
| </ul>
 | ||
| </li>
 | ||
| <li><a class="reference internal" href="#other-resources">5.6. Other Resources</a></li>
 | ||
| </ul>
 | ||
| </li>
 | ||
| </ul>
 | ||
| 
 | ||
|   </div>
 | ||
|   <div>
 | ||
|     <h4>Previous topic</h4>
 | ||
|     <p class="topless"><a href="windows.html"
 | ||
|                           title="previous chapter"><span class="section-number">4. </span>Using Python on Windows</a></p>
 | ||
|   </div>
 | ||
|   <div>
 | ||
|     <h4>Next topic</h4>
 | ||
|     <p class="topless"><a href="android.html"
 | ||
|                           title="next chapter"><span class="section-number">6. </span>Using Python on Android</a></p>
 | ||
|   </div>
 | ||
|   <div role="note" aria-label="source link">
 | ||
|     <h3>This Page</h3>
 | ||
|     <ul class="this-page-menu">
 | ||
|       <li><a href="../bugs.html">Report a Bug</a></li>
 | ||
|       <li>
 | ||
|         <a href="https://github.com/python/cpython/blob/main/Doc/using/mac.rst"
 | ||
|             rel="nofollow">Show Source
 | ||
|         </a>
 | ||
|       </li>
 | ||
|     </ul>
 | ||
|   </div>
 | ||
|         </nav>
 | ||
|     </div>
 | ||
| </div>
 | ||
| 
 | ||
|   
 | ||
|     <div class="related" role="navigation" aria-label="Related">
 | ||
|       <h3>Navigation</h3>
 | ||
|       <ul>
 | ||
|         <li class="right" style="margin-right: 10px">
 | ||
|           <a href="../genindex.html" title="General Index"
 | ||
|              accesskey="I">index</a></li>
 | ||
|         <li class="right" >
 | ||
|           <a href="../py-modindex.html" title="Python Module Index"
 | ||
|              >modules</a> |</li>
 | ||
|         <li class="right" >
 | ||
|           <a href="android.html" title="6. Using Python on Android"
 | ||
|              accesskey="N">next</a> |</li>
 | ||
|         <li class="right" >
 | ||
|           <a href="windows.html" title="4. Using Python on Windows"
 | ||
|              accesskey="P">previous</a> |</li>
 | ||
| 
 | ||
|           <li><img src="../_static/py.svg" alt="Python logo" style="vertical-align: middle; margin-top: -1px"/></li>
 | ||
|           <li><a href="https://www.python.org/">Python</a> »</li>
 | ||
|           <li class="switchers">
 | ||
|             <div class="language_switcher_placeholder"></div>
 | ||
|             <div class="version_switcher_placeholder"></div>
 | ||
|           </li>
 | ||
|           <li>
 | ||
|               
 | ||
|           </li>
 | ||
|     <li id="cpython-language-and-version">
 | ||
|       <a href="../index.html">3.13.3 Documentation</a> »
 | ||
|     </li>
 | ||
| 
 | ||
|           <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Python Setup and Usage</a> »</li>
 | ||
|         <li class="nav-item nav-item-this"><a href=""><span class="section-number">5. </span>Using Python on macOS</a></li>
 | ||
|                 <li class="right">
 | ||
|                     
 | ||
| 
 | ||
|     <div class="inline-search" role="search">
 | ||
|         <form class="inline-search" action="../search.html" method="get">
 | ||
|           <input placeholder="Quick search" aria-label="Quick search" type="search" name="q" id="search-box" />
 | ||
|           <input type="submit" value="Go" />
 | ||
|         </form>
 | ||
|     </div>
 | ||
|                      |
 | ||
|                 </li>
 | ||
|             <li class="right">
 | ||
| <label class="theme-selector-label">
 | ||
|     Theme
 | ||
|     <select class="theme-selector" oninput="activateTheme(this.value)">
 | ||
|         <option value="auto" selected>Auto</option>
 | ||
|         <option value="light">Light</option>
 | ||
|         <option value="dark">Dark</option>
 | ||
|     </select>
 | ||
| </label> |</li>
 | ||
|             
 | ||
|       </ul>
 | ||
|     </div>    
 | ||
| 
 | ||
|     <div class="document">
 | ||
|       <div class="documentwrapper">
 | ||
|         <div class="bodywrapper">
 | ||
|           <div class="body" role="main">
 | ||
|             
 | ||
|   <section id="using-python-on-macos">
 | ||
| <span id="using-on-mac"></span><h1><span class="section-number">5. </span>Using Python on macOS<a class="headerlink" href="#using-python-on-macos" title="Link to this heading">¶</a></h1>
 | ||
| <p>This document aims to give an overview of macOS-specific behavior you should
 | ||
| know about to get started with Python on Mac computers.
 | ||
| Python on a Mac running macOS is very similar to Python on other Unix-derived platforms,
 | ||
| but there are some differences in installation and some features.</p>
 | ||
| <p>There are various ways to obtain and install Python for macOS.
 | ||
| Pre-built versions of the most recent versions of Python are available
 | ||
| from a number of distributors. Much of this document describes use of
 | ||
| the Pythons provided by the CPython release team for download from
 | ||
| the <a class="reference external" href="https://www.python.org/downloads/">python.org website</a>. See
 | ||
| <a class="reference internal" href="#alternative-bundles"><span class="std std-ref">Alternative Distributions</span></a> for some other options.</p>
 | ||
| <section id="using-python-for-macos-from-python-org">
 | ||
| <span id="getting-and-installing-macpython"></span><span id="getting-osx"></span><h2><span class="section-number">5.1. </span>Using Python for macOS from <code class="docutils literal notranslate"><span class="pre">python.org</span></code><a class="headerlink" href="#using-python-for-macos-from-python-org" title="Link to this heading">¶</a></h2>
 | ||
| <section id="installation-steps">
 | ||
| <h3><span class="section-number">5.1.1. </span>Installation steps<a class="headerlink" href="#installation-steps" title="Link to this heading">¶</a></h3>
 | ||
| <p>For <a class="reference external" href="https://www.python.org/downloads/">current Python versions</a>
 | ||
| (other than those in <code class="docutils literal notranslate"><span class="pre">security</span></code> status), the release team produces a
 | ||
| <strong>Python for macOS</strong> installer package for each new release.
 | ||
| A list of available installers
 | ||
| is available <a class="reference external" href="https://www.python.org/downloads/macos/">here</a>.
 | ||
| We recommend using the most recent supported Python version where possible.
 | ||
| Current installers provide a
 | ||
| <a class="reference external" href="https://en.wikipedia.org/wiki/Universal_binary">universal2 binary</a> build
 | ||
| of Python which runs natively on all Macs (Apple Silicon and Intel) that are
 | ||
| supported by a wide range of macOS versions,
 | ||
| currently typically from at least <strong>macOS 10.13 High Sierra</strong> on.</p>
 | ||
| <p>The downloaded file is a standard macOS installer package file (<code class="docutils literal notranslate"><span class="pre">.pkg</span></code>).
 | ||
| File integrity information (checksum, size, sigstore signature, etc) for each file is included
 | ||
| on the release download page. Installer packages and their contents are signed and notarized
 | ||
| with <code class="docutils literal notranslate"><span class="pre">Python</span> <span class="pre">Software</span> <span class="pre">Foundation</span></code> Apple Developer ID certificates
 | ||
| to meet <a class="reference external" href="https://support.apple.com/en-us/102445">macOS Gatekeeper requirements</a>.</p>
 | ||
| <p>For a default installation, double-click on the downloaded installer package file.
 | ||
| This should launch the standard macOS Installer app and display the first of several
 | ||
| installer windows steps.</p>
 | ||
| <img alt="../_images/mac_installer_01_introduction.png" src="../_images/mac_installer_01_introduction.png" />
 | ||
| <p>Clicking on the <strong>Continue</strong> button brings up the <strong>Read Me</strong> for this installer.
 | ||
| Besides other important information, the <strong>Read Me</strong> documents which Python version is
 | ||
| going to be installed and on what versions of macOS it is supported. You may need
 | ||
| to scroll through to read the whole file. By default, this <strong>Read Me</strong> will also be
 | ||
| installed in <code class="docutils literal notranslate"><span class="pre">/Applications/Python</span> <span class="pre">3.13/</span></code> and available to read anytime.</p>
 | ||
| <img alt="../_images/mac_installer_02_readme.png" src="../_images/mac_installer_02_readme.png" />
 | ||
| <p>Clicking on <strong>Continue</strong> proceeds to display the license for Python and for
 | ||
| other included software. You will then need to <strong>Agree</strong> to the license terms
 | ||
| before proceeding to the next step. This license file will also be installed
 | ||
| and available to be read later.</p>
 | ||
| <img alt="../_images/mac_installer_03_license.png" src="../_images/mac_installer_03_license.png" />
 | ||
| <p>After the license terms are accepted, the next step is the <strong>Installation Type</strong>
 | ||
| display. For most uses, the standard set of installation operations is appropriate.</p>
 | ||
| <img alt="../_images/mac_installer_04_installation_type.png" src="../_images/mac_installer_04_installation_type.png" />
 | ||
| <p>By pressing the <strong>Customize</strong> button, you can choose to omit or select certain package
 | ||
| components of the installer. Click on each package name to see a description of
 | ||
| what it installs.
 | ||
| To also install support for the optional experimental free-threaded feature,
 | ||
| see <a class="reference internal" href="#install-freethreaded-macos"><span class="std std-ref">Installing Free-threaded Binaries</span></a>.</p>
 | ||
| <img alt="../_images/mac_installer_05_custom_install.png" src="../_images/mac_installer_05_custom_install.png" />
 | ||
| <p>In either case, clicking <strong>Install</strong> will begin the install process by asking
 | ||
| permission to install new software. A macOS user name with <code class="docutils literal notranslate"><span class="pre">Administrator</span></code> privilege
 | ||
| is needed as the installed Python will be available to all users of the Mac.</p>
 | ||
| <p>When the installation is complete, the <strong>Summary</strong> window will appear.</p>
 | ||
| <img alt="../_images/mac_installer_06_summary.png" src="../_images/mac_installer_06_summary.png" />
 | ||
| <p>Double-click on the <strong class="command">Install Certificates.command</strong>
 | ||
| icon or file in the <code class="docutils literal notranslate"><span class="pre">/Applications/Python</span> <span class="pre">3.13/</span></code> window to complete the
 | ||
| installation.</p>
 | ||
| <img alt="../_images/mac_installer_07_applications.png" src="../_images/mac_installer_07_applications.png" />
 | ||
| <p>This will open a temporary <strong class="program">Terminal</strong> shell window that
 | ||
| will use the new Python to download and install SSL root certificates
 | ||
| for its use.</p>
 | ||
| <img alt="../_images/mac_installer_08_install_certificates.png" src="../_images/mac_installer_08_install_certificates.png" />
 | ||
| <p>If <code class="docutils literal notranslate"><span class="pre">Successfully</span> <span class="pre">installed</span> <span class="pre">certifi</span></code> and <code class="docutils literal notranslate"><span class="pre">update</span> <span class="pre">complete</span></code> appears
 | ||
| in the terminal window, the installation is complete.
 | ||
| Close this terminal window and the installer window.</p>
 | ||
| <p>A default install will include:</p>
 | ||
| <ul class="simple">
 | ||
| <li><p>A <code class="docutils literal notranslate"><span class="pre">Python</span> <span class="pre">3.13</span></code> folder in your <code class="file docutils literal notranslate"><span class="pre">Applications</span></code> folder. In here
 | ||
| you find <strong class="program">IDLE</strong>, the development environment that is a standard part of official
 | ||
| Python distributions; and <strong class="program">Python Launcher</strong>, which handles double-clicking Python
 | ||
| scripts from the macOS <a class="reference external" href="https://support.apple.com/en-us/HT201732">Finder</a>.</p></li>
 | ||
| <li><p>A framework <code class="file docutils literal notranslate"><span class="pre">/Library/Frameworks/Python.framework</span></code>, which includes the
 | ||
| Python executable and libraries. The installer adds this location to your shell
 | ||
| path. To uninstall Python, you can remove these three things.
 | ||
| Symlinks to the Python executable are placed in <code class="file docutils literal notranslate"><span class="pre">/usr/local/bin/</span></code>.</p></li>
 | ||
| </ul>
 | ||
| <div class="admonition note">
 | ||
| <p class="admonition-title">Note</p>
 | ||
| <p>Recent versions of macOS include a <strong class="command">python3</strong> command in <code class="file docutils literal notranslate"><span class="pre">/usr/bin/python3</span></code>
 | ||
| that links to a usually older and incomplete version of Python provided by and for use by
 | ||
| the Apple development tools, <strong class="program">Xcode</strong> or the <strong class="program">Command Line Tools for Xcode</strong>.
 | ||
| You should never modify or attempt to delete this installation, as it is
 | ||
| Apple-controlled and is used by Apple-provided or third-party software.  If
 | ||
| you choose to install a newer Python version from <code class="docutils literal notranslate"><span class="pre">python.org</span></code>, you will have
 | ||
| two different but functional Python installations on your computer that
 | ||
| can co-exist. The default installer options should ensure that its <strong class="command">python3</strong>
 | ||
| will be used instead of the system <strong class="command">python3</strong>.</p>
 | ||
| </div>
 | ||
| </section>
 | ||
| <section id="how-to-run-a-python-script">
 | ||
| <h3><span class="section-number">5.1.2. </span>How to run a Python script<a class="headerlink" href="#how-to-run-a-python-script" title="Link to this heading">¶</a></h3>
 | ||
| <p>There are two ways to invoke the Python interpreter.
 | ||
| If you are familiar with using a Unix shell in a terminal
 | ||
| window, you can invoke <code class="docutils literal notranslate"><span class="pre">python3.13</span></code> or <code class="docutils literal notranslate"><span class="pre">python3</span></code> optionally
 | ||
| followed by one or more command line options (described in <a class="reference internal" href="cmdline.html#using-on-general"><span class="std std-ref">Command line and environment</span></a>).
 | ||
| The Python tutorial also has a useful section on
 | ||
| <a class="reference internal" href="../tutorial/appendix.html#tut-interac"><span class="std std-ref">using Python interactively from a shell</span></a>.</p>
 | ||
| <p>You can also invoke the interpreter through an integrated
 | ||
| development environment.
 | ||
| <a class="reference internal" href="../library/idle.html#idle"><span class="std std-ref">IDLE — Python editor and shell</span></a> is a basic editor and interpreter environment
 | ||
| which is included with the standard distribution of Python.
 | ||
| <strong class="program">IDLE</strong> includes a Help menu that allows you to access Python documentation. If you
 | ||
| are completely new to Python, you can read the tutorial introduction
 | ||
| in that document.</p>
 | ||
| <p>There are many other editors and IDEs available, see <a class="reference internal" href="editors.html#editors"><span class="std std-ref">Editors and IDEs</span></a>
 | ||
| for more information.</p>
 | ||
| <p>To run a Python script file from the terminal window, you can
 | ||
| invoke the interpreter with the name of the script file:</p>
 | ||
| <blockquote>
 | ||
| <div><p><code class="docutils literal notranslate"><span class="pre">python3.13</span></code> <code class="docutils literal notranslate"><span class="pre">myscript.py</span></code></p>
 | ||
| </div></blockquote>
 | ||
| <p>To run your script from the Finder, you can either:</p>
 | ||
| <ul class="simple">
 | ||
| <li><p>Drag it to <strong class="program">Python Launcher</strong>.</p></li>
 | ||
| <li><p>Select <strong class="program">Python Launcher</strong> as the default application to open your
 | ||
| script (or any <code class="docutils literal notranslate"><span class="pre">.py</span></code> script) through the Finder Info window and double-click it.
 | ||
| <strong class="program">Python Launcher</strong> has various preferences to control how your script is
 | ||
| launched. Option-dragging allows you to change these for one invocation, or use
 | ||
| its <code class="docutils literal notranslate"><span class="pre">Preferences</span></code> menu to change things globally.</p></li>
 | ||
| </ul>
 | ||
| <p>Be aware that running the script directly from the macOS Finder might
 | ||
| produce different results than when running from a terminal window as
 | ||
| the script will not be run in the usual shell environment including
 | ||
| any setting of environment variables in shell profiles.
 | ||
| And, as with any other script or program,
 | ||
| be certain of what you are about to run.</p>
 | ||
| </section>
 | ||
| </section>
 | ||
| <section id="alternative-distributions">
 | ||
| <span id="alternative-bundles"></span><h2><span class="section-number">5.2. </span>Alternative Distributions<a class="headerlink" href="#alternative-distributions" title="Link to this heading">¶</a></h2>
 | ||
| <p>Besides the standard <code class="docutils literal notranslate"><span class="pre">python.org</span></code> for macOS installer, there are third-party
 | ||
| distributions for macOS that may include additional functionality.
 | ||
| Some popular distributions and their key features:</p>
 | ||
| <dl class="simple">
 | ||
| <dt><a class="reference external" href="https://www.activestate.com/products/python/">ActivePython</a></dt><dd><p>Installer with multi-platform compatibility, documentation</p>
 | ||
| </dd>
 | ||
| <dt><a class="reference external" href="https://www.anaconda.com/download/">Anaconda</a></dt><dd><p>Popular scientific modules (such as numpy, scipy, and pandas) and the
 | ||
| <code class="docutils literal notranslate"><span class="pre">conda</span></code> package manager.</p>
 | ||
| </dd>
 | ||
| <dt><a class="reference external" href="https://brew.sh">Homebrew</a></dt><dd><p>Package manager for macOS including multiple versions of Python and many
 | ||
| third-party Python-based packages (including numpy, scipy, and pandas).</p>
 | ||
| </dd>
 | ||
| <dt><a class="reference external" href="https://www.macports.org">MacPorts</a></dt><dd><p>Another package manager for macOS including multiple versions of Python and many
 | ||
| third-party Python-based packages. May include pre-built versions of Python and
 | ||
| many packages for older versions of macOS.</p>
 | ||
| </dd>
 | ||
| </dl>
 | ||
| <p>Note that distributions might not include the latest versions of Python or
 | ||
| other libraries, and are not maintained or supported by the core Python team.</p>
 | ||
| </section>
 | ||
| <section id="installing-additional-python-packages">
 | ||
| <span id="mac-package-manager"></span><h2><span class="section-number">5.3. </span>Installing Additional Python Packages<a class="headerlink" href="#installing-additional-python-packages" title="Link to this heading">¶</a></h2>
 | ||
| <p>Refer to the <a class="reference external" href="https://packaging.python.org/en/latest/tutorials/installing-packages/">Python Packaging User Guide</a> for more information.</p>
 | ||
| </section>
 | ||
| <section id="gui-programming">
 | ||
| <span id="gui-programming-on-the-mac"></span><span id="osx-gui-scripts"></span><h2><span class="section-number">5.4. </span>GUI Programming<a class="headerlink" href="#gui-programming" title="Link to this heading">¶</a></h2>
 | ||
| <p>There are several options for building GUI applications on the Mac with Python.</p>
 | ||
| <p>The standard Python GUI toolkit is <a class="reference internal" href="../library/tkinter.html#module-tkinter" title="tkinter: Interface to Tcl/Tk for graphical user interfaces"><code class="xref py py-mod docutils literal notranslate"><span class="pre">tkinter</span></code></a>, based on the cross-platform
 | ||
| Tk toolkit (<a class="reference external" href="https://www.tcl.tk">https://www.tcl.tk</a>). A macOS-native version of Tk is included with
 | ||
| the installer.</p>
 | ||
| <p><em>PyObjC</em> is a Python binding to Apple’s Objective-C/Cocoa framework.
 | ||
| Information on PyObjC is available from <a class="extlink-pypi reference external" href="https://pypi.org/project/pyobjc/">pyobjc</a>.</p>
 | ||
| <p>A number of alternative macOS GUI toolkits are available including:</p>
 | ||
| <ul class="simple">
 | ||
| <li><p><a class="reference external" href="https://www.qt.io/qt-for-python">PySide</a>: Official Python bindings to the
 | ||
| <a class="reference external" href="https://wiki.qt.io/Qt_for_Python">Qt GUI toolkit</a>.</p></li>
 | ||
| <li><p><a class="reference external" href="https://riverbankcomputing.com/software/pyqt/">PyQt</a>: Alternative
 | ||
| Python bindings to Qt.</p></li>
 | ||
| <li><p><a class="reference external" href="https://kivy.org">Kivy</a>: A cross-platform GUI toolkit that supports
 | ||
| desktop and mobile platforms.</p></li>
 | ||
| <li><p><a class="reference external" href="https://toga.readthedocs.io">Toga</a>: Part of the <a class="reference external" href="https://beeware.org">BeeWare Project</a>; supports desktop, mobile, web and console apps.</p></li>
 | ||
| <li><p><a class="reference external" href="https://wxpython.org">wxPython</a>: A cross-platform toolkit that
 | ||
| supports desktop operating systems.</p></li>
 | ||
| </ul>
 | ||
| </section>
 | ||
| <section id="advanced-topics">
 | ||
| <h2><span class="section-number">5.5. </span>Advanced Topics<a class="headerlink" href="#advanced-topics" title="Link to this heading">¶</a></h2>
 | ||
| <section id="installing-free-threaded-binaries">
 | ||
| <span id="install-freethreaded-macos"></span><h3><span class="section-number">5.5.1. </span>Installing Free-threaded Binaries<a class="headerlink" href="#installing-free-threaded-binaries" title="Link to this heading">¶</a></h3>
 | ||
| <div class="versionadded">
 | ||
| <p><span class="versionmodified added">Added in version 3.13: </span>(Experimental)</p>
 | ||
| </div>
 | ||
| <div class="admonition note">
 | ||
| <p class="admonition-title">Note</p>
 | ||
| <p>Everything described in this section is considered experimental,
 | ||
| and should be expected to change in future releases.</p>
 | ||
| </div>
 | ||
| <p>The <code class="docutils literal notranslate"><span class="pre">python.org</span></code> <a class="reference internal" href="#getting-and-installing-macpython"><span class="std std-ref">Python for macOS</span></a>
 | ||
| installer package can optionally install an additional build of
 | ||
| Python 3.13 that supports <span class="target" id="index-0"></span><a class="pep reference external" href="https://peps.python.org/pep-0703/"><strong>PEP 703</strong></a>, the experimental free-threading feature
 | ||
| (running with the <a class="reference internal" href="../glossary.html#term-global-interpreter-lock"><span class="xref std std-term">global interpreter lock</span></a> disabled).
 | ||
| Check the release page on <code class="docutils literal notranslate"><span class="pre">python.org</span></code> for possible updated information.</p>
 | ||
| <p>Because this feature is still considered experimental, the support for it
 | ||
| is not installed by default. It is packaged as a separate install option,
 | ||
| available by clicking the <strong>Customize</strong> button on the <strong>Installation Type</strong>
 | ||
| step of the installer as described above.</p>
 | ||
| <img alt="../_images/mac_installer_09_custom_install_free_threaded.png" src="../_images/mac_installer_09_custom_install_free_threaded.png" />
 | ||
| <p>If the box next to the <strong>Free-threaded Python</strong> package name is checked,
 | ||
| a separate <code class="file docutils literal notranslate"><span class="pre">PythonT.framework</span></code> will also be installed
 | ||
| alongside the normal <code class="file docutils literal notranslate"><span class="pre">Python.framework</span></code> in <code class="file docutils literal notranslate"><span class="pre">/Library/Frameworks</span></code>.
 | ||
| This configuration allows a free-threaded Python 3.13 build to co-exist
 | ||
| on your system with a traditional (GIL only) Python 3.13 build with
 | ||
| minimal risk while installing or testing. This installation layout is itself
 | ||
| experimental and is subject to change in future releases.</p>
 | ||
| <p>Known cautions and limitations:</p>
 | ||
| <ul>
 | ||
| <li><p>The <strong>UNIX command-line tools</strong> package, which is selected by default,
 | ||
| will install links in <code class="file docutils literal notranslate"><span class="pre">/usr/local/bin</span></code> for <code class="docutils literal notranslate"><span class="pre">python3.13t</span></code>,
 | ||
| the free-threaded interpreter, and <code class="docutils literal notranslate"><span class="pre">python3.13t-config</span></code>,
 | ||
| a configuration utility which may be useful for package builders.
 | ||
| Since <code class="file docutils literal notranslate"><span class="pre">/usr/local/bin</span></code> is typically included in your shell <code class="docutils literal notranslate"><span class="pre">PATH</span></code>,
 | ||
| in most cases no changes to your <code class="docutils literal notranslate"><span class="pre">PATH</span></code> environment variables should
 | ||
| be needed to use <code class="docutils literal notranslate"><span class="pre">python3.13t</span></code>.</p></li>
 | ||
| <li><p>For this release, the <strong>Shell profile updater</strong> package and the
 | ||
| <code class="file docutils literal notranslate"><span class="pre">Update</span> <span class="pre">Shell</span> <span class="pre">Profile.command</span></code> in <code class="docutils literal notranslate"><span class="pre">/Applications/Python</span> <span class="pre">3.13/</span></code>
 | ||
| do not support the free-threaded package.</p></li>
 | ||
| <li><p>The free-threaded build and the traditional build have separate search
 | ||
| paths and separate <code class="file docutils literal notranslate"><span class="pre">site-packages</span></code> directories so, by default,
 | ||
| if you need a package available in both builds, it may need to be installed in both.
 | ||
| The free-threaded package will install a separate instance of <strong class="program">pip</strong> for use
 | ||
| with <code class="docutils literal notranslate"><span class="pre">python3.13t</span></code>.</p>
 | ||
| <ul>
 | ||
| <li><p>To install a package using <strong class="command">pip</strong> without a <strong class="command">venv</strong>:</p>
 | ||
| <blockquote>
 | ||
| <div><p><code class="docutils literal notranslate"><span class="pre">python3.13t</span></code> <code class="docutils literal notranslate"><span class="pre">-m</span> <span class="pre">pip</span> <span class="pre">install</span> <span class="pre"><package_name></span></code></p>
 | ||
| </div></blockquote>
 | ||
| </li>
 | ||
| </ul>
 | ||
| </li>
 | ||
| <li><p>When working with multiple Python environments, it is usually safest and easiest
 | ||
| to <a class="reference internal" href="../tutorial/venv.html#tut-venv"><span class="std std-ref">create and use virtual environments</span></a>.
 | ||
| This can avoid possible command name conflicts and confusion about which Python is in use:</p>
 | ||
| <blockquote>
 | ||
| <div><p><code class="docutils literal notranslate"><span class="pre">python3.13t</span></code> <code class="docutils literal notranslate"><span class="pre">-m</span> <span class="pre">venv</span> <span class="pre"><venv_name></span></code></p>
 | ||
| </div></blockquote>
 | ||
| <p>then <strong class="command">activate</strong>.</p>
 | ||
| </li>
 | ||
| <li><p>To run a free-threaded version of IDLE:</p>
 | ||
| <blockquote>
 | ||
| <div><p><code class="docutils literal notranslate"><span class="pre">python3.13t</span></code> <code class="docutils literal notranslate"><span class="pre">-m</span> <span class="pre">idlelib</span></code></p>
 | ||
| </div></blockquote>
 | ||
| </li>
 | ||
| <li><p>The interpreters in both builds respond to the same
 | ||
| <a class="reference internal" href="cmdline.html#using-on-envvars"><span class="std std-ref">PYTHON environment variables</span></a>
 | ||
| which may have unexpected results, for example, if you have <code class="docutils literal notranslate"><span class="pre">PYTHONPATH</span></code>
 | ||
| set in a shell profile. If necessary, there are
 | ||
| <a class="reference internal" href="cmdline.html#using-on-interface-options"><span class="std std-ref">command line options</span></a> like <code class="docutils literal notranslate"><span class="pre">-E</span></code>
 | ||
| to ignore these environment variables.</p></li>
 | ||
| <li><p>The free-threaded build links to the third-party shared libraries,
 | ||
| such as <code class="docutils literal notranslate"><span class="pre">OpenSSL</span></code> and <code class="docutils literal notranslate"><span class="pre">Tk</span></code>, installed in the traditional framework.
 | ||
| This means that both builds also share one set of trust certificates
 | ||
| as installed by the <strong class="command">Install Certificates.command</strong> script,
 | ||
| thus it only needs to be run once.</p></li>
 | ||
| <li><p>If you cannot depend on the link in <code class="docutils literal notranslate"><span class="pre">/usr/local/bin</span></code> pointing to the
 | ||
| <code class="docutils literal notranslate"><span class="pre">python.org</span></code> free-threaded <code class="docutils literal notranslate"><span class="pre">python3.13t</span></code> (for example, if you want
 | ||
| to install your own version there or some other distribution does),
 | ||
| you can explicitly set your shell <code class="docutils literal notranslate"><span class="pre">PATH</span></code> environment variable to
 | ||
| include the <code class="docutils literal notranslate"><span class="pre">PythonT</span></code> framework <code class="docutils literal notranslate"><span class="pre">bin</span></code> directory:</p>
 | ||
| <div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="nb">export</span><span class="w"> </span><span class="nv">PATH</span><span class="o">=</span><span class="s2">"/Library/Frameworks/PythonT.framework/Versions/3.13/bin"</span>:<span class="s2">"</span><span class="nv">$PATH</span><span class="s2">"</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <p>The traditional framework installation by default does something similar,
 | ||
| except for <code class="file docutils literal notranslate"><span class="pre">Python.framework</span></code>. Be aware that having both framework <code class="docutils literal notranslate"><span class="pre">bin</span></code>
 | ||
| directories in <code class="docutils literal notranslate"><span class="pre">PATH</span></code> can lead to confusion if there are duplicate names
 | ||
| like <code class="docutils literal notranslate"><span class="pre">python3.13</span></code> in both; which one is actually used depends on the order
 | ||
| they appear in <code class="docutils literal notranslate"><span class="pre">PATH</span></code>. The <code class="docutils literal notranslate"><span class="pre">which</span> <span class="pre">python3.x</span></code> or <code class="docutils literal notranslate"><span class="pre">which</span> <span class="pre">python3.xt</span></code>
 | ||
| commands can show which path is being used. Using virtual environments
 | ||
| can help avoid such ambiguities. Another option might be to create
 | ||
| a shell <strong class="command">alias</strong> to the desired interpreter, like:</p>
 | ||
| <div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="nb">alias</span><span class="w"> </span>py3.13<span class="o">=</span><span class="s2">"/Library/Frameworks/Python.framework/Versions/3.13/bin/python3.13"</span>
 | ||
| <span class="nb">alias</span><span class="w"> </span>py3.13t<span class="o">=</span><span class="s2">"/Library/Frameworks/PythonT.framework/Versions/3.13/bin/python3.13t"</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| </li>
 | ||
| </ul>
 | ||
| </section>
 | ||
| <section id="installing-using-the-command-line">
 | ||
| <h3><span class="section-number">5.5.2. </span>Installing using the command line<a class="headerlink" href="#installing-using-the-command-line" title="Link to this heading">¶</a></h3>
 | ||
| <p>If you want to use automation to install the <code class="docutils literal notranslate"><span class="pre">python.org</span></code> installer package
 | ||
| (rather than by using the familiar macOS <strong class="program">Installer</strong> GUI app),
 | ||
| the macOS command line <strong class="command">installer</strong> utility lets you select non-default
 | ||
| options, too. If you are not familiar with <strong class="command">installer</strong>, it can be
 | ||
| somewhat cryptic (see <strong class="command">man installer</strong> for more information).
 | ||
| As an example, the following shell snippet shows one way to do it,
 | ||
| using the <code class="docutils literal notranslate"><span class="pre">3.13.0b2</span></code> release and selecting the free-threaded interpreter
 | ||
| option:</p>
 | ||
| <div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="nv">RELEASE</span><span class="o">=</span><span class="s2">"python-3.13.0b2-macos11.pkg"</span>
 | ||
| 
 | ||
| <span class="c1"># download installer pkg</span>
 | ||
| curl<span class="w"> </span>-O<span class="w"> </span>https://www.python.org/ftp/python/3.13.0/<span class="si">${</span><span class="nv">RELEASE</span><span class="si">}</span>
 | ||
| 
 | ||
| <span class="c1"># create installer choicechanges to customize the install:</span>
 | ||
| <span class="c1">#    enable the PythonTFramework-3.13 package</span>
 | ||
| <span class="c1">#    while accepting the other defaults (install all other packages)</span>
 | ||
| cat<span class="w"> </span>><span class="w"> </span>./choicechanges.plist<span class="w"> </span><span class="s"><<EOF</span>
 | ||
| <span class="s"><?xml version="1.0" encoding="UTF-8"?></span>
 | ||
| <span class="s"><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"></span>
 | ||
| <span class="s"><plist version="1.0"></span>
 | ||
| <span class="s"><array></span>
 | ||
| <span class="s">        <dict></span>
 | ||
| <span class="s">                <key>attributeSetting</key></span>
 | ||
| <span class="s">                <integer>1</integer></span>
 | ||
| <span class="s">                <key>choiceAttribute</key></span>
 | ||
| <span class="s">                <string>selected</string></span>
 | ||
| <span class="s">                <key>choiceIdentifier</key></span>
 | ||
| <span class="s">                <string>org.python.Python.PythonTFramework-3.13</string></span>
 | ||
| <span class="s">        </dict></span>
 | ||
| <span class="s"></array></span>
 | ||
| <span class="s"></plist></span>
 | ||
| <span class="s">EOF</span>
 | ||
| 
 | ||
| sudo<span class="w"> </span>installer<span class="w"> </span>-pkg<span class="w"> </span>./<span class="si">${</span><span class="nv">RELEASE</span><span class="si">}</span><span class="w"> </span>-applyChoiceChangesXML<span class="w"> </span>./choicechanges.plist<span class="w"> </span>-target<span class="w"> </span>/
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <p>You can then test that both installer builds are now available with something like:</p>
 | ||
| <div class="highlight-console notranslate"><div class="highlight"><pre><span></span><span class="gp">$ </span><span class="c1"># test that the free-threaded interpreter was installed if the Unix Command Tools package was enabled</span>
 | ||
| <span class="gp">$ </span>/usr/local/bin/python3.13t<span class="w"> </span>-VV
 | ||
| <span class="go">Python 3.13.0b2 experimental free-threading build (v3.13.0b2:3a83b172af, Jun  5 2024, 12:57:31) [Clang 15.0.0 (clang-1500.3.9.4)]</span>
 | ||
| <span class="gp">$ </span><span class="c1">#    and the traditional interpreter</span>
 | ||
| <span class="gp">$ </span>/usr/local/bin/python3.13<span class="w"> </span>-VV
 | ||
| <span class="go">Python 3.13.0b2 (v3.13.0b2:3a83b172af, Jun  5 2024, 12:50:24) [Clang 15.0.0 (clang-1500.3.9.4)]</span>
 | ||
| <span class="gp">$ </span><span class="c1"># test that they are also available without the prefix if /usr/local/bin is on $PATH</span>
 | ||
| <span class="gp">$ </span>python3.13t<span class="w"> </span>-VV
 | ||
| <span class="go">Python 3.13.0b2 experimental free-threading build (v3.13.0b2:3a83b172af, Jun  5 2024, 12:57:31) [Clang 15.0.0 (clang-1500.3.9.4)]</span>
 | ||
| <span class="gp">$ </span>python3.13<span class="w"> </span>-VV
 | ||
| <span class="go">Python 3.13.0b2 (v3.13.0b2:3a83b172af, Jun  5 2024, 12:50:24) [Clang 15.0.0 (clang-1500.3.9.4)]</span>
 | ||
| </pre></div>
 | ||
| </div>
 | ||
| <div class="admonition note">
 | ||
| <p class="admonition-title">Note</p>
 | ||
| <p>Current <code class="docutils literal notranslate"><span class="pre">python.org</span></code> installers only install to fixed locations like
 | ||
| <code class="file docutils literal notranslate"><span class="pre">/Library/Frameworks/</span></code>, <code class="file docutils literal notranslate"><span class="pre">/Applications</span></code>, and <code class="file docutils literal notranslate"><span class="pre">/usr/local/bin</span></code>.
 | ||
| You cannot use the <strong class="command">installer</strong> <code class="docutils literal notranslate"><span class="pre">-domain</span></code> option to install to
 | ||
| other locations.</p>
 | ||
| </div>
 | ||
| </section>
 | ||
| <section id="distributing-python-applications">
 | ||
| <span id="distributing-python-applications-on-the-mac"></span><h3><span class="section-number">5.5.3. </span>Distributing Python Applications<a class="headerlink" href="#distributing-python-applications" title="Link to this heading">¶</a></h3>
 | ||
| <p>A range of tools exist for converting your Python code into a standalone
 | ||
| distributable application:</p>
 | ||
| <ul class="simple">
 | ||
| <li><p><a class="extlink-pypi reference external" href="https://pypi.org/project/py2app/">py2app</a>: Supports creating macOS <code class="docutils literal notranslate"><span class="pre">.app</span></code>
 | ||
| bundles from a Python project.</p></li>
 | ||
| <li><p><a class="reference external" href="https://briefcase.readthedocs.io">Briefcase</a>: Part of the <a class="reference external" href="https://beeware.org">BeeWare Project</a>; a cross-platform packaging tool that supports
 | ||
| creation of <code class="docutils literal notranslate"><span class="pre">.app</span></code> bundles on macOS, as well as managing signing and
 | ||
| notarization.</p></li>
 | ||
| <li><p><a class="reference external" href="https://pyinstaller.org/">PyInstaller</a>: A cross-platform packaging tool that creates
 | ||
| a single file or folder as a distributable artifact.</p></li>
 | ||
| </ul>
 | ||
| </section>
 | ||
| <section id="app-store-compliance">
 | ||
| <h3><span class="section-number">5.5.4. </span>App Store Compliance<a class="headerlink" href="#app-store-compliance" title="Link to this heading">¶</a></h3>
 | ||
| <p>Apps submitted for distribution through the macOS App Store must pass Apple’s
 | ||
| app review process. This process includes a set of automated validation rules
 | ||
| that inspect the submitted application bundle for problematic code.</p>
 | ||
| <p>The Python standard library contains some code that is known to violate these
 | ||
| automated rules. While these violations appear to be false positives, Apple’s
 | ||
| review rules cannot be challenged. Therefore, it is necessary to modify the
 | ||
| Python standard library for an app to pass App Store review.</p>
 | ||
| <p>The Python source tree contains
 | ||
| <a class="extlink-source reference external" href="https://github.com/python/cpython/tree/3.13/Mac/Resources/app-store-compliance.patch">a patch file</a> that will remove
 | ||
| all code that is known to cause issues with the App Store review process. This
 | ||
| patch is applied automatically when CPython is configured with the
 | ||
| <a class="reference internal" href="configure.html#cmdoption-with-app-store-compliance"><code class="xref std std-option docutils literal notranslate"><span class="pre">--with-app-store-compliance</span></code></a> option.</p>
 | ||
| <p>This patch is not normally required to use CPython on a Mac; nor is it required
 | ||
| if you are distributing an app <em>outside</em> the macOS App Store. It is <em>only</em>
 | ||
| required if you are using the macOS App Store as a distribution channel.</p>
 | ||
| </section>
 | ||
| </section>
 | ||
| <section id="other-resources">
 | ||
| <h2><span class="section-number">5.6. </span>Other Resources<a class="headerlink" href="#other-resources" title="Link to this heading">¶</a></h2>
 | ||
| <p>The <a class="reference external" href="https://www.python.org/about/help/">python.org Help page</a> has links to many useful resources.
 | ||
| The <a class="reference external" href="https://www.python.org/community/sigs/current/pythonmac-sig/">Pythonmac-SIG mailing list</a>
 | ||
| is another support resource specifically for Python users and developers on the Mac.</p>
 | ||
| </section>
 | ||
| </section>
 | ||
| 
 | ||
| 
 | ||
|             <div class="clearer"></div>
 | ||
|           </div>
 | ||
|         </div>
 | ||
|       </div>
 | ||
|       <div class="sphinxsidebar" role="navigation" aria-label="Main">
 | ||
|         <div class="sphinxsidebarwrapper">
 | ||
|   <div>
 | ||
|     <h3><a href="../contents.html">Table of Contents</a></h3>
 | ||
|     <ul>
 | ||
| <li><a class="reference internal" href="#">5. Using Python on macOS</a><ul>
 | ||
| <li><a class="reference internal" href="#using-python-for-macos-from-python-org">5.1. Using Python for macOS from <code class="docutils literal notranslate"><span class="pre">python.org</span></code></a><ul>
 | ||
| <li><a class="reference internal" href="#installation-steps">5.1.1. Installation steps</a></li>
 | ||
| <li><a class="reference internal" href="#how-to-run-a-python-script">5.1.2. How to run a Python script</a></li>
 | ||
| </ul>
 | ||
| </li>
 | ||
| <li><a class="reference internal" href="#alternative-distributions">5.2. Alternative Distributions</a></li>
 | ||
| <li><a class="reference internal" href="#installing-additional-python-packages">5.3. Installing Additional Python Packages</a></li>
 | ||
| <li><a class="reference internal" href="#gui-programming">5.4. GUI Programming</a></li>
 | ||
| <li><a class="reference internal" href="#advanced-topics">5.5. Advanced Topics</a><ul>
 | ||
| <li><a class="reference internal" href="#installing-free-threaded-binaries">5.5.1. Installing Free-threaded Binaries</a></li>
 | ||
| <li><a class="reference internal" href="#installing-using-the-command-line">5.5.2. Installing using the command line</a></li>
 | ||
| <li><a class="reference internal" href="#distributing-python-applications">5.5.3. Distributing Python Applications</a></li>
 | ||
| <li><a class="reference internal" href="#app-store-compliance">5.5.4. App Store Compliance</a></li>
 | ||
| </ul>
 | ||
| </li>
 | ||
| <li><a class="reference internal" href="#other-resources">5.6. Other Resources</a></li>
 | ||
| </ul>
 | ||
| </li>
 | ||
| </ul>
 | ||
| 
 | ||
|   </div>
 | ||
|   <div>
 | ||
|     <h4>Previous topic</h4>
 | ||
|     <p class="topless"><a href="windows.html"
 | ||
|                           title="previous chapter"><span class="section-number">4. </span>Using Python on Windows</a></p>
 | ||
|   </div>
 | ||
|   <div>
 | ||
|     <h4>Next topic</h4>
 | ||
|     <p class="topless"><a href="android.html"
 | ||
|                           title="next chapter"><span class="section-number">6. </span>Using Python on Android</a></p>
 | ||
|   </div>
 | ||
|   <div role="note" aria-label="source link">
 | ||
|     <h3>This Page</h3>
 | ||
|     <ul class="this-page-menu">
 | ||
|       <li><a href="../bugs.html">Report a Bug</a></li>
 | ||
|       <li>
 | ||
|         <a href="https://github.com/python/cpython/blob/main/Doc/using/mac.rst"
 | ||
|             rel="nofollow">Show Source
 | ||
|         </a>
 | ||
|       </li>
 | ||
|     </ul>
 | ||
|   </div>
 | ||
|         </div>
 | ||
| <div id="sidebarbutton" title="Collapse sidebar">
 | ||
| <span>«</span>
 | ||
| </div>
 | ||
| 
 | ||
|       </div>
 | ||
|       <div class="clearer"></div>
 | ||
|     </div>  
 | ||
|     <div class="related" role="navigation" aria-label="Related">
 | ||
|       <h3>Navigation</h3>
 | ||
|       <ul>
 | ||
|         <li class="right" style="margin-right: 10px">
 | ||
|           <a href="../genindex.html" title="General Index"
 | ||
|              >index</a></li>
 | ||
|         <li class="right" >
 | ||
|           <a href="../py-modindex.html" title="Python Module Index"
 | ||
|              >modules</a> |</li>
 | ||
|         <li class="right" >
 | ||
|           <a href="android.html" title="6. Using Python on Android"
 | ||
|              >next</a> |</li>
 | ||
|         <li class="right" >
 | ||
|           <a href="windows.html" title="4. Using Python on Windows"
 | ||
|              >previous</a> |</li>
 | ||
| 
 | ||
|           <li><img src="../_static/py.svg" alt="Python logo" style="vertical-align: middle; margin-top: -1px"/></li>
 | ||
|           <li><a href="https://www.python.org/">Python</a> »</li>
 | ||
|           <li class="switchers">
 | ||
|             <div class="language_switcher_placeholder"></div>
 | ||
|             <div class="version_switcher_placeholder"></div>
 | ||
|           </li>
 | ||
|           <li>
 | ||
|               
 | ||
|           </li>
 | ||
|     <li id="cpython-language-and-version">
 | ||
|       <a href="../index.html">3.13.3 Documentation</a> »
 | ||
|     </li>
 | ||
| 
 | ||
|           <li class="nav-item nav-item-1"><a href="index.html" >Python Setup and Usage</a> »</li>
 | ||
|         <li class="nav-item nav-item-this"><a href=""><span class="section-number">5. </span>Using Python on macOS</a></li>
 | ||
|                 <li class="right">
 | ||
|                     
 | ||
| 
 | ||
|     <div class="inline-search" role="search">
 | ||
|         <form class="inline-search" action="../search.html" method="get">
 | ||
|           <input placeholder="Quick search" aria-label="Quick search" type="search" name="q" id="search-box" />
 | ||
|           <input type="submit" value="Go" />
 | ||
|         </form>
 | ||
|     </div>
 | ||
|                      |
 | ||
|                 </li>
 | ||
|             <li class="right">
 | ||
| <label class="theme-selector-label">
 | ||
|     Theme
 | ||
|     <select class="theme-selector" oninput="activateTheme(this.value)">
 | ||
|         <option value="auto" selected>Auto</option>
 | ||
|         <option value="light">Light</option>
 | ||
|         <option value="dark">Dark</option>
 | ||
|     </select>
 | ||
| </label> |</li>
 | ||
|             
 | ||
|       </ul>
 | ||
|     </div>  
 | ||
|     <div class="footer">
 | ||
|     © 
 | ||
|       <a href="../copyright.html">
 | ||
|     
 | ||
|     Copyright
 | ||
|     
 | ||
|       </a>
 | ||
|      2001-2025, Python Software Foundation.
 | ||
|     <br />
 | ||
|     This page is licensed under the Python Software Foundation License Version 2.
 | ||
|     <br />
 | ||
|     Examples, recipes, and other code in the documentation are additionally licensed under the Zero Clause BSD License.
 | ||
|     <br />
 | ||
|     
 | ||
|       See <a href="/license.html">History and License</a> for more information.<br />
 | ||
|     
 | ||
|     
 | ||
|     <br />
 | ||
| 
 | ||
|     The Python Software Foundation is a non-profit corporation.
 | ||
| <a href="https://www.python.org/psf/donations/">Please donate.</a>
 | ||
| <br />
 | ||
|     <br />
 | ||
|       Last updated on Apr 08, 2025 (14:33 UTC).
 | ||
|     
 | ||
|       <a href="/bugs.html">Found a bug</a>?
 | ||
|     
 | ||
|     <br />
 | ||
| 
 | ||
|     Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 8.2.3.
 | ||
|     </div>
 | ||
| 
 | ||
|   </body>
 | ||
| </html> |