123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611 |
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
- <meta property="og:title" content="4. Using Python on Windows" />
- <meta property="og:type" content="website" />
- <meta property="og:url" content="https://docs.python.org/3/using/windows.html" />
- <meta property="og:site_name" content="Python documentation" />
- <meta property="og:description" content="This document aims to give an overview of Windows-specific behaviour you should know about when using Python on Microsoft Windows. Unlike most Unix systems and services, Windows does not include a ..." />
- <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 Windows-specific behaviour you should know about when using Python on Microsoft Windows. Unlike most Unix systems and services, Windows does not include a ..." />
- <meta property="og:image:width" content="200" />
- <meta property="og:image:height" content="200" />
- <meta name="theme-color" content="#3776ab" />
- <title>4. Using Python on Windows — Python 3.12.0 documentation</title><meta name="viewport" content="width=device-width, initial-scale=1.0">
-
- <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
- <link rel="stylesheet" type="text/css" href="../_static/pydoctheme.css?digest=b37c26da2f7529d09fe70b41c4b2133fe4931a90" />
- <link id="pygments_dark_css" media="(prefers-color-scheme: dark)" rel="stylesheet" type="text/css" href="../_static/pygments_dark.css" />
-
- <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
- <script src="../_static/jquery.js"></script>
- <script src="../_static/underscore.js"></script>
- <script src="../_static/doctools.js"></script>
-
- <script src="../_static/sidebar.js"></script>
-
- <link rel="search" type="application/opensearchdescription+xml"
- title="Search within Python 3.12.0 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="5. Using Python on a Mac" href="mac.html" />
- <link rel="prev" title="3. Configure Python" href="configure.html" />
- <link rel="canonical" href="https://docs.python.org/3/using/windows.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/themetoggle.js"></script>
- </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="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="#">4. Using Python on Windows</a><ul>
- <li><a class="reference internal" href="#the-full-installer">4.1. The full installer</a><ul>
- <li><a class="reference internal" href="#installation-steps">4.1.1. Installation steps</a></li>
- <li><a class="reference internal" href="#removing-the-max-path-limitation">4.1.2. Removing the MAX_PATH Limitation</a></li>
- <li><a class="reference internal" href="#installing-without-ui">4.1.3. Installing Without UI</a></li>
- <li><a class="reference internal" href="#installing-without-downloading">4.1.4. Installing Without Downloading</a></li>
- <li><a class="reference internal" href="#modifying-an-install">4.1.5. Modifying an install</a></li>
- </ul>
- </li>
- <li><a class="reference internal" href="#the-microsoft-store-package">4.2. The Microsoft Store package</a><ul>
- <li><a class="reference internal" href="#known-issues">4.2.1. Known issues</a><ul>
- <li><a class="reference internal" href="#redirection-of-local-data-registry-and-temporary-paths">4.2.1.1. Redirection of local data, registry, and temporary paths</a></li>
- </ul>
- </li>
- </ul>
- </li>
- <li><a class="reference internal" href="#the-nuget-org-packages">4.3. The nuget.org packages</a></li>
- <li><a class="reference internal" href="#the-embeddable-package">4.4. The embeddable package</a><ul>
- <li><a class="reference internal" href="#python-application">4.4.1. Python Application</a></li>
- <li><a class="reference internal" href="#embedding-python">4.4.2. Embedding Python</a></li>
- </ul>
- </li>
- <li><a class="reference internal" href="#alternative-bundles">4.5. Alternative bundles</a></li>
- <li><a class="reference internal" href="#configuring-python">4.6. Configuring Python</a><ul>
- <li><a class="reference internal" href="#excursus-setting-environment-variables">4.6.1. Excursus: Setting environment variables</a></li>
- <li><a class="reference internal" href="#finding-the-python-executable">4.6.2. Finding the Python executable</a></li>
- </ul>
- </li>
- <li><a class="reference internal" href="#utf-8-mode">4.7. UTF-8 mode</a></li>
- <li><a class="reference internal" href="#python-launcher-for-windows">4.8. Python Launcher for Windows</a><ul>
- <li><a class="reference internal" href="#getting-started">4.8.1. Getting started</a><ul>
- <li><a class="reference internal" href="#from-the-command-line">4.8.1.1. From the command-line</a></li>
- <li><a class="reference internal" href="#virtual-environments">4.8.1.2. Virtual environments</a></li>
- <li><a class="reference internal" href="#from-a-script">4.8.1.3. From a script</a></li>
- <li><a class="reference internal" href="#from-file-associations">4.8.1.4. From file associations</a></li>
- </ul>
- </li>
- <li><a class="reference internal" href="#shebang-lines">4.8.2. Shebang Lines</a></li>
- <li><a class="reference internal" href="#arguments-in-shebang-lines">4.8.3. Arguments in shebang lines</a></li>
- <li><a class="reference internal" href="#customization">4.8.4. Customization</a><ul>
- <li><a class="reference internal" href="#customization-via-ini-files">4.8.4.1. Customization via INI files</a></li>
- <li><a class="reference internal" href="#customizing-default-python-versions">4.8.4.2. Customizing default Python versions</a></li>
- </ul>
- </li>
- <li><a class="reference internal" href="#diagnostics">4.8.5. Diagnostics</a></li>
- <li><a class="reference internal" href="#dry-run">4.8.6. Dry Run</a></li>
- <li><a class="reference internal" href="#install-on-demand">4.8.7. Install on demand</a></li>
- <li><a class="reference internal" href="#return-codes">4.8.8. Return codes</a></li>
- </ul>
- </li>
- <li><a class="reference internal" href="#finding-modules">4.9. Finding modules</a></li>
- <li><a class="reference internal" href="#additional-modules">4.10. Additional modules</a><ul>
- <li><a class="reference internal" href="#pywin32">4.10.1. PyWin32</a></li>
- <li><a class="reference internal" href="#cx-freeze">4.10.2. cx_Freeze</a></li>
- </ul>
- </li>
- <li><a class="reference internal" href="#compiling-python-on-windows">4.11. Compiling Python on Windows</a></li>
- <li><a class="reference internal" href="#other-platforms">4.12. Other Platforms</a></li>
- </ul>
- </li>
- </ul>
- </div>
- <div>
- <h4>Previous topic</h4>
- <p class="topless"><a href="configure.html"
- title="previous chapter"><span class="section-number">3. </span>Configure Python</a></p>
- </div>
- <div>
- <h4>Next topic</h4>
- <p class="topless"><a href="mac.html"
- title="next chapter"><span class="section-number">5. </span>Using Python on a Mac</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/windows.rst"
- rel="nofollow">Show Source
- </a>
- </li>
- </ul>
- </div>
- </nav>
- </div>
- </div>
-
- <div class="related" role="navigation" aria-label="related navigation">
- <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="mac.html" title="5. Using Python on a Mac"
- accesskey="N">next</a> |</li>
- <li class="right" >
- <a href="configure.html" title="3. Configure Python"
- 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.12.0 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">4. </span>Using Python on Windows</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" />
- <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-windows">
- <span id="using-on-windows"></span><h1><span class="section-number">4. </span>Using Python on Windows<a class="headerlink" href="#using-python-on-windows" title="Permalink to this headline">¶</a></h1>
- <p>This document aims to give an overview of Windows-specific behaviour you should
- know about when using Python on Microsoft Windows.</p>
- <p>Unlike most Unix systems and services, Windows does not include a system
- supported installation of Python. To make Python available, the CPython team
- has compiled Windows installers (MSI packages) with every <a class="reference external" href="https://www.python.org/download/releases/">release</a> for many years. These installers
- are primarily intended to add a per-user installation of Python, with the
- core interpreter and library being used by a single user. The installer is also
- able to install for all users of a single machine, and a separate ZIP file is
- available for application-local distributions.</p>
- <p>As specified in <span class="target" id="index-0"></span><a class="pep reference external" href="https://peps.python.org/pep-0011/"><strong>PEP 11</strong></a>, a Python release only supports a Windows platform
- while Microsoft considers the platform under extended support. This means that
- Python 3.12 supports Windows 8.1 and newer. If you require Windows 7
- support, please install Python 3.8.</p>
- <p>There are a number of different installers available for Windows, each with
- certain benefits and downsides.</p>
- <p><a class="reference internal" href="#windows-full"><span class="std std-ref">The full installer</span></a> contains all components and is the best option for
- developers using Python for any kind of project.</p>
- <p><a class="reference internal" href="#windows-store"><span class="std std-ref">The Microsoft Store package</span></a> is a simple installation of Python that is suitable for
- running scripts and packages, and using IDLE or other development environments.
- It requires Windows 10 and above, but can be safely installed without corrupting other
- programs. It also provides many convenient commands for launching Python and
- its tools.</p>
- <p><a class="reference internal" href="#windows-nuget"><span class="std std-ref">The nuget.org packages</span></a> are lightweight installations intended for continuous
- integration systems. It can be used to build Python packages or run scripts,
- but is not updateable and has no user interface tools.</p>
- <p><a class="reference internal" href="#windows-embeddable"><span class="std std-ref">The embeddable package</span></a> is a minimal package of Python suitable for
- embedding into a larger application.</p>
- <section id="the-full-installer">
- <span id="windows-full"></span><h2><span class="section-number">4.1. </span>The full installer<a class="headerlink" href="#the-full-installer" title="Permalink to this headline">¶</a></h2>
- <section id="installation-steps">
- <h3><span class="section-number">4.1.1. </span>Installation steps<a class="headerlink" href="#installation-steps" title="Permalink to this headline">¶</a></h3>
- <p>Four Python 3.12 installers are available for download - two each for the
- 32-bit and 64-bit versions of the interpreter. The <em>web installer</em> is a small
- initial download, and it will automatically download the required components as
- necessary. The <em>offline installer</em> includes the components necessary for a
- default installation and only requires an internet connection for optional
- features. See <a class="reference internal" href="#install-layout-option"><span class="std std-ref">Installing Without Downloading</span></a> for other ways to avoid downloading
- during installation.</p>
- <p>After starting the installer, one of two options may be selected:</p>
- <img alt="../_images/win_installer.png" src="../_images/win_installer.png" />
- <p>If you select “Install Now”:</p>
- <ul class="simple">
- <li><p>You will <em>not</em> need to be an administrator (unless a system update for the
- C Runtime Library is required or you install the <a class="reference internal" href="#launcher"><span class="std std-ref">Python Launcher for Windows</span></a> for all
- users)</p></li>
- <li><p>Python will be installed into your user directory</p></li>
- <li><p>The <a class="reference internal" href="#launcher"><span class="std std-ref">Python Launcher for Windows</span></a> will be installed according to the option at the bottom
- of the first page</p></li>
- <li><p>The standard library, test suite, launcher and pip will be installed</p></li>
- <li><p>If selected, the install directory will be added to your <span class="target" id="index-1"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PATH</span></code></p></li>
- <li><p>Shortcuts will only be visible for the current user</p></li>
- </ul>
- <p>Selecting “Customize installation” will allow you to select the features to
- install, the installation location and other options or post-install actions.
- To install debugging symbols or binaries, you will need to use this option.</p>
- <p>To perform an all-users installation, you should select “Customize
- installation”. In this case:</p>
- <ul class="simple">
- <li><p>You may be required to provide administrative credentials or approval</p></li>
- <li><p>Python will be installed into the Program Files directory</p></li>
- <li><p>The <a class="reference internal" href="#launcher"><span class="std std-ref">Python Launcher for Windows</span></a> will be installed into the Windows directory</p></li>
- <li><p>Optional features may be selected during installation</p></li>
- <li><p>The standard library can be pre-compiled to bytecode</p></li>
- <li><p>If selected, the install directory will be added to the system <span class="target" id="index-2"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PATH</span></code></p></li>
- <li><p>Shortcuts are available for all users</p></li>
- </ul>
- </section>
- <section id="removing-the-max-path-limitation">
- <span id="max-path"></span><h3><span class="section-number">4.1.2. </span>Removing the MAX_PATH Limitation<a class="headerlink" href="#removing-the-max-path-limitation" title="Permalink to this headline">¶</a></h3>
- <p>Windows historically has limited path lengths to 260 characters. This meant that
- paths longer than this would not resolve and errors would result.</p>
- <p>In the latest versions of Windows, this limitation can be expanded to
- approximately 32,000 characters. Your administrator will need to activate the
- “Enable Win32 long paths” group policy, or set <code class="docutils literal notranslate"><span class="pre">LongPathsEnabled</span></code> to <code class="docutils literal notranslate"><span class="pre">1</span></code>
- in the registry key
- <code class="docutils literal notranslate"><span class="pre">HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem</span></code>.</p>
- <p>This allows the <a class="reference internal" href="../library/functions.html#open" title="open"><code class="xref py py-func docutils literal notranslate"><span class="pre">open()</span></code></a> function, the <a class="reference internal" href="../library/os.html#module-os" title="os: Miscellaneous operating system interfaces."><code class="xref py py-mod docutils literal notranslate"><span class="pre">os</span></code></a> module and most other
- path functionality to accept and return paths longer than 260 characters.</p>
- <p>After changing the above option, no further configuration is required.</p>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.6: </span>Support for long paths was enabled in Python.</p>
- </div>
- </section>
- <section id="installing-without-ui">
- <span id="install-quiet-option"></span><h3><span class="section-number">4.1.3. </span>Installing Without UI<a class="headerlink" href="#installing-without-ui" title="Permalink to this headline">¶</a></h3>
- <p>All of the options available in the installer UI can also be specified from the
- command line, allowing scripted installers to replicate an installation on many
- machines without user interaction. These options may also be set without
- suppressing the UI in order to change some of the defaults.</p>
- <p>The following options (found by executing the installer with <code class="docutils literal notranslate"><span class="pre">/?</span></code>) can be
- passed into the installer:</p>
- <table class="docutils align-default">
- <colgroup>
- <col style="width: 27%" />
- <col style="width: 73%" />
- </colgroup>
- <thead>
- <tr class="row-odd"><th class="head"><p>Name</p></th>
- <th class="head"><p>Description</p></th>
- </tr>
- </thead>
- <tbody>
- <tr class="row-even"><td><p>/passive</p></td>
- <td><p>to display progress without requiring user interaction</p></td>
- </tr>
- <tr class="row-odd"><td><p>/quiet</p></td>
- <td><p>to install/uninstall without displaying any UI</p></td>
- </tr>
- <tr class="row-even"><td><p>/simple</p></td>
- <td><p>to prevent user customization</p></td>
- </tr>
- <tr class="row-odd"><td><p>/uninstall</p></td>
- <td><p>to remove Python (without confirmation)</p></td>
- </tr>
- <tr class="row-even"><td><p>/layout [directory]</p></td>
- <td><p>to pre-download all components</p></td>
- </tr>
- <tr class="row-odd"><td><p>/log [filename]</p></td>
- <td><p>to specify log files location</p></td>
- </tr>
- </tbody>
- </table>
- <p>All other options are passed as <code class="docutils literal notranslate"><span class="pre">name=value</span></code>, where the value is usually
- <code class="docutils literal notranslate"><span class="pre">0</span></code> to disable a feature, <code class="docutils literal notranslate"><span class="pre">1</span></code> to enable a feature, or a path. The full list
- of available options is shown below.</p>
- <table class="docutils align-default">
- <colgroup>
- <col style="width: 30%" />
- <col style="width: 42%" />
- <col style="width: 29%" />
- </colgroup>
- <thead>
- <tr class="row-odd"><th class="head"><p>Name</p></th>
- <th class="head"><p>Description</p></th>
- <th class="head"><p>Default</p></th>
- </tr>
- </thead>
- <tbody>
- <tr class="row-even"><td><p>InstallAllUsers</p></td>
- <td><p>Perform a system-wide installation.</p></td>
- <td><p>0</p></td>
- </tr>
- <tr class="row-odd"><td><p>TargetDir</p></td>
- <td><p>The installation directory</p></td>
- <td><p>Selected based on
- InstallAllUsers</p></td>
- </tr>
- <tr class="row-even"><td><p>DefaultAllUsersTargetDir</p></td>
- <td><p>The default installation directory
- for all-user installs</p></td>
- <td><p><code class="file docutils literal notranslate"><span class="pre">%ProgramFiles%\Python</span> <span class="pre">X.Y</span></code> or <code class="file docutils literal notranslate"><span class="pre">%ProgramFiles(x86)%\Python</span> <span class="pre">X.Y</span></code></p></td>
- </tr>
- <tr class="row-odd"><td><p>DefaultJustForMeTargetDir</p></td>
- <td><p>The default install directory for
- just-for-me installs</p></td>
- <td><p><code class="file docutils literal notranslate"><span class="pre">%LocalAppData%\Programs\Python\PythonXY</span></code> or
- <code class="file docutils literal notranslate"><span class="pre">%LocalAppData%\Programs\Python\PythonXY-32</span></code> or
- <code class="file docutils literal notranslate"><span class="pre">%LocalAppData%\Programs\Python\PythonXY-64</span></code></p></td>
- </tr>
- <tr class="row-even"><td><p>DefaultCustomTargetDir</p></td>
- <td><p>The default custom install directory
- displayed in the UI</p></td>
- <td><p>(empty)</p></td>
- </tr>
- <tr class="row-odd"><td><p>AssociateFiles</p></td>
- <td><p>Create file associations if the
- launcher is also installed.</p></td>
- <td><p>1</p></td>
- </tr>
- <tr class="row-even"><td><p>CompileAll</p></td>
- <td><p>Compile all <code class="docutils literal notranslate"><span class="pre">.py</span></code> files to
- <code class="docutils literal notranslate"><span class="pre">.pyc</span></code>.</p></td>
- <td><p>0</p></td>
- </tr>
- <tr class="row-odd"><td><p>PrependPath</p></td>
- <td><p>Prepend install and Scripts
- directories to <span class="target" id="index-3"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PATH</span></code> and
- add <code class="docutils literal notranslate"><span class="pre">.PY</span></code> to <span class="target" id="index-4"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PATHEXT</span></code></p></td>
- <td><p>0</p></td>
- </tr>
- <tr class="row-even"><td><p>AppendPath</p></td>
- <td><p>Append install and Scripts
- directories to <span class="target" id="index-5"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PATH</span></code> and
- add <code class="docutils literal notranslate"><span class="pre">.PY</span></code> to <span class="target" id="index-6"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PATHEXT</span></code></p></td>
- <td><p>0</p></td>
- </tr>
- <tr class="row-odd"><td><p>Shortcuts</p></td>
- <td><p>Create shortcuts for the interpreter,
- documentation and IDLE if installed.</p></td>
- <td><p>1</p></td>
- </tr>
- <tr class="row-even"><td><p>Include_doc</p></td>
- <td><p>Install Python manual</p></td>
- <td><p>1</p></td>
- </tr>
- <tr class="row-odd"><td><p>Include_debug</p></td>
- <td><p>Install debug binaries</p></td>
- <td><p>0</p></td>
- </tr>
- <tr class="row-even"><td><p>Include_dev</p></td>
- <td><p>Install developer headers and
- libraries. Omitting this may lead to
- an unusable installation.</p></td>
- <td><p>1</p></td>
- </tr>
- <tr class="row-odd"><td><p>Include_exe</p></td>
- <td><p>Install <code class="file docutils literal notranslate"><span class="pre">python.exe</span></code> and
- related files. Omitting this may
- lead to an unusable installation.</p></td>
- <td><p>1</p></td>
- </tr>
- <tr class="row-even"><td><p>Include_launcher</p></td>
- <td><p>Install <a class="reference internal" href="#launcher"><span class="std std-ref">Python Launcher for Windows</span></a>.</p></td>
- <td><p>1</p></td>
- </tr>
- <tr class="row-odd"><td><p>InstallLauncherAllUsers</p></td>
- <td><p>Installs the launcher for all
- users. Also requires
- <code class="docutils literal notranslate"><span class="pre">Include_launcher</span></code> to be set to 1</p></td>
- <td><p>1</p></td>
- </tr>
- <tr class="row-even"><td><p>Include_lib</p></td>
- <td><p>Install standard library and
- extension modules. Omitting this may
- lead to an unusable installation.</p></td>
- <td><p>1</p></td>
- </tr>
- <tr class="row-odd"><td><p>Include_pip</p></td>
- <td><p>Install bundled pip and setuptools</p></td>
- <td><p>1</p></td>
- </tr>
- <tr class="row-even"><td><p>Include_symbols</p></td>
- <td><p>Install debugging symbols (<code class="docutils literal notranslate"><span class="pre">*.pdb</span></code>)</p></td>
- <td><p>0</p></td>
- </tr>
- <tr class="row-odd"><td><p>Include_tcltk</p></td>
- <td><p>Install Tcl/Tk support and IDLE</p></td>
- <td><p>1</p></td>
- </tr>
- <tr class="row-even"><td><p>Include_test</p></td>
- <td><p>Install standard library test suite</p></td>
- <td><p>1</p></td>
- </tr>
- <tr class="row-odd"><td><p>Include_tools</p></td>
- <td><p>Install utility scripts</p></td>
- <td><p>1</p></td>
- </tr>
- <tr class="row-even"><td><p>LauncherOnly</p></td>
- <td><p>Only installs the launcher. This
- will override most other options.</p></td>
- <td><p>0</p></td>
- </tr>
- <tr class="row-odd"><td><p>SimpleInstall</p></td>
- <td><p>Disable most install UI</p></td>
- <td><p>0</p></td>
- </tr>
- <tr class="row-even"><td><p>SimpleInstallDescription</p></td>
- <td><p>A custom message to display when the
- simplified install UI is used.</p></td>
- <td><p>(empty)</p></td>
- </tr>
- </tbody>
- </table>
- <p>For example, to silently install a default, system-wide Python installation,
- you could use the following command (from an elevated command prompt):</p>
- <div class="highlight-none notranslate"><div class="highlight"><pre><span></span>python-3.9.0.exe /quiet InstallAllUsers=1 PrependPath=1 Include_test=0
- </pre></div>
- </div>
- <p>To allow users to easily install a personal copy of Python without the test
- suite, you could provide a shortcut with the following command. This will
- display a simplified initial page and disallow customization:</p>
- <div class="highlight-none notranslate"><div class="highlight"><pre><span></span>python-3.9.0.exe InstallAllUsers=0 Include_launcher=0 Include_test=0
- SimpleInstall=1 SimpleInstallDescription="Just for me, no test suite."
- </pre></div>
- </div>
- <p>(Note that omitting the launcher also omits file associations, and is only
- recommended for per-user installs when there is also a system-wide installation
- that included the launcher.)</p>
- <p>The options listed above can also be provided in a file named <code class="docutils literal notranslate"><span class="pre">unattend.xml</span></code>
- alongside the executable. This file specifies a list of options and values.
- When a value is provided as an attribute, it will be converted to a number if
- possible. Values provided as element text are always left as strings. This
- example file sets the same options as the previous example:</p>
- <div class="highlight-xml notranslate"><div class="highlight"><pre><span></span><span class="nt"><Options></span>
- <span class="w"> </span><span class="nt"><Option</span><span class="w"> </span><span class="na">Name=</span><span class="s">"InstallAllUsers"</span><span class="w"> </span><span class="na">Value=</span><span class="s">"no"</span><span class="w"> </span><span class="nt">/></span>
- <span class="w"> </span><span class="nt"><Option</span><span class="w"> </span><span class="na">Name=</span><span class="s">"Include_launcher"</span><span class="w"> </span><span class="na">Value=</span><span class="s">"0"</span><span class="w"> </span><span class="nt">/></span>
- <span class="w"> </span><span class="nt"><Option</span><span class="w"> </span><span class="na">Name=</span><span class="s">"Include_test"</span><span class="w"> </span><span class="na">Value=</span><span class="s">"no"</span><span class="w"> </span><span class="nt">/></span>
- <span class="w"> </span><span class="nt"><Option</span><span class="w"> </span><span class="na">Name=</span><span class="s">"SimpleInstall"</span><span class="w"> </span><span class="na">Value=</span><span class="s">"yes"</span><span class="w"> </span><span class="nt">/></span>
- <span class="w"> </span><span class="nt"><Option</span><span class="w"> </span><span class="na">Name=</span><span class="s">"SimpleInstallDescription"</span><span class="nt">></span>Just<span class="w"> </span>for<span class="w"> </span>me,<span class="w"> </span>no<span class="w"> </span>test<span class="w"> </span>suite<span class="nt"></Option></span>
- <span class="nt"></Options></span>
- </pre></div>
- </div>
- </section>
- <section id="installing-without-downloading">
- <span id="install-layout-option"></span><h3><span class="section-number">4.1.4. </span>Installing Without Downloading<a class="headerlink" href="#installing-without-downloading" title="Permalink to this headline">¶</a></h3>
- <p>As some features of Python are not included in the initial installer download,
- selecting those features may require an internet connection. To avoid this
- need, all possible components may be downloaded on-demand to create a complete
- <em>layout</em> that will no longer require an internet connection regardless of the
- selected features. Note that this download may be bigger than required, but
- where a large number of installations are going to be performed it is very
- useful to have a locally cached copy.</p>
- <p>Execute the following command from Command Prompt to download all possible
- required files. Remember to substitute <code class="docutils literal notranslate"><span class="pre">python-3.9.0.exe</span></code> for the actual
- name of your installer, and to create layouts in their own directories to
- avoid collisions between files with the same name.</p>
- <div class="highlight-none notranslate"><div class="highlight"><pre><span></span>python-3.9.0.exe /layout [optional target directory]
- </pre></div>
- </div>
- <p>You may also specify the <code class="docutils literal notranslate"><span class="pre">/quiet</span></code> option to hide the progress display.</p>
- </section>
- <section id="modifying-an-install">
- <h3><span class="section-number">4.1.5. </span>Modifying an install<a class="headerlink" href="#modifying-an-install" title="Permalink to this headline">¶</a></h3>
- <p>Once Python has been installed, you can add or remove features through the
- Programs and Features tool that is part of Windows. Select the Python entry and
- choose “Uninstall/Change” to open the installer in maintenance mode.</p>
- <p>“Modify” allows you to add or remove features by modifying the checkboxes -
- unchanged checkboxes will not install or remove anything. Some options cannot be
- changed in this mode, such as the install directory; to modify these, you will
- need to remove and then reinstall Python completely.</p>
- <p>“Repair” will verify all the files that should be installed using the current
- settings and replace any that have been removed or modified.</p>
- <p>“Uninstall” will remove Python entirely, with the exception of the
- <a class="reference internal" href="#launcher"><span class="std std-ref">Python Launcher for Windows</span></a>, which has its own entry in Programs and Features.</p>
- </section>
- </section>
- <section id="the-microsoft-store-package">
- <span id="windows-store"></span><h2><span class="section-number">4.2. </span>The Microsoft Store package<a class="headerlink" href="#the-microsoft-store-package" title="Permalink to this headline">¶</a></h2>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.7.2.</span></p>
- </div>
- <p>The Microsoft Store package is an easily installable Python interpreter that
- is intended mainly for interactive use, for example, by students.</p>
- <p>To install the package, ensure you have the latest Windows 10 updates and
- search the Microsoft Store app for “Python 3.12”. Ensure that the app
- you select is published by the Python Software Foundation, and install it.</p>
- <div class="admonition warning">
- <p class="admonition-title">Warning</p>
- <p>Python will always be available for free on the Microsoft Store. If you
- are asked to pay for it, you have not selected the correct package.</p>
- </div>
- <p>After installation, Python may be launched by finding it in Start.
- Alternatively, it will be available from any Command Prompt or PowerShell
- session by typing <code class="docutils literal notranslate"><span class="pre">python</span></code>. Further, pip and IDLE may be used by typing
- <code class="docutils literal notranslate"><span class="pre">pip</span></code> or <code class="docutils literal notranslate"><span class="pre">idle</span></code>. IDLE can also be found in Start.</p>
- <p>All three commands are also available with version number suffixes, for
- example, as <code class="docutils literal notranslate"><span class="pre">python3.exe</span></code> and <code class="docutils literal notranslate"><span class="pre">python3.x.exe</span></code> as well as
- <code class="docutils literal notranslate"><span class="pre">python.exe</span></code> (where <code class="docutils literal notranslate"><span class="pre">3.x</span></code> is the specific version you want to launch,
- such as 3.12). Open “Manage App Execution Aliases” through Start to
- select which version of Python is associated with each command. It is
- recommended to make sure that <code class="docutils literal notranslate"><span class="pre">pip</span></code> and <code class="docutils literal notranslate"><span class="pre">idle</span></code> are consistent with
- whichever version of <code class="docutils literal notranslate"><span class="pre">python</span></code> is selected.</p>
- <p>Virtual environments can be created with <code class="docutils literal notranslate"><span class="pre">python</span> <span class="pre">-m</span> <span class="pre">venv</span></code> and activated
- and used as normal.</p>
- <p>If you have installed another version of Python and added it to your
- <code class="docutils literal notranslate"><span class="pre">PATH</span></code> variable, it will be available as <code class="docutils literal notranslate"><span class="pre">python.exe</span></code> rather than the
- one from the Microsoft Store. To access the new installation, use
- <code class="docutils literal notranslate"><span class="pre">python3.exe</span></code> or <code class="docutils literal notranslate"><span class="pre">python3.x.exe</span></code>.</p>
- <p>The <code class="docutils literal notranslate"><span class="pre">py.exe</span></code> launcher will detect this Python installation, but will prefer
- installations from the traditional installer.</p>
- <p>To remove Python, open Settings and use Apps and Features, or else find
- Python in Start and right-click to select Uninstall. Uninstalling will
- remove all packages you installed directly into this Python installation, but
- will not remove any virtual environments</p>
- <section id="known-issues">
- <h3><span class="section-number">4.2.1. </span>Known issues<a class="headerlink" href="#known-issues" title="Permalink to this headline">¶</a></h3>
- <section id="redirection-of-local-data-registry-and-temporary-paths">
- <h4><span class="section-number">4.2.1.1. </span>Redirection of local data, registry, and temporary paths<a class="headerlink" href="#redirection-of-local-data-registry-and-temporary-paths" title="Permalink to this headline">¶</a></h4>
- <p>Because of restrictions on Microsoft Store apps, Python scripts may not have
- full write access to shared locations such as <span class="target" id="index-7"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">TEMP</span></code> and the registry.
- Instead, it will write to a private copy. If your scripts must modify the
- shared locations, you will need to install the full installer.</p>
- <p>At runtime, Python will use a private copy of well-known Windows folders and the registry.
- For example, if the environment variable <span class="target" id="index-8"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">%APPDATA%</span></code> is <code class="file docutils literal notranslate"><span class="pre">c:\Users\<user>\AppData\</span></code>,
- then when writing to <code class="file docutils literal notranslate"><span class="pre">C:\Users\<user>\AppData\Local</span></code> will write to
- <code class="file docutils literal notranslate"><span class="pre">C:\Users\<user>\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\Local\</span></code>.</p>
- <p>When reading files, Windows will return the file from the private folder, or if that does not exist, the
- real Windows directory. For example reading <code class="file docutils literal notranslate"><span class="pre">C:\Windows\System32</span></code> returns the contents of <code class="file docutils literal notranslate"><span class="pre">C:\Windows\System32</span></code>
- plus the contents of <code class="file docutils literal notranslate"><span class="pre">C:\Program</span> <span class="pre">Files\WindowsApps\package_name\VFS\SystemX86</span></code>.</p>
- <p>You can find the real path of any existing file using <a class="reference internal" href="../library/os.path.html#os.path.realpath" title="os.path.realpath"><code class="xref py py-func docutils literal notranslate"><span class="pre">os.path.realpath()</span></code></a>:</p>
- <div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">import</span> <span class="nn">os</span>
- <span class="gp">>>> </span><span class="n">test_file</span> <span class="o">=</span> <span class="s1">'C:</span><span class="se">\\</span><span class="s1">Users</span><span class="se">\\</span><span class="s1">example</span><span class="se">\\</span><span class="s1">AppData</span><span class="se">\\</span><span class="s1">Local</span><span class="se">\\</span><span class="s1">test.txt'</span>
- <span class="gp">>>> </span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">realpath</span><span class="p">(</span><span class="n">test_file</span><span class="p">)</span>
- <span class="go">'C:\\Users\\example\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\\LocalCache\\Local\\test.txt'</span>
- </pre></div>
- </div>
- <p>When writing to the Windows Registry, the following behaviors exist:</p>
- <ul class="simple">
- <li><p>Reading from <code class="docutils literal notranslate"><span class="pre">HKLM\\Software</span></code> is allowed and results are merged with the <code class="file docutils literal notranslate"><span class="pre">registry.dat</span></code> file in the package.</p></li>
- <li><p>Writing to <code class="docutils literal notranslate"><span class="pre">HKLM\\Software</span></code> is not allowed if the corresponding key/value exists, i.e. modifying existing keys.</p></li>
- <li><p>Writing to <code class="docutils literal notranslate"><span class="pre">HKLM\\Software</span></code> is allowed as long as a corresponding key/value does not exist in the package
- and the user has the correct access permissions.</p></li>
- </ul>
- <p>For more detail on the technical basis for these limitations, please consult
- Microsoft’s documentation on packaged full-trust apps, currently available at
- <a class="reference external" href="https://docs.microsoft.com/en-us/windows/msix/desktop/desktop-to-uwp-behind-the-scenes">docs.microsoft.com/en-us/windows/msix/desktop/desktop-to-uwp-behind-the-scenes</a></p>
- </section>
- </section>
- </section>
- <section id="the-nuget-org-packages">
- <span id="windows-nuget"></span><h2><span class="section-number">4.3. </span>The nuget.org packages<a class="headerlink" href="#the-nuget-org-packages" title="Permalink to this headline">¶</a></h2>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.5.2.</span></p>
- </div>
- <p>The nuget.org package is a reduced size Python environment intended for use on
- continuous integration and build systems that do not have a system-wide
- install of Python. While nuget is “the package manager for .NET”, it also works
- perfectly fine for packages containing build-time tools.</p>
- <p>Visit <a class="reference external" href="https://www.nuget.org/">nuget.org</a> for the most up-to-date information
- on using nuget. What follows is a summary that is sufficient for Python
- developers.</p>
- <p>The <code class="docutils literal notranslate"><span class="pre">nuget.exe</span></code> command line tool may be downloaded directly from
- <code class="docutils literal notranslate"><span class="pre">https://aka.ms/nugetclidl</span></code>, for example, using curl or PowerShell. With the
- tool, the latest version of Python for 64-bit or 32-bit machines is installed
- using:</p>
- <div class="highlight-none notranslate"><div class="highlight"><pre><span></span>nuget.exe install python -ExcludeVersion -OutputDirectory .
- nuget.exe install pythonx86 -ExcludeVersion -OutputDirectory .
- </pre></div>
- </div>
- <p>To select a particular version, add a <code class="docutils literal notranslate"><span class="pre">-Version</span> <span class="pre">3.x.y</span></code>. The output directory
- may be changed from <code class="docutils literal notranslate"><span class="pre">.</span></code>, and the package will be installed into a
- subdirectory. By default, the subdirectory is named the same as the package,
- and without the <code class="docutils literal notranslate"><span class="pre">-ExcludeVersion</span></code> option this name will include the specific
- version installed. Inside the subdirectory is a <code class="docutils literal notranslate"><span class="pre">tools</span></code> directory that
- contains the Python installation:</p>
- <div class="highlight-doscon notranslate"><div class="highlight"><pre><span></span><span class="go"># Without -ExcludeVersion</span>
- <span class="gp">></span> .\python.3.5.2\tools\python.exe -V
- <span class="go">Python 3.5.2</span>
- <span class="go"># With -ExcludeVersion</span>
- <span class="gp">></span> .\python\tools\python.exe -V
- <span class="go">Python 3.5.2</span>
- </pre></div>
- </div>
- <p>In general, nuget packages are not upgradeable, and newer versions should be
- installed side-by-side and referenced using the full path. Alternatively,
- delete the package directory manually and install it again. Many CI systems
- will do this automatically if they do not preserve files between builds.</p>
- <p>Alongside the <code class="docutils literal notranslate"><span class="pre">tools</span></code> directory is a <code class="docutils literal notranslate"><span class="pre">build\native</span></code> directory. This
- contains a MSBuild properties file <code class="docutils literal notranslate"><span class="pre">python.props</span></code> that can be used in a
- C++ project to reference the Python install. Including the settings will
- automatically use the headers and import libraries in your build.</p>
- <p>The package information pages on nuget.org are
- <a class="reference external" href="https://www.nuget.org/packages/python">www.nuget.org/packages/python</a>
- for the 64-bit version and <a class="reference external" href="https://www.nuget.org/packages/pythonx86">www.nuget.org/packages/pythonx86</a> for the 32-bit version.</p>
- </section>
- <section id="the-embeddable-package">
- <span id="windows-embeddable"></span><h2><span class="section-number">4.4. </span>The embeddable package<a class="headerlink" href="#the-embeddable-package" title="Permalink to this headline">¶</a></h2>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.5.</span></p>
- </div>
- <p>The embedded distribution is a ZIP file containing a minimal Python environment.
- It is intended for acting as part of another application, rather than being
- directly accessed by end-users.</p>
- <p>When extracted, the embedded distribution is (almost) fully isolated from the
- user’s system, including environment variables, system registry settings, and
- installed packages. The standard library is included as pre-compiled and
- optimized <code class="docutils literal notranslate"><span class="pre">.pyc</span></code> files in a ZIP, and <code class="docutils literal notranslate"><span class="pre">python3.dll</span></code>, <code class="docutils literal notranslate"><span class="pre">python37.dll</span></code>,
- <code class="docutils literal notranslate"><span class="pre">python.exe</span></code> and <code class="docutils literal notranslate"><span class="pre">pythonw.exe</span></code> are all provided. Tcl/tk (including all
- dependents, such as Idle), pip and the Python documentation are not included.</p>
- <div class="admonition note">
- <p class="admonition-title">Note</p>
- <p>The embedded distribution does not include the <a class="reference external" href="https://docs.microsoft.com/en-US/cpp/windows/latest-supported-vc-redist#visual-studio-2015-2017-2019-and-2022">Microsoft C Runtime</a> and it is
- the responsibility of the application installer to provide this. The
- runtime may have already been installed on a user’s system previously or
- automatically via Windows Update, and can be detected by finding
- <code class="docutils literal notranslate"><span class="pre">ucrtbase.dll</span></code> in the system directory.</p>
- </div>
- <p>Third-party packages should be installed by the application installer alongside
- the embedded distribution. Using pip to manage dependencies as for a regular
- Python installation is not supported with this distribution, though with some
- care it may be possible to include and use pip for automatic updates. In
- general, third-party packages should be treated as part of the application
- (“vendoring”) so that the developer can ensure compatibility with newer
- versions before providing updates to users.</p>
- <p>The two recommended use cases for this distribution are described below.</p>
- <section id="python-application">
- <h3><span class="section-number">4.4.1. </span>Python Application<a class="headerlink" href="#python-application" title="Permalink to this headline">¶</a></h3>
- <p>An application written in Python does not necessarily require users to be aware
- of that fact. The embedded distribution may be used in this case to include a
- private version of Python in an install package. Depending on how transparent it
- should be (or conversely, how professional it should appear), there are two
- options.</p>
- <p>Using a specialized executable as a launcher requires some coding, but provides
- the most transparent experience for users. With a customized launcher, there are
- no obvious indications that the program is running on Python: icons can be
- customized, company and version information can be specified, and file
- associations behave properly. In most cases, a custom launcher should simply be
- able to call <code class="docutils literal notranslate"><span class="pre">Py_Main</span></code> with a hard-coded command line.</p>
- <p>The simpler approach is to provide a batch file or generated shortcut that
- directly calls the <code class="docutils literal notranslate"><span class="pre">python.exe</span></code> or <code class="docutils literal notranslate"><span class="pre">pythonw.exe</span></code> with the required
- command-line arguments. In this case, the application will appear to be Python
- and not its actual name, and users may have trouble distinguishing it from other
- running Python processes or file associations.</p>
- <p>With the latter approach, packages should be installed as directories alongside
- the Python executable to ensure they are available on the path. With the
- specialized launcher, packages can be located in other locations as there is an
- opportunity to specify the search path before launching the application.</p>
- </section>
- <section id="embedding-python">
- <h3><span class="section-number">4.4.2. </span>Embedding Python<a class="headerlink" href="#embedding-python" title="Permalink to this headline">¶</a></h3>
- <p>Applications written in native code often require some form of scripting
- language, and the embedded Python distribution can be used for this purpose. In
- general, the majority of the application is in native code, and some part will
- either invoke <code class="docutils literal notranslate"><span class="pre">python.exe</span></code> or directly use <code class="docutils literal notranslate"><span class="pre">python3.dll</span></code>. For either case,
- extracting the embedded distribution to a subdirectory of the application
- installation is sufficient to provide a loadable Python interpreter.</p>
- <p>As with the application use, packages can be installed to any location as there
- is an opportunity to specify search paths before initializing the interpreter.
- Otherwise, there is no fundamental differences between using the embedded
- distribution and a regular installation.</p>
- </section>
- </section>
- <section id="alternative-bundles">
- <h2><span class="section-number">4.5. </span>Alternative bundles<a class="headerlink" href="#alternative-bundles" title="Permalink to this headline">¶</a></h2>
- <p>Besides the standard CPython distribution, there are modified packages including
- additional functionality. The following is a list of popular versions and their
- key features:</p>
- <dl>
- <dt><a class="reference external" href="https://www.activestate.com/products/python/">ActivePython</a></dt><dd><p>Installer with multi-platform compatibility, documentation, PyWin32</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://www.enthought.com/edm/">Enthought Deployment Manager</a></dt><dd><p>“The Next Generation Python Environment and Package Manager”.</p>
- <p>Previously Enthought provided Canopy, but it <a class="reference external" href="https://support.enthought.com/hc/en-us/articles/360038600051-Canopy-GUI-end-of-life-transition-to-the-Enthought-Deployment-Manager-EDM-and-Visual-Studio-Code">reached end of life in 2016</a>.</p>
- </dd>
- <dt><a class="reference external" href="https://winpython.github.io/">WinPython</a></dt><dd><p>Windows-specific distribution with prebuilt scientific packages and
- tools for building packages.</p>
- </dd>
- </dl>
- <p>Note that these packages may 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="configuring-python">
- <h2><span class="section-number">4.6. </span>Configuring Python<a class="headerlink" href="#configuring-python" title="Permalink to this headline">¶</a></h2>
- <p>To run Python conveniently from a command prompt, you might consider changing
- some default environment variables in Windows. While the installer provides an
- option to configure the PATH and PATHEXT variables for you, this is only
- reliable for a single, system-wide installation. If you regularly use multiple
- versions of Python, consider using the <a class="reference internal" href="#launcher"><span class="std std-ref">Python Launcher for Windows</span></a>.</p>
- <section id="excursus-setting-environment-variables">
- <span id="setting-envvars"></span><h3><span class="section-number">4.6.1. </span>Excursus: Setting environment variables<a class="headerlink" href="#excursus-setting-environment-variables" title="Permalink to this headline">¶</a></h3>
- <p>Windows allows environment variables to be configured permanently at both the
- User level and the System level, or temporarily in a command prompt.</p>
- <p>To temporarily set environment variables, open Command Prompt and use the
- <strong class="command">set</strong> command:</p>
- <div class="highlight-doscon notranslate"><div class="highlight"><pre><span></span><span class="gp">C:\></span><span class="k">set</span> <span class="nv">PATH</span><span class="p">=</span>C:\Program Files\Python 3.9;<span class="nv">%PATH%</span>
- <span class="gp">C:\></span><span class="k">set</span> <span class="nv">PYTHONPATH</span><span class="p">=</span><span class="nv">%PYTHONPATH%</span>;C:\My_python_lib
- <span class="gp">C:\></span>python
- </pre></div>
- </div>
- <p>These changes will apply to any further commands executed in that console, and
- will be inherited by any applications started from the console.</p>
- <p>Including the variable name within percent signs will expand to the existing
- value, allowing you to add your new value at either the start or the end.
- Modifying <span class="target" id="index-9"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PATH</span></code> by adding the directory containing
- <strong class="program">python.exe</strong> to the start is a common way to ensure the correct version
- of Python is launched.</p>
- <p>To permanently modify the default environment variables, click Start and search
- for ‘edit environment variables’, or open System properties, <span class="guilabel">Advanced
- system settings</span> and click the <span class="guilabel">Environment Variables</span> button.
- In this dialog, you can add or modify User and System variables. To change
- System variables, you need non-restricted access to your machine
- (i.e. Administrator rights).</p>
- <div class="admonition note">
- <p class="admonition-title">Note</p>
- <p>Windows will concatenate User variables <em>after</em> System variables, which may
- cause unexpected results when modifying <span class="target" id="index-10"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PATH</span></code>.</p>
- <p>The <span class="target" id="index-11"></span><a class="reference internal" href="cmdline.html#envvar-PYTHONPATH"><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PYTHONPATH</span></code></a> variable is used by all versions of Python,
- so you should not permanently configure it unless the listed paths
- only include code that is compatible with all of your installed Python
- versions.</p>
- </div>
- <div class="admonition seealso">
- <p class="admonition-title">See also</p>
- <dl class="simple">
- <dt><a class="reference external" href="https://docs.microsoft.com/en-us/windows/win32/procthread/environment-variables">https://docs.microsoft.com/en-us/windows/win32/procthread/environment-variables</a></dt><dd><p>Overview of environment variables on Windows</p>
- </dd>
- <dt><a class="reference external" href="https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/set_1">https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/set_1</a></dt><dd><p>The <code class="docutils literal notranslate"><span class="pre">set</span></code> command, for temporarily modifying environment variables</p>
- </dd>
- <dt><a class="reference external" href="https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/setx">https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/setx</a></dt><dd><p>The <code class="docutils literal notranslate"><span class="pre">setx</span></code> command, for permanently modifying environment variables</p>
- </dd>
- </dl>
- </div>
- </section>
- <section id="finding-the-python-executable">
- <span id="windows-path-mod"></span><h3><span class="section-number">4.6.2. </span>Finding the Python executable<a class="headerlink" href="#finding-the-python-executable" title="Permalink to this headline">¶</a></h3>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.5.</span></p>
- </div>
- <p>Besides using the automatically created start menu entry for the Python
- interpreter, you might want to start Python in the command prompt. The
- installer has an option to set that up for you.</p>
- <p>On the first page of the installer, an option labelled “Add Python to PATH”
- may be selected to have the installer add the install location into the
- <span class="target" id="index-12"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PATH</span></code>. The location of the <code class="file docutils literal notranslate"><span class="pre">Scripts\</span></code> folder is also added.
- This allows you to type <strong class="command">python</strong> to run the interpreter, and
- <strong class="command">pip</strong> for the package installer. Thus, you can also execute your
- scripts with command line options, see <a class="reference internal" href="cmdline.html#using-on-cmdline"><span class="std std-ref">Command line</span></a> documentation.</p>
- <p>If you don’t enable this option at install time, you can always re-run the
- installer, select Modify, and enable it. Alternatively, you can manually
- modify the <span class="target" id="index-13"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PATH</span></code> using the directions in <a class="reference internal" href="#setting-envvars"><span class="std std-ref">Excursus: Setting environment variables</span></a>. You
- need to set your <span class="target" id="index-14"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PATH</span></code> environment variable to include the directory
- of your Python installation, delimited by a semicolon from other entries. An
- example variable could look like this (assuming the first two entries already
- existed):</p>
- <div class="highlight-none notranslate"><div class="highlight"><pre><span></span>C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files\Python 3.9
- </pre></div>
- </div>
- </section>
- </section>
- <section id="utf-8-mode">
- <span id="win-utf8-mode"></span><h2><span class="section-number">4.7. </span>UTF-8 mode<a class="headerlink" href="#utf-8-mode" title="Permalink to this headline">¶</a></h2>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.7.</span></p>
- </div>
- <p>Windows still uses legacy encodings for the system encoding (the ANSI Code
- Page). Python uses it for the default encoding of text files (e.g.
- <a class="reference internal" href="../library/locale.html#locale.getencoding" title="locale.getencoding"><code class="xref py py-func docutils literal notranslate"><span class="pre">locale.getencoding()</span></code></a>).</p>
- <p>This may cause issues because UTF-8 is widely used on the internet
- and most Unix systems, including WSL (Windows Subsystem for Linux).</p>
- <p>You can use the <a class="reference internal" href="../library/os.html#utf8-mode"><span class="std std-ref">Python UTF-8 Mode</span></a> to change the default text
- encoding to UTF-8. You can enable the <a class="reference internal" href="../library/os.html#utf8-mode"><span class="std std-ref">Python UTF-8 Mode</span></a> via
- the <code class="docutils literal notranslate"><span class="pre">-X</span> <span class="pre">utf8</span></code> command line option, or the <code class="docutils literal notranslate"><span class="pre">PYTHONUTF8=1</span></code> environment
- variable. See <span class="target" id="index-15"></span><a class="reference internal" href="cmdline.html#envvar-PYTHONUTF8"><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PYTHONUTF8</span></code></a> for enabling UTF-8 mode, and
- <a class="reference internal" href="#setting-envvars"><span class="std std-ref">Excursus: Setting environment variables</span></a> for how to modify environment variables.</p>
- <p>When the <a class="reference internal" href="../library/os.html#utf8-mode"><span class="std std-ref">Python UTF-8 Mode</span></a> is enabled, you can still use the
- system encoding (the ANSI Code Page) via the “mbcs” codec.</p>
- <p>Note that adding <code class="docutils literal notranslate"><span class="pre">PYTHONUTF8=1</span></code> to the default environment variables
- will affect all Python 3.7+ applications on your system.
- If you have any Python 3.7+ applications which rely on the legacy
- system encoding, it is recommended to set the environment variable
- temporarily or use the <code class="docutils literal notranslate"><span class="pre">-X</span> <span class="pre">utf8</span></code> command line option.</p>
- <div class="admonition note">
- <p class="admonition-title">Note</p>
- <p>Even when UTF-8 mode is disabled, Python uses UTF-8 by default
- on Windows for:</p>
- <ul class="simple">
- <li><p>Console I/O including standard I/O (see <span class="target" id="index-16"></span><a class="pep reference external" href="https://peps.python.org/pep-0528/"><strong>PEP 528</strong></a> for details).</p></li>
- <li><p>The <a class="reference internal" href="../glossary.html#term-filesystem-encoding-and-error-handler"><span class="xref std std-term">filesystem encoding</span></a>
- (see <span class="target" id="index-17"></span><a class="pep reference external" href="https://peps.python.org/pep-0529/"><strong>PEP 529</strong></a> for details).</p></li>
- </ul>
- </div>
- </section>
- <section id="python-launcher-for-windows">
- <span id="launcher"></span><h2><span class="section-number">4.8. </span>Python Launcher for Windows<a class="headerlink" href="#python-launcher-for-windows" title="Permalink to this headline">¶</a></h2>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.3.</span></p>
- </div>
- <p>The Python launcher for Windows is a utility which aids in locating and
- executing of different Python versions. It allows scripts (or the
- command-line) to indicate a preference for a specific Python version, and
- will locate and execute that version.</p>
- <p>Unlike the <span class="target" id="index-18"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PATH</span></code> variable, the launcher will correctly select the most
- appropriate version of Python. It will prefer per-user installations over
- system-wide ones, and orders by language version rather than using the most
- recently installed version.</p>
- <p>The launcher was originally specified in <span class="target" id="index-19"></span><a class="pep reference external" href="https://peps.python.org/pep-0397/"><strong>PEP 397</strong></a>.</p>
- <section id="getting-started">
- <h3><span class="section-number">4.8.1. </span>Getting started<a class="headerlink" href="#getting-started" title="Permalink to this headline">¶</a></h3>
- <section id="from-the-command-line">
- <h4><span class="section-number">4.8.1.1. </span>From the command-line<a class="headerlink" href="#from-the-command-line" title="Permalink to this headline">¶</a></h4>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.6.</span></p>
- </div>
- <p>System-wide installations of Python 3.3 and later will put the launcher on your
- <span class="target" id="index-20"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PATH</span></code>. The launcher is compatible with all available versions of
- Python, so it does not matter which version is installed. To check that the
- launcher is available, execute the following command in Command Prompt:</p>
- <div class="highlight-none notranslate"><div class="highlight"><pre><span></span>py
- </pre></div>
- </div>
- <p>You should find that the latest version of Python you have installed is
- started - it can be exited as normal, and any additional command-line
- arguments specified will be sent directly to Python.</p>
- <p>If you have multiple versions of Python installed (e.g., 3.7 and 3.12) you
- will have noticed that Python 3.12 was started - to launch Python 3.7, try
- the command:</p>
- <div class="highlight-none notranslate"><div class="highlight"><pre><span></span>py -3.7
- </pre></div>
- </div>
- <p>If you want the latest version of Python 2 you have installed, try the
- command:</p>
- <div class="highlight-none notranslate"><div class="highlight"><pre><span></span>py -2
- </pre></div>
- </div>
- <p>If you see the following error, you do not have the launcher installed:</p>
- <div class="highlight-none notranslate"><div class="highlight"><pre><span></span>'py' is not recognized as an internal or external command,
- operable program or batch file.
- </pre></div>
- </div>
- <p>The command:</p>
- <div class="highlight-none notranslate"><div class="highlight"><pre><span></span>py --list
- </pre></div>
- </div>
- <p>displays the currently installed version(s) of Python.</p>
- <p>The <code class="docutils literal notranslate"><span class="pre">-x.y</span></code> argument is the short form of the <code class="docutils literal notranslate"><span class="pre">-V:Company/Tag</span></code> argument,
- which allows selecting a specific Python runtime, including those that may have
- come from somewhere other than python.org. Any runtime registered by following
- <span class="target" id="index-21"></span><a class="pep reference external" href="https://peps.python.org/pep-0514/"><strong>PEP 514</strong></a> will be discoverable. The <code class="docutils literal notranslate"><span class="pre">--list</span></code> command lists all available
- runtimes using the <code class="docutils literal notranslate"><span class="pre">-V:</span></code> format.</p>
- <p>When using the <code class="docutils literal notranslate"><span class="pre">-V:</span></code> argument, specifying the Company will limit selection to
- runtimes from that provider, while specifying only the Tag will select from all
- providers. Note that omitting the slash implies a tag:</p>
- <div class="highlight-none notranslate"><div class="highlight"><pre><span></span># Select any '3.*' tagged runtime
- py -V:3
- # Select any 'PythonCore' released runtime
- py -V:PythonCore/
- # Select PythonCore's latest Python 3 runtime
- py -V:PythonCore/3
- </pre></div>
- </div>
- <p>The short form of the argument (<code class="docutils literal notranslate"><span class="pre">-3</span></code>) only ever selects from core Python
- releases, and not other distributions. However, the longer form (<code class="docutils literal notranslate"><span class="pre">-V:3</span></code>) will
- select from any.</p>
- <p>The Company is matched on the full string, case-insenitive. The Tag is matched
- oneither the full string, or a prefix, provided the next character is a dot or a
- hyphen. This allows <code class="docutils literal notranslate"><span class="pre">-V:3.1</span></code> to match <code class="docutils literal notranslate"><span class="pre">3.1-32</span></code>, but not <code class="docutils literal notranslate"><span class="pre">3.10</span></code>. Tags are
- sorted using numerical ordering (<code class="docutils literal notranslate"><span class="pre">3.10</span></code> is newer than <code class="docutils literal notranslate"><span class="pre">3.1</span></code>), but are
- compared using text (<code class="docutils literal notranslate"><span class="pre">-V:3.01</span></code> does not match <code class="docutils literal notranslate"><span class="pre">3.1</span></code>).</p>
- </section>
- <section id="virtual-environments">
- <h4><span class="section-number">4.8.1.2. </span>Virtual environments<a class="headerlink" href="#virtual-environments" title="Permalink to this headline">¶</a></h4>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.5.</span></p>
- </div>
- <p>If the launcher is run with no explicit Python version specification, and a
- virtual environment (created with the standard library <a class="reference internal" href="../library/venv.html#module-venv" title="venv: Creation of virtual environments."><code class="xref py py-mod docutils literal notranslate"><span class="pre">venv</span></code></a> module or
- the external <code class="docutils literal notranslate"><span class="pre">virtualenv</span></code> tool) active, the launcher will run the virtual
- environment’s interpreter rather than the global one. To run the global
- interpreter, either deactivate the virtual environment, or explicitly specify
- the global Python version.</p>
- </section>
- <section id="from-a-script">
- <h4><span class="section-number">4.8.1.3. </span>From a script<a class="headerlink" href="#from-a-script" title="Permalink to this headline">¶</a></h4>
- <p>Let’s create a test Python script - create a file called <code class="docutils literal notranslate"><span class="pre">hello.py</span></code> with the
- following contents</p>
- <div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="ch">#! python</span>
- <span class="kn">import</span> <span class="nn">sys</span>
- <span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">"hello from Python </span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">version</span><span class="p">,))</span>
- </pre></div>
- </div>
- <p>From the directory in which hello.py lives, execute the command:</p>
- <div class="highlight-none notranslate"><div class="highlight"><pre><span></span>py hello.py
- </pre></div>
- </div>
- <p>You should notice the version number of your latest Python 2.x installation
- is printed. Now try changing the first line to be:</p>
- <div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="ch">#! python3</span>
- </pre></div>
- </div>
- <p>Re-executing the command should now print the latest Python 3.x information.
- As with the above command-line examples, you can specify a more explicit
- version qualifier. Assuming you have Python 3.7 installed, try changing
- the first line to <code class="docutils literal notranslate"><span class="pre">#!</span> <span class="pre">python3.7</span></code> and you should find the 3.7
- version information printed.</p>
- <p>Note that unlike interactive use, a bare “python” will use the latest
- version of Python 2.x that you have installed. This is for backward
- compatibility and for compatibility with Unix, where the command <code class="docutils literal notranslate"><span class="pre">python</span></code>
- typically refers to Python 2.</p>
- </section>
- <section id="from-file-associations">
- <h4><span class="section-number">4.8.1.4. </span>From file associations<a class="headerlink" href="#from-file-associations" title="Permalink to this headline">¶</a></h4>
- <p>The launcher should have been associated with Python files (i.e. <code class="docutils literal notranslate"><span class="pre">.py</span></code>,
- <code class="docutils literal notranslate"><span class="pre">.pyw</span></code>, <code class="docutils literal notranslate"><span class="pre">.pyc</span></code> files) when it was installed. This means that
- when you double-click on one of these files from Windows explorer the launcher
- will be used, and therefore you can use the same facilities described above to
- have the script specify the version which should be used.</p>
- <p>The key benefit of this is that a single launcher can support multiple Python
- versions at the same time depending on the contents of the first line.</p>
- </section>
- </section>
- <section id="shebang-lines">
- <h3><span class="section-number">4.8.2. </span>Shebang Lines<a class="headerlink" href="#shebang-lines" title="Permalink to this headline">¶</a></h3>
- <p>If the first line of a script file starts with <code class="docutils literal notranslate"><span class="pre">#!</span></code>, it is known as a
- “shebang” line. Linux and other Unix like operating systems have native
- support for such lines and they are commonly used on such systems to indicate
- how a script should be executed. This launcher allows the same facilities to
- be used with Python scripts on Windows and the examples above demonstrate their
- use.</p>
- <p>To allow shebang lines in Python scripts to be portable between Unix and
- Windows, this launcher supports a number of ‘virtual’ commands to specify
- which interpreter to use. The supported virtual commands are:</p>
- <ul class="simple">
- <li><p><code class="docutils literal notranslate"><span class="pre">/usr/bin/env</span></code></p></li>
- <li><p><code class="docutils literal notranslate"><span class="pre">/usr/bin/python</span></code></p></li>
- <li><p><code class="docutils literal notranslate"><span class="pre">/usr/local/bin/python</span></code></p></li>
- <li><p><code class="docutils literal notranslate"><span class="pre">python</span></code></p></li>
- </ul>
- <p>For example, if the first line of your script starts with</p>
- <div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="ch">#! /usr/bin/python</span>
- </pre></div>
- </div>
- <p>The default Python will be located and used. As many Python scripts written
- to work on Unix will already have this line, you should find these scripts can
- be used by the launcher without modification. If you are writing a new script
- on Windows which you hope will be useful on Unix, you should use one of the
- shebang lines starting with <code class="docutils literal notranslate"><span class="pre">/usr</span></code>.</p>
- <p>Any of the above virtual commands can be suffixed with an explicit version
- (either just the major version, or the major and minor version).
- Furthermore the 32-bit version can be requested by adding “-32” after the
- minor version. I.e. <code class="docutils literal notranslate"><span class="pre">/usr/bin/python3.7-32</span></code> will request usage of the
- 32-bit python 3.7.</p>
- <div class="versionadded">
- <p><span class="versionmodified added">New in version 3.7: </span>Beginning with python launcher 3.7 it is possible to request 64-bit version
- by the “-64” suffix. Furthermore it is possible to specify a major and
- architecture without minor (i.e. <code class="docutils literal notranslate"><span class="pre">/usr/bin/python3-64</span></code>).</p>
- </div>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.11: </span>The “-64” suffix is deprecated, and now implies “any architecture that is
- not provably i386/32-bit”. To request a specific environment, use the new
- <code class="samp docutils literal notranslate"><span class="pre">-V:</span><em><span class="pre">TAG</span></em></code> argument with the complete tag.</p>
- </div>
- <p>The <code class="docutils literal notranslate"><span class="pre">/usr/bin/env</span></code> form of shebang line has one further special property.
- Before looking for installed Python interpreters, this form will search the
- executable <span class="target" id="index-22"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PATH</span></code> for a Python executable matching the name provided
- as the first argument. This corresponds to the behaviour of the Unix <code class="docutils literal notranslate"><span class="pre">env</span></code>
- program, which performs a <span class="target" id="index-23"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PATH</span></code> search.
- If an executable matching the first argument after the <code class="docutils literal notranslate"><span class="pre">env</span></code> command cannot
- be found, but the argument starts with <code class="docutils literal notranslate"><span class="pre">python</span></code>, it will be handled as
- described for the other virtual commands.
- The environment variable <span class="target" id="index-24"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PYLAUNCHER_NO_SEARCH_PATH</span></code> may be set
- (to any value) to skip this search of <span class="target" id="index-25"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PATH</span></code>.</p>
- <p>Shebang lines that do not match any of these patterns are looked up in the
- <code class="docutils literal notranslate"><span class="pre">[commands]</span></code> section of the launcher’s <a class="reference internal" href="#launcher-ini"><span class="std std-ref">.INI file</span></a>.
- This may be used to handle certain commands in a way that makes sense for your
- system. The name of the command must be a single argument (no spaces in the
- shebang executable), and the value substituted is the full path to the
- executable (additional arguments specified in the .INI will be quoted as part
- of the filename).</p>
- <div class="highlight-ini notranslate"><div class="highlight"><pre><span></span><span class="k">[commands]</span>
- <span class="na">/bin/xpython</span><span class="o">=</span><span class="s">C:\Program Files\XPython\python.exe</span>
- </pre></div>
- </div>
- <p>Any commands not found in the .INI file are treated as <strong>Windows</strong> executable
- paths that are absolute or relative to the directory containing the script file.
- This is a convenience for Windows-only scripts, such as those generated by an
- installer, since the behavior is not compatible with Unix-style shells.
- These paths may be quoted, and may include multiple arguments, after which the
- path to the script and any additional arguments will be appended.</p>
- </section>
- <section id="arguments-in-shebang-lines">
- <h3><span class="section-number">4.8.3. </span>Arguments in shebang lines<a class="headerlink" href="#arguments-in-shebang-lines" title="Permalink to this headline">¶</a></h3>
- <p>The shebang lines can also specify additional options to be passed to the
- Python interpreter. For example, if you have a shebang line:</p>
- <div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="ch">#! /usr/bin/python -v</span>
- </pre></div>
- </div>
- <p>Then Python will be started with the <code class="docutils literal notranslate"><span class="pre">-v</span></code> option</p>
- </section>
- <section id="customization">
- <h3><span class="section-number">4.8.4. </span>Customization<a class="headerlink" href="#customization" title="Permalink to this headline">¶</a></h3>
- <section id="customization-via-ini-files">
- <span id="launcher-ini"></span><h4><span class="section-number">4.8.4.1. </span>Customization via INI files<a class="headerlink" href="#customization-via-ini-files" title="Permalink to this headline">¶</a></h4>
- <p>Two .ini files will be searched by the launcher - <code class="docutils literal notranslate"><span class="pre">py.ini</span></code> in the current
- user’s application data directory (<code class="docutils literal notranslate"><span class="pre">%LOCALAPPDATA%</span></code> or <code class="docutils literal notranslate"><span class="pre">$env:LocalAppData</span></code>)
- and <code class="docutils literal notranslate"><span class="pre">py.ini</span></code> in the same directory as the launcher. The same .ini files are
- used for both the ‘console’ version of the launcher (i.e. py.exe) and for the
- ‘windows’ version (i.e. pyw.exe).</p>
- <p>Customization specified in the “application directory” will have precedence over
- the one next to the executable, so a user, who may not have write access to the
- .ini file next to the launcher, can override commands in that global .ini file.</p>
- </section>
- <section id="customizing-default-python-versions">
- <h4><span class="section-number">4.8.4.2. </span>Customizing default Python versions<a class="headerlink" href="#customizing-default-python-versions" title="Permalink to this headline">¶</a></h4>
- <p>In some cases, a version qualifier can be included in a command to dictate
- which version of Python will be used by the command. A version qualifier
- starts with a major version number and can optionally be followed by a period
- (‘.’) and a minor version specifier. Furthermore it is possible to specify
- if a 32 or 64 bit implementation shall be requested by adding “-32” or “-64”.</p>
- <p>For example, a shebang line of <code class="docutils literal notranslate"><span class="pre">#!python</span></code> has no version qualifier, while
- <code class="docutils literal notranslate"><span class="pre">#!python3</span></code> has a version qualifier which specifies only a major version.</p>
- <p>If no version qualifiers are found in a command, the environment
- variable <span class="target" id="index-26"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PY_PYTHON</span></code> can be set to specify the default version
- qualifier. If it is not set, the default is “3”. The variable can
- specify any value that may be passed on the command line, such as “3”,
- “3.7”, “3.7-32” or “3.7-64”. (Note that the “-64” option is only
- available with the launcher included with Python 3.7 or newer.)</p>
- <p>If no minor version qualifiers are found, the environment variable
- <code class="docutils literal notranslate"><span class="pre">PY_PYTHON{major}</span></code> (where <code class="docutils literal notranslate"><span class="pre">{major}</span></code> is the current major version qualifier
- as determined above) can be set to specify the full version. If no such option
- is found, the launcher will enumerate the installed Python versions and use
- the latest minor release found for the major version, which is likely,
- although not guaranteed, to be the most recently installed version in that
- family.</p>
- <p>On 64-bit Windows with both 32-bit and 64-bit implementations of the same
- (major.minor) Python version installed, the 64-bit version will always be
- preferred. This will be true for both 32-bit and 64-bit implementations of the
- launcher - a 32-bit launcher will prefer to execute a 64-bit Python installation
- of the specified version if available. This is so the behavior of the launcher
- can be predicted knowing only what versions are installed on the PC and
- without regard to the order in which they were installed (i.e., without knowing
- whether a 32 or 64-bit version of Python and corresponding launcher was
- installed last). As noted above, an optional “-32” or “-64” suffix can be
- used on a version specifier to change this behaviour.</p>
- <p>Examples:</p>
- <ul class="simple">
- <li><p>If no relevant options are set, the commands <code class="docutils literal notranslate"><span class="pre">python</span></code> and
- <code class="docutils literal notranslate"><span class="pre">python2</span></code> will use the latest Python 2.x version installed and
- the command <code class="docutils literal notranslate"><span class="pre">python3</span></code> will use the latest Python 3.x installed.</p></li>
- <li><p>The command <code class="docutils literal notranslate"><span class="pre">python3.7</span></code> will not consult any
- options at all as the versions are fully specified.</p></li>
- <li><p>If <code class="docutils literal notranslate"><span class="pre">PY_PYTHON=3</span></code>, the commands <code class="docutils literal notranslate"><span class="pre">python</span></code> and <code class="docutils literal notranslate"><span class="pre">python3</span></code> will both use
- the latest installed Python 3 version.</p></li>
- <li><p>If <code class="docutils literal notranslate"><span class="pre">PY_PYTHON=3.7-32</span></code>, the command <code class="docutils literal notranslate"><span class="pre">python</span></code> will use the 32-bit
- implementation of 3.7 whereas the command <code class="docutils literal notranslate"><span class="pre">python3</span></code> will use the latest
- installed Python (PY_PYTHON was not considered at all as a major
- version was specified.)</p></li>
- <li><p>If <code class="docutils literal notranslate"><span class="pre">PY_PYTHON=3</span></code> and <code class="docutils literal notranslate"><span class="pre">PY_PYTHON3=3.7</span></code>, the commands
- <code class="docutils literal notranslate"><span class="pre">python</span></code> and <code class="docutils literal notranslate"><span class="pre">python3</span></code> will both use specifically 3.7</p></li>
- </ul>
- <p>In addition to environment variables, the same settings can be configured
- in the .INI file used by the launcher. The section in the INI file is
- called <code class="docutils literal notranslate"><span class="pre">[defaults]</span></code> and the key name will be the same as the
- environment variables without the leading <code class="docutils literal notranslate"><span class="pre">PY_</span></code> prefix (and note that
- the key names in the INI file are case insensitive.) The contents of
- an environment variable will override things specified in the INI file.</p>
- <p>For example:</p>
- <ul class="simple">
- <li><p>Setting <code class="docutils literal notranslate"><span class="pre">PY_PYTHON=3.7</span></code> is equivalent to the INI file containing:</p></li>
- </ul>
- <div class="highlight-ini notranslate"><div class="highlight"><pre><span></span><span class="k">[defaults]</span>
- <span class="na">python</span><span class="o">=</span><span class="s">3.7</span>
- </pre></div>
- </div>
- <ul class="simple">
- <li><p>Setting <code class="docutils literal notranslate"><span class="pre">PY_PYTHON=3</span></code> and <code class="docutils literal notranslate"><span class="pre">PY_PYTHON3=3.7</span></code> is equivalent to the INI file
- containing:</p></li>
- </ul>
- <div class="highlight-ini notranslate"><div class="highlight"><pre><span></span><span class="k">[defaults]</span>
- <span class="na">python</span><span class="o">=</span><span class="s">3</span>
- <span class="na">python3</span><span class="o">=</span><span class="s">3.7</span>
- </pre></div>
- </div>
- </section>
- </section>
- <section id="diagnostics">
- <h3><span class="section-number">4.8.5. </span>Diagnostics<a class="headerlink" href="#diagnostics" title="Permalink to this headline">¶</a></h3>
- <p>If an environment variable <span class="target" id="index-27"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PYLAUNCHER_DEBUG</span></code> is set (to any value), the
- launcher will print diagnostic information to stderr (i.e. to the console).
- While this information manages to be simultaneously verbose <em>and</em> terse, it
- should allow you to see what versions of Python were located, why a
- particular version was chosen and the exact command-line used to execute the
- target Python. It is primarily intended for testing and debugging.</p>
- </section>
- <section id="dry-run">
- <h3><span class="section-number">4.8.6. </span>Dry Run<a class="headerlink" href="#dry-run" title="Permalink to this headline">¶</a></h3>
- <p>If an environment variable <span class="target" id="index-28"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PYLAUNCHER_DRYRUN</span></code> is set (to any value),
- the launcher will output the command it would have run, but will not actually
- launch Python. This may be useful for tools that want to use the launcher to
- detect and then launch Python directly. Note that the command written to
- standard output is always encoded using UTF-8, and may not render correctly in
- the console.</p>
- </section>
- <section id="install-on-demand">
- <h3><span class="section-number">4.8.7. </span>Install on demand<a class="headerlink" href="#install-on-demand" title="Permalink to this headline">¶</a></h3>
- <p>If an environment variable <span class="target" id="index-29"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PYLAUNCHER_ALLOW_INSTALL</span></code> is set (to any
- value), and the requested Python version is not installed but is available on
- the Microsoft Store, the launcher will attempt to install it. This may require
- user interaction to complete, and you may need to run the command again.</p>
- <p>An additional <span class="target" id="index-30"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PYLAUNCHER_ALWAYS_INSTALL</span></code> variable causes the launcher
- to always try to install Python, even if it is detected. This is mainly intended
- for testing (and should be used with <span class="target" id="index-31"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PYLAUNCHER_DRYRUN</span></code>).</p>
- </section>
- <section id="return-codes">
- <h3><span class="section-number">4.8.8. </span>Return codes<a class="headerlink" href="#return-codes" title="Permalink to this headline">¶</a></h3>
- <p>The following exit codes may be returned by the Python launcher. Unfortunately,
- there is no way to distinguish these from the exit code of Python itself.</p>
- <p>The names of codes are as used in the sources, and are only for reference. There
- is no way to access or resolve them apart from reading this page. Entries are
- listed in alphabetical order of names.</p>
- <table class="docutils align-default">
- <colgroup>
- <col style="width: 26%" />
- <col style="width: 10%" />
- <col style="width: 64%" />
- </colgroup>
- <thead>
- <tr class="row-odd"><th class="head"><p>Name</p></th>
- <th class="head"><p>Value</p></th>
- <th class="head"><p>Description</p></th>
- </tr>
- </thead>
- <tbody>
- <tr class="row-even"><td><p>RC_BAD_VENV_CFG</p></td>
- <td><p>107</p></td>
- <td><p>A <code class="file docutils literal notranslate"><span class="pre">pyvenv.cfg</span></code> was found but is corrupt.</p></td>
- </tr>
- <tr class="row-odd"><td><p>RC_CREATE_PROCESS</p></td>
- <td><p>101</p></td>
- <td><p>Failed to launch Python.</p></td>
- </tr>
- <tr class="row-even"><td><p>RC_INSTALLING</p></td>
- <td><p>111</p></td>
- <td><p>An install was started, but the command will
- need to be re-run after it completes.</p></td>
- </tr>
- <tr class="row-odd"><td><p>RC_INTERNAL_ERROR</p></td>
- <td><p>109</p></td>
- <td><p>Unexpected error. Please report a bug.</p></td>
- </tr>
- <tr class="row-even"><td><p>RC_NO_COMMANDLINE</p></td>
- <td><p>108</p></td>
- <td><p>Unable to obtain command line from the
- operating system.</p></td>
- </tr>
- <tr class="row-odd"><td><p>RC_NO_PYTHON</p></td>
- <td><p>103</p></td>
- <td><p>Unable to locate the requested version.</p></td>
- </tr>
- <tr class="row-even"><td><p>RC_NO_VENV_CFG</p></td>
- <td><p>106</p></td>
- <td><p>A <code class="file docutils literal notranslate"><span class="pre">pyvenv.cfg</span></code> was required but not
- found.</p></td>
- </tr>
- </tbody>
- </table>
- </section>
- </section>
- <section id="finding-modules">
- <span id="windows-finding-modules"></span><h2><span class="section-number">4.9. </span>Finding modules<a class="headerlink" href="#finding-modules" title="Permalink to this headline">¶</a></h2>
- <p>These notes supplement the description at <a class="reference internal" href="../library/sys_path_init.html#sys-path-init"><span class="std std-ref">The initialization of the sys.path module search path</span></a> with
- detailed Windows notes.</p>
- <p>When no <code class="docutils literal notranslate"><span class="pre">._pth</span></code> file is found, this is how <a class="reference internal" href="../library/sys.html#sys.path" title="sys.path"><code class="xref py py-data docutils literal notranslate"><span class="pre">sys.path</span></code></a> is populated on
- Windows:</p>
- <ul class="simple">
- <li><p>An empty entry is added at the start, which corresponds to the current
- directory.</p></li>
- <li><p>If the environment variable <span class="target" id="index-32"></span><a class="reference internal" href="cmdline.html#envvar-PYTHONPATH"><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PYTHONPATH</span></code></a> exists, as described in
- <a class="reference internal" href="cmdline.html#using-on-envvars"><span class="std std-ref">Environment variables</span></a>, its entries are added next. Note that on Windows,
- paths in this variable must be separated by semicolons, to distinguish them
- from the colon used in drive identifiers (<code class="docutils literal notranslate"><span class="pre">C:\</span></code> etc.).</p></li>
- <li><p>Additional “application paths” can be added in the registry as subkeys of
- <code class="samp docutils literal notranslate"><span class="pre">\SOFTWARE\Python\PythonCore{version}\PythonPath</span></code> under both the
- <code class="docutils literal notranslate"><span class="pre">HKEY_CURRENT_USER</span></code> and <code class="docutils literal notranslate"><span class="pre">HKEY_LOCAL_MACHINE</span></code> hives. Subkeys which have
- semicolon-delimited path strings as their default value will cause each path
- to be added to <a class="reference internal" href="../library/sys.html#sys.path" title="sys.path"><code class="xref py py-data docutils literal notranslate"><span class="pre">sys.path</span></code></a>. (Note that all known installers only use
- HKLM, so HKCU is typically empty.)</p></li>
- <li><p>If the environment variable <span class="target" id="index-33"></span><a class="reference internal" href="cmdline.html#envvar-PYTHONHOME"><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PYTHONHOME</span></code></a> is set, it is assumed as
- “Python Home”. Otherwise, the path of the main Python executable is used to
- locate a “landmark file” (either <code class="docutils literal notranslate"><span class="pre">Lib\os.py</span></code> or <code class="docutils literal notranslate"><span class="pre">pythonXY.zip</span></code>) to deduce
- the “Python Home”. If a Python home is found, the relevant sub-directories
- added to <a class="reference internal" href="../library/sys.html#sys.path" title="sys.path"><code class="xref py py-data docutils literal notranslate"><span class="pre">sys.path</span></code></a> (<code class="docutils literal notranslate"><span class="pre">Lib</span></code>, <code class="docutils literal notranslate"><span class="pre">plat-win</span></code>, etc) are based on that
- folder. Otherwise, the core Python path is constructed from the PythonPath
- stored in the registry.</p></li>
- <li><p>If the Python Home cannot be located, no <span class="target" id="index-34"></span><a class="reference internal" href="cmdline.html#envvar-PYTHONPATH"><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PYTHONPATH</span></code></a> is specified in
- the environment, and no registry entries can be found, a default path with
- relative entries is used (e.g. <code class="docutils literal notranslate"><span class="pre">.\Lib;.\plat-win</span></code>, etc).</p></li>
- </ul>
- <p>If a <code class="docutils literal notranslate"><span class="pre">pyvenv.cfg</span></code> file is found alongside the main executable or in the
- directory one level above the executable, the following variations apply:</p>
- <ul class="simple">
- <li><p>If <code class="docutils literal notranslate"><span class="pre">home</span></code> is an absolute path and <span class="target" id="index-35"></span><a class="reference internal" href="cmdline.html#envvar-PYTHONHOME"><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PYTHONHOME</span></code></a> is not set, this
- path is used instead of the path to the main executable when deducing the
- home location.</p></li>
- </ul>
- <p>The end result of all this is:</p>
- <ul class="simple">
- <li><p>When running <code class="file docutils literal notranslate"><span class="pre">python.exe</span></code>, or any other .exe in the main Python
- directory (either an installed version, or directly from the PCbuild
- directory), the core path is deduced, and the core paths in the registry are
- ignored. Other “application paths” in the registry are always read.</p></li>
- <li><p>When Python is hosted in another .exe (different directory, embedded via COM,
- etc), the “Python Home” will not be deduced, so the core path from the
- registry is used. Other “application paths” in the registry are always read.</p></li>
- <li><p>If Python can’t find its home and there are no registry value (frozen .exe,
- some very strange installation setup) you get a path with some default, but
- relative, paths.</p></li>
- </ul>
- <p>For those who want to bundle Python into their application or distribution, the
- following advice will prevent conflicts with other installations:</p>
- <ul class="simple">
- <li><p>Include a <code class="docutils literal notranslate"><span class="pre">._pth</span></code> file alongside your executable containing the
- directories to include. This will ignore paths listed in the registry and
- environment variables, and also ignore <a class="reference internal" href="../library/site.html#module-site" title="site: Module responsible for site-specific configuration."><code class="xref py py-mod docutils literal notranslate"><span class="pre">site</span></code></a> unless <code class="docutils literal notranslate"><span class="pre">import</span> <span class="pre">site</span></code> is
- listed.</p></li>
- <li><p>If you are loading <code class="file docutils literal notranslate"><span class="pre">python3.dll</span></code> or <code class="file docutils literal notranslate"><span class="pre">python37.dll</span></code> in your own
- executable, explicitly call <a class="reference internal" href="../c-api/init.html#c.Py_SetPath" title="Py_SetPath"><code class="xref c c-func docutils literal notranslate"><span class="pre">Py_SetPath()</span></code></a> or (at least)
- <a class="reference internal" href="../c-api/init.html#c.Py_SetProgramName" title="Py_SetProgramName"><code class="xref c c-func docutils literal notranslate"><span class="pre">Py_SetProgramName()</span></code></a> before <a class="reference internal" href="../c-api/init.html#c.Py_Initialize" title="Py_Initialize"><code class="xref c c-func docutils literal notranslate"><span class="pre">Py_Initialize()</span></code></a>.</p></li>
- <li><p>Clear and/or overwrite <span class="target" id="index-36"></span><a class="reference internal" href="cmdline.html#envvar-PYTHONPATH"><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PYTHONPATH</span></code></a> and set <span class="target" id="index-37"></span><a class="reference internal" href="cmdline.html#envvar-PYTHONHOME"><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PYTHONHOME</span></code></a>
- before launching <code class="file docutils literal notranslate"><span class="pre">python.exe</span></code> from your application.</p></li>
- <li><p>If you cannot use the previous suggestions (for example, you are a
- distribution that allows people to run <code class="file docutils literal notranslate"><span class="pre">python.exe</span></code> directly), ensure
- that the landmark file (<code class="file docutils literal notranslate"><span class="pre">Lib\os.py</span></code>) exists in your install directory.
- (Note that it will not be detected inside a ZIP file, but a correctly named
- ZIP file will be detected instead.)</p></li>
- </ul>
- <p>These will ensure that the files in a system-wide installation will not take
- precedence over the copy of the standard library bundled with your application.
- Otherwise, your users may experience problems using your application. Note that
- the first suggestion is the best, as the others may still be susceptible to
- non-standard paths in the registry and user site-packages.</p>
- <div class="versionchanged">
- <p><span class="versionmodified changed">Changed in version 3.6: </span></p>
- <blockquote>
- <div><ul class="simple">
- <li><p>Adds <code class="docutils literal notranslate"><span class="pre">._pth</span></code> file support and removes <code class="docutils literal notranslate"><span class="pre">applocal</span></code> option from
- <code class="docutils literal notranslate"><span class="pre">pyvenv.cfg</span></code>.</p></li>
- <li><p>Adds <code class="file docutils literal notranslate"><span class="pre">python</span><em><span class="pre">XX</span></em><span class="pre">.zip</span></code> as a potential landmark when directly adjacent
- to the executable.</p></li>
- </ul>
- </div></blockquote>
- </div>
- <div class="deprecated">
- <p><span class="versionmodified deprecated">Deprecated since version 3.6: </span></p>
- <blockquote>
- <div><p>Modules specified in the registry under <code class="docutils literal notranslate"><span class="pre">Modules</span></code> (not <code class="docutils literal notranslate"><span class="pre">PythonPath</span></code>)
- may be imported by <a class="reference internal" href="../library/importlib.html#importlib.machinery.WindowsRegistryFinder" title="importlib.machinery.WindowsRegistryFinder"><code class="xref py py-class docutils literal notranslate"><span class="pre">importlib.machinery.WindowsRegistryFinder</span></code></a>.
- This finder is enabled on Windows in 3.6.0 and earlier, but may need to
- be explicitly added to <a class="reference internal" href="../library/sys.html#sys.meta_path" title="sys.meta_path"><code class="xref py py-data docutils literal notranslate"><span class="pre">sys.meta_path</span></code></a> in the future.</p>
- </div></blockquote>
- </div>
- </section>
- <section id="additional-modules">
- <h2><span class="section-number">4.10. </span>Additional modules<a class="headerlink" href="#additional-modules" title="Permalink to this headline">¶</a></h2>
- <p>Even though Python aims to be portable among all platforms, there are features
- that are unique to Windows. A couple of modules, both in the standard library
- and external, and snippets exist to use these features.</p>
- <p>The Windows-specific standard modules are documented in
- <a class="reference internal" href="../library/windows.html#mswin-specific-services"><span class="std std-ref">MS Windows Specific Services</span></a>.</p>
- <section id="pywin32">
- <h3><span class="section-number">4.10.1. </span>PyWin32<a class="headerlink" href="#pywin32" title="Permalink to this headline">¶</a></h3>
- <p>The <a class="reference external" href="https://pypi.org/project/pywin32">PyWin32</a> module by Mark Hammond
- is a collection of modules for advanced Windows-specific support. This includes
- utilities for:</p>
- <ul class="simple">
- <li><p><a class="reference external" href="https://docs.microsoft.com/en-us/windows/win32/com/component-object-model--com--portal">Component Object Model</a>
- (COM)</p></li>
- <li><p>Win32 API calls</p></li>
- <li><p>Registry</p></li>
- <li><p>Event log</p></li>
- <li><p><a class="reference external" href="https://docs.microsoft.com/en-us/cpp/mfc/mfc-desktop-applications">Microsoft Foundation Classes</a>
- (MFC) user interfaces</p></li>
- </ul>
- <p><a class="reference external" href="https://web.archive.org/web/20060524042422/https://www.python.org/windows/pythonwin/">PythonWin</a> is a sample MFC application
- shipped with PyWin32. It is an embeddable IDE with a built-in debugger.</p>
- <div class="admonition seealso">
- <p class="admonition-title">See also</p>
- <dl class="simple">
- <dt><a class="reference external" href="http://timgolden.me.uk/python/win32_how_do_i.html">Win32 How Do I…?</a></dt><dd><p>by Tim Golden</p>
- </dd>
- <dt><a class="reference external" href="https://www.boddie.org.uk/python/COM.html">Python and COM</a></dt><dd><p>by David and Paul Boddie</p>
- </dd>
- </dl>
- </div>
- </section>
- <section id="cx-freeze">
- <h3><span class="section-number">4.10.2. </span>cx_Freeze<a class="headerlink" href="#cx-freeze" title="Permalink to this headline">¶</a></h3>
- <p><a class="reference external" href="https://cx-freeze.readthedocs.io/en/latest/">cx_Freeze</a>
- wraps Python scripts into executable Windows programs
- (<code class="file docutils literal notranslate"><em><span class="pre">*</span></em><span class="pre">.exe</span></code> files). When you have done this, you can distribute your
- application without requiring your users to install Python.</p>
- </section>
- </section>
- <section id="compiling-python-on-windows">
- <h2><span class="section-number">4.11. </span>Compiling Python on Windows<a class="headerlink" href="#compiling-python-on-windows" title="Permalink to this headline">¶</a></h2>
- <p>If you want to compile CPython yourself, first thing you should do is get the
- <a class="reference external" href="https://www.python.org/downloads/source/">source</a>. You can download either the
- latest release’s source or just grab a fresh <a class="reference external" href="https://devguide.python.org/setup/#get-the-source-code">checkout</a>.</p>
- <p>The source tree contains a build solution and project files for Microsoft
- Visual Studio, which is the compiler used to build the official Python
- releases. These files are in the <code class="file docutils literal notranslate"><span class="pre">PCbuild</span></code> directory.</p>
- <p>Check <code class="file docutils literal notranslate"><span class="pre">PCbuild/readme.txt</span></code> for general information on the build process.</p>
- <p>For extension modules, consult <a class="reference internal" href="../extending/windows.html#building-on-windows"><span class="std std-ref">Building C and C++ Extensions on Windows</span></a>.</p>
- </section>
- <section id="other-platforms">
- <h2><span class="section-number">4.12. </span>Other Platforms<a class="headerlink" href="#other-platforms" title="Permalink to this headline">¶</a></h2>
- <p>With ongoing development of Python, some platforms that used to be supported
- earlier are no longer supported (due to the lack of users or developers).
- Check <span class="target" id="index-38"></span><a class="pep reference external" href="https://peps.python.org/pep-0011/"><strong>PEP 11</strong></a> for details on all unsupported platforms.</p>
- <ul class="simple">
- <li><p><a class="reference external" href="https://pythonce.sourceforge.net/">Windows CE</a> is
- <a class="reference external" href="https://github.com/python/cpython/issues/71542">no longer supported</a>
- since Python 3 (if it ever was).</p></li>
- <li><p>The <a class="reference external" href="https://cygwin.com/">Cygwin</a> installer offers to install the
- <a class="reference external" href="https://cygwin.com/packages/summary/python3.html">Python interpreter</a>
- as well</p></li>
- </ul>
- <p>See <a class="reference external" href="https://www.python.org/downloads/windows/">Python for Windows</a>
- for detailed information about platforms with pre-compiled installers.</p>
- </section>
- </section>
- <div class="clearer"></div>
- </div>
- </div>
- </div>
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
- <div class="sphinxsidebarwrapper">
- <div>
- <h3><a href="../contents.html">Table of Contents</a></h3>
- <ul>
- <li><a class="reference internal" href="#">4. Using Python on Windows</a><ul>
- <li><a class="reference internal" href="#the-full-installer">4.1. The full installer</a><ul>
- <li><a class="reference internal" href="#installation-steps">4.1.1. Installation steps</a></li>
- <li><a class="reference internal" href="#removing-the-max-path-limitation">4.1.2. Removing the MAX_PATH Limitation</a></li>
- <li><a class="reference internal" href="#installing-without-ui">4.1.3. Installing Without UI</a></li>
- <li><a class="reference internal" href="#installing-without-downloading">4.1.4. Installing Without Downloading</a></li>
- <li><a class="reference internal" href="#modifying-an-install">4.1.5. Modifying an install</a></li>
- </ul>
- </li>
- <li><a class="reference internal" href="#the-microsoft-store-package">4.2. The Microsoft Store package</a><ul>
- <li><a class="reference internal" href="#known-issues">4.2.1. Known issues</a><ul>
- <li><a class="reference internal" href="#redirection-of-local-data-registry-and-temporary-paths">4.2.1.1. Redirection of local data, registry, and temporary paths</a></li>
- </ul>
- </li>
- </ul>
- </li>
- <li><a class="reference internal" href="#the-nuget-org-packages">4.3. The nuget.org packages</a></li>
- <li><a class="reference internal" href="#the-embeddable-package">4.4. The embeddable package</a><ul>
- <li><a class="reference internal" href="#python-application">4.4.1. Python Application</a></li>
- <li><a class="reference internal" href="#embedding-python">4.4.2. Embedding Python</a></li>
- </ul>
- </li>
- <li><a class="reference internal" href="#alternative-bundles">4.5. Alternative bundles</a></li>
- <li><a class="reference internal" href="#configuring-python">4.6. Configuring Python</a><ul>
- <li><a class="reference internal" href="#excursus-setting-environment-variables">4.6.1. Excursus: Setting environment variables</a></li>
- <li><a class="reference internal" href="#finding-the-python-executable">4.6.2. Finding the Python executable</a></li>
- </ul>
- </li>
- <li><a class="reference internal" href="#utf-8-mode">4.7. UTF-8 mode</a></li>
- <li><a class="reference internal" href="#python-launcher-for-windows">4.8. Python Launcher for Windows</a><ul>
- <li><a class="reference internal" href="#getting-started">4.8.1. Getting started</a><ul>
- <li><a class="reference internal" href="#from-the-command-line">4.8.1.1. From the command-line</a></li>
- <li><a class="reference internal" href="#virtual-environments">4.8.1.2. Virtual environments</a></li>
- <li><a class="reference internal" href="#from-a-script">4.8.1.3. From a script</a></li>
- <li><a class="reference internal" href="#from-file-associations">4.8.1.4. From file associations</a></li>
- </ul>
- </li>
- <li><a class="reference internal" href="#shebang-lines">4.8.2. Shebang Lines</a></li>
- <li><a class="reference internal" href="#arguments-in-shebang-lines">4.8.3. Arguments in shebang lines</a></li>
- <li><a class="reference internal" href="#customization">4.8.4. Customization</a><ul>
- <li><a class="reference internal" href="#customization-via-ini-files">4.8.4.1. Customization via INI files</a></li>
- <li><a class="reference internal" href="#customizing-default-python-versions">4.8.4.2. Customizing default Python versions</a></li>
- </ul>
- </li>
- <li><a class="reference internal" href="#diagnostics">4.8.5. Diagnostics</a></li>
- <li><a class="reference internal" href="#dry-run">4.8.6. Dry Run</a></li>
- <li><a class="reference internal" href="#install-on-demand">4.8.7. Install on demand</a></li>
- <li><a class="reference internal" href="#return-codes">4.8.8. Return codes</a></li>
- </ul>
- </li>
- <li><a class="reference internal" href="#finding-modules">4.9. Finding modules</a></li>
- <li><a class="reference internal" href="#additional-modules">4.10. Additional modules</a><ul>
- <li><a class="reference internal" href="#pywin32">4.10.1. PyWin32</a></li>
- <li><a class="reference internal" href="#cx-freeze">4.10.2. cx_Freeze</a></li>
- </ul>
- </li>
- <li><a class="reference internal" href="#compiling-python-on-windows">4.11. Compiling Python on Windows</a></li>
- <li><a class="reference internal" href="#other-platforms">4.12. Other Platforms</a></li>
- </ul>
- </li>
- </ul>
- </div>
- <div>
- <h4>Previous topic</h4>
- <p class="topless"><a href="configure.html"
- title="previous chapter"><span class="section-number">3. </span>Configure Python</a></p>
- </div>
- <div>
- <h4>Next topic</h4>
- <p class="topless"><a href="mac.html"
- title="next chapter"><span class="section-number">5. </span>Using Python on a Mac</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/windows.rst"
- rel="nofollow">Show Source
- </a>
- </li>
- </ul>
- </div>
- </div>
- </div>
- <div class="clearer"></div>
- </div>
- <div class="related" role="navigation" aria-label="related navigation">
- <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="mac.html" title="5. Using Python on a Mac"
- >next</a> |</li>
- <li class="right" >
- <a href="configure.html" title="3. Configure Python"
- >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.12.0 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">4. </span>Using Python on Windows</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" />
- <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-2023, 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 Oct 02, 2023.
- <a href="/bugs.html">Found a bug</a>?
- <br />
- Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.5.0.
- </div>
- </body>
- </html>
|