1674 lines
120 KiB
HTML
1674 lines
120 KiB
HTML
<!DOCTYPE html>
|
||
|
||
<html lang="en" data-content_root="../">
|
||
<head>
|
||
<meta charset="utf-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||
<meta property="og:title" content="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.13.3 documentation</title><meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
|
||
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=b86133f3" />
|
||
<link rel="stylesheet" type="text/css" href="../_static/pydoctheme.css?v=23252803" />
|
||
<link id="pygments_dark_css" media="(prefers-color-scheme: dark)" rel="stylesheet" type="text/css" href="../_static/pygments_dark.css?v=5349f25f" />
|
||
|
||
<script src="../_static/documentation_options.js?v=5d57ca2d"></script>
|
||
<script src="../_static/doctools.js?v=9bcbadda"></script>
|
||
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||
|
||
<script src="../_static/sidebar.js"></script>
|
||
|
||
<link rel="search" type="application/opensearchdescription+xml"
|
||
title="Search within Python 3.13.3 documentation"
|
||
href="../_static/opensearch.xml"/>
|
||
<link rel="author" title="About these documents" href="../about.html" />
|
||
<link rel="index" title="Index" href="../genindex.html" />
|
||
<link rel="search" title="Search" href="../search.html" />
|
||
<link rel="copyright" title="Copyright" href="../copyright.html" />
|
||
<link rel="next" title="5. Using Python on macOS" 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/search-focus.js"></script>
|
||
<script type="text/javascript" src="../_static/themetoggle.js"></script>
|
||
<script type="text/javascript" src="../_static/rtd_switcher.js"></script>
|
||
<meta name="readthedocs-addons-api-version" content="1">
|
||
|
||
</head>
|
||
<body>
|
||
<div class="mobile-nav">
|
||
<input type="checkbox" id="menuToggler" class="toggler__input" aria-controls="navigation"
|
||
aria-pressed="false" aria-expanded="false" role="button" aria-label="Menu" />
|
||
<nav class="nav-content" role="navigation">
|
||
<label for="menuToggler" class="toggler__label">
|
||
<span></span>
|
||
</label>
|
||
<span class="nav-items-wrapper">
|
||
<a href="https://www.python.org/" class="nav-logo">
|
||
<img src="../_static/py.svg" alt="Python logo"/>
|
||
</a>
|
||
<span class="version_switcher_placeholder"></span>
|
||
<form role="search" class="search" action="../search.html" method="get">
|
||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" class="search-icon">
|
||
<path fill-rule="nonzero" fill="currentColor" d="M15.5 14h-.79l-.28-.27a6.5 6.5 0 001.48-5.34c-.47-2.78-2.79-5-5.59-5.34a6.505 6.505 0 00-7.27 7.27c.34 2.8 2.56 5.12 5.34 5.59a6.5 6.5 0 005.34-1.48l.27.28v.79l4.25 4.25c.41.41 1.08.41 1.49 0 .41-.41.41-1.08 0-1.49L15.5 14zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"></path>
|
||
</svg>
|
||
<input placeholder="Quick search" aria-label="Quick search" type="search" name="q" />
|
||
<input type="submit" value="Go"/>
|
||
</form>
|
||
</span>
|
||
</nav>
|
||
<div class="menu-wrapper">
|
||
<nav class="menu" role="navigation" aria-label="main navigation">
|
||
<div class="language_switcher_placeholder"></div>
|
||
|
||
<label class="theme-selector-label">
|
||
Theme
|
||
<select class="theme-selector" oninput="activateTheme(this.value)">
|
||
<option value="auto" selected>Auto</option>
|
||
<option value="light">Light</option>
|
||
<option value="dark">Dark</option>
|
||
</select>
|
||
</label>
|
||
<div>
|
||
<h3><a href="../contents.html">Table of Contents</a></h3>
|
||
<ul>
|
||
<li><a class="reference internal" href="#">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>
|
||
<li><a class="reference internal" href="#installing-free-threaded-binaries">4.1.6. Installing Free-threaded Binaries</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><ul>
|
||
<li><a class="reference internal" href="#free-threaded-packages">4.3.1. Free-threaded packages</a></li>
|
||
</ul>
|
||
</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 macOS</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">
|
||
<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 macOS"
|
||
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.13.3 Documentation</a> »
|
||
</li>
|
||
|
||
<li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Python Setup and Usage</a> »</li>
|
||
<li class="nav-item nav-item-this"><a href=""><span class="section-number">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" id="search-box" />
|
||
<input type="submit" value="Go" />
|
||
</form>
|
||
</div>
|
||
|
|
||
</li>
|
||
<li class="right">
|
||
<label class="theme-selector-label">
|
||
Theme
|
||
<select class="theme-selector" oninput="activateTheme(this.value)">
|
||
<option value="auto" selected>Auto</option>
|
||
<option value="light">Light</option>
|
||
<option value="dark">Dark</option>
|
||
</select>
|
||
</label> |</li>
|
||
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="document">
|
||
<div class="documentwrapper">
|
||
<div class="bodywrapper">
|
||
<div class="body" role="main">
|
||
|
||
<section id="using-python-on-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="Link to this heading">¶</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 with every <a class="reference external" href="https://www.python.org/downloads/">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.13 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="Link to this heading">¶</a></h2>
|
||
<section id="installation-steps">
|
||
<h3><span class="section-number">4.1.1. </span>Installation steps<a class="headerlink" href="#installation-steps" title="Link to this heading">¶</a></h3>
|
||
<p>Four Python 3.13 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="Link to this heading">¶</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="Link to this heading">¶</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">
|
||
<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">
|
||
<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="Link to this heading">¶</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="Link to this heading">¶</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 id="installing-free-threaded-binaries">
|
||
<span id="install-freethreaded-windows"></span><h3><span class="section-number">4.1.6. </span>Installing Free-threaded Binaries<a class="headerlink" href="#installing-free-threaded-binaries" title="Link to this heading">¶</a></h3>
|
||
<div class="versionadded">
|
||
<p><span class="versionmodified added">Added in version 3.13: </span>(Experimental)</p>
|
||
</div>
|
||
<div class="admonition note">
|
||
<p class="admonition-title">Note</p>
|
||
<p>Everything described in this section is considered experimental,
|
||
and should be expected to change in future releases.</p>
|
||
</div>
|
||
<p>To install pre-built binaries with free-threading enabled (see <span class="target" id="index-7"></span><a class="pep reference external" href="https://peps.python.org/pep-0703/"><strong>PEP 703</strong></a>), you
|
||
should select “Customize installation”. The second page of options includes the
|
||
“Download free-threaded binaries” checkbox.</p>
|
||
<img alt="../_images/win_install_freethreaded.png" src="../_images/win_install_freethreaded.png" />
|
||
<p>Selecting this option will download and install additional binaries to the same
|
||
location as the main Python install. The main executable is called
|
||
<code class="docutils literal notranslate"><span class="pre">python3.13t.exe</span></code>, and other binaries either receive a <code class="docutils literal notranslate"><span class="pre">t</span></code> suffix or a full
|
||
ABI suffix. Python source files and bundled third-party dependencies are shared
|
||
with the main install.</p>
|
||
<p>The free-threaded version is registered as a regular Python install with the
|
||
tag <code class="docutils literal notranslate"><span class="pre">3.13t</span></code> (with a <code class="docutils literal notranslate"><span class="pre">-32</span></code> or <code class="docutils literal notranslate"><span class="pre">-arm64</span></code> suffix as normal for those
|
||
platforms). This allows tools to discover it, and for the <a class="reference internal" href="#launcher"><span class="std std-ref">Python Launcher for Windows</span></a> to
|
||
support <code class="docutils literal notranslate"><span class="pre">py.exe</span> <span class="pre">-3.13t</span></code>. Note that the launcher will interpret <code class="docutils literal notranslate"><span class="pre">py.exe</span> <span class="pre">-3</span></code>
|
||
(or a <code class="docutils literal notranslate"><span class="pre">python3</span></code> shebang) as “the latest 3.x install”, which will prefer the
|
||
free-threaded binaries over the regular ones, while <code class="docutils literal notranslate"><span class="pre">py.exe</span> <span class="pre">-3.13</span></code> will not.
|
||
If you use the short style of option, you may prefer to not install the
|
||
free-threaded binaries at this time.</p>
|
||
<p>To specify the install option at the command line, use
|
||
<code class="docutils literal notranslate"><span class="pre">Include_freethreaded=1</span></code>. See <a class="reference internal" href="#install-layout-option"><span class="std std-ref">Installing Without Downloading</span></a> for instructions on
|
||
pre-emptively downloading the additional binaries for offline install. The
|
||
options to include debug symbols and binaries also apply to the free-threaded
|
||
builds.</p>
|
||
<p>Free-threaded binaries are also available <a class="reference internal" href="#windows-nuget"><span class="std std-ref">on nuget.org</span></a>.</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="Link to this heading">¶</a></h2>
|
||
<div class="versionadded">
|
||
<p><span class="versionmodified added">Added 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.13”. 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.13). 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="Link to this heading">¶</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="Link to this heading">¶</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-8"></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-9"></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="w"> </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://learn.microsoft.com/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="Link to this heading">¶</a></h2>
|
||
<div class="versionadded">
|
||
<p><span class="versionmodified added">Added 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, <a class="reference external" href="https://www.nuget.org/packages/pythonx86">www.nuget.org/packages/pythonx86</a> for the 32-bit version, and
|
||
<a class="reference external" href="https://www.nuget.org/packages/pythonarm64">www.nuget.org/packages/pythonarm64</a> for the ARM64 version</p>
|
||
<section id="free-threaded-packages">
|
||
<h3><span class="section-number">4.3.1. </span>Free-threaded packages<a class="headerlink" href="#free-threaded-packages" title="Link to this heading">¶</a></h3>
|
||
<div class="versionadded">
|
||
<p><span class="versionmodified added">Added in version 3.13: </span>(Experimental)</p>
|
||
</div>
|
||
<div class="admonition note">
|
||
<p class="admonition-title">Note</p>
|
||
<p>Everything described in this section is considered experimental,
|
||
and should be expected to change in future releases.</p>
|
||
</div>
|
||
<p>Packages containing free-threaded binaries are named
|
||
<a class="reference external" href="https://www.nuget.org/packages/python-freethreaded">python-freethreaded</a>
|
||
for the 64-bit version, <a class="reference external" href="https://www.nuget.org/packages/pythonx86-freethreaded">pythonx86-freethreaded</a> for the 32-bit
|
||
version, and <a class="reference external" href="https://www.nuget.org/packages/pythonarm64-freethreaded">pythonarm64-freethreaded</a> for the ARM64
|
||
version. These packages contain both the <code class="docutils literal notranslate"><span class="pre">python3.13t.exe</span></code> and
|
||
<code class="docutils literal notranslate"><span class="pre">python.exe</span></code> entry points, both of which run free threaded.</p>
|
||
</section>
|
||
</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="Link to this heading">¶</a></h2>
|
||
<div class="versionadded">
|
||
<p><span class="versionmodified added">Added 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://learn.microsoft.com/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="Link to this heading">¶</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="Link to this heading">¶</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="Link to this heading">¶</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://assets.enthought.com/downloads/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="Link to this heading">¶</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="Link to this heading">¶</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-10"></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-11"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PATH</span></code>.</p>
|
||
<p>The <span class="target" id="index-12"></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://learn.microsoft.com/windows/win32/procthread/environment-variables">https://learn.microsoft.com/windows/win32/procthread/environment-variables</a></dt><dd><p>Overview of environment variables on Windows</p>
|
||
</dd>
|
||
<dt><a class="reference external" href="https://learn.microsoft.com/windows-server/administration/windows-commands/set_1">https://learn.microsoft.com/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://learn.microsoft.com/windows-server/administration/windows-commands/setx">https://learn.microsoft.com/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="Link to this heading">¶</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-13"></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-14"></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-15"></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="Link to this heading">¶</a></h2>
|
||
<div class="versionadded">
|
||
<p><span class="versionmodified added">Added 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-16"></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-17"></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-18"></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="Link to this heading">¶</a></h2>
|
||
<div class="versionadded">
|
||
<p><span class="versionmodified added">Added 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-19"></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-20"></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="Link to this heading">¶</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="Link to this heading">¶</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-21"></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.13) you
|
||
will have noticed that Python 3.13 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-22"></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-insensitive. The Tag is matched
|
||
on either 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="Link to this heading">¶</a></h4>
|
||
<div class="versionadded">
|
||
<p><span class="versionmodified added">Added 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="Link to this heading">¶</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="w"> </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="Link to this heading">¶</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="Link to this heading">¶</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 or an active virtual environment 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. If a virtual environment is active, the version will be
|
||
ignored and the environment will be used.</p>
|
||
<div class="versionadded">
|
||
<p><span class="versionmodified added">Added 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>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">Changed in version 3.13: </span>Virtual commands referencing <code class="docutils literal notranslate"><span class="pre">python</span></code> now prefer an active virtual
|
||
environment rather than searching <span class="target" id="index-23"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PATH</span></code>. This handles cases where
|
||
the shebang specifies <code class="docutils literal notranslate"><span class="pre">/usr/bin/env</span> <span class="pre">python3</span></code> but <code class="file docutils literal notranslate"><span class="pre">python3.exe</span></code> is
|
||
not present in the active environment.</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-24"></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-25"></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-26"></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-27"></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="Link to this heading">¶</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="Link to this heading">¶</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="Link to this heading">¶</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="Link to this heading">¶</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-28"></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="Link to this heading">¶</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_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="Link to this heading">¶</a></h3>
|
||
<p>If an environment variable <span class="target" id="index-30"></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="Link to this heading">¶</a></h3>
|
||
<p>If an environment variable <span class="target" id="index-31"></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-32"></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-33"></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="Link to this heading">¶</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">
|
||
<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="Link to this heading">¶</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-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> 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-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 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-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> 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-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> 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 set <a class="reference internal" href="../c-api/init_config.html#c.PyConfig.module_search_paths" title="PyConfig.module_search_paths"><code class="xref c c-member docutils literal notranslate"><span class="pre">PyConfig.module_search_paths</span></code></a> before
|
||
<a class="reference internal" href="../c-api/init.html#c.Py_InitializeFromConfig" title="Py_InitializeFromConfig"><code class="xref c c-func docutils literal notranslate"><span class="pre">Py_InitializeFromConfig()</span></code></a>.</p></li>
|
||
<li><p>Clear and/or overwrite <span class="target" id="index-38"></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-39"></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>Add <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>
|
||
</div>
|
||
<div class="versionchanged">
|
||
<p><span class="versionmodified changed">Changed in version 3.6: </span>Add <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>
|
||
</div>
|
||
<div class="deprecated">
|
||
<p><span class="versionmodified deprecated">Deprecated since version 3.6: </span>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>
|
||
</section>
|
||
<section id="additional-modules">
|
||
<h2><span class="section-number">4.10. </span>Additional modules<a class="headerlink" href="#additional-modules" title="Link to this heading">¶</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="Link to this heading">¶</a></h3>
|
||
<p>The <a class="extlink-pypi 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://learn.microsoft.com/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://learn.microsoft.com/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="https://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="Link to this heading">¶</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="Link to this heading">¶</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="Link to this heading">¶</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-40"></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">
|
||
<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>
|
||
<li><a class="reference internal" href="#installing-free-threaded-binaries">4.1.6. Installing Free-threaded Binaries</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><ul>
|
||
<li><a class="reference internal" href="#free-threaded-packages">4.3.1. Free-threaded packages</a></li>
|
||
</ul>
|
||
</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 macOS</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 id="sidebarbutton" title="Collapse sidebar">
|
||
<span>«</span>
|
||
</div>
|
||
|
||
</div>
|
||
<div class="clearer"></div>
|
||
</div>
|
||
<div class="related" role="navigation" aria-label="Related">
|
||
<h3>Navigation</h3>
|
||
<ul>
|
||
<li class="right" style="margin-right: 10px">
|
||
<a href="../genindex.html" title="General Index"
|
||
>index</a></li>
|
||
<li class="right" >
|
||
<a href="../py-modindex.html" title="Python Module Index"
|
||
>modules</a> |</li>
|
||
<li class="right" >
|
||
<a href="mac.html" title="5. Using Python on macOS"
|
||
>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.13.3 Documentation</a> »
|
||
</li>
|
||
|
||
<li class="nav-item nav-item-1"><a href="index.html" >Python Setup and Usage</a> »</li>
|
||
<li class="nav-item nav-item-this"><a href=""><span class="section-number">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" id="search-box" />
|
||
<input type="submit" value="Go" />
|
||
</form>
|
||
</div>
|
||
|
|
||
</li>
|
||
<li class="right">
|
||
<label class="theme-selector-label">
|
||
Theme
|
||
<select class="theme-selector" oninput="activateTheme(this.value)">
|
||
<option value="auto" selected>Auto</option>
|
||
<option value="light">Light</option>
|
||
<option value="dark">Dark</option>
|
||
</select>
|
||
</label> |</li>
|
||
|
||
</ul>
|
||
</div>
|
||
<div class="footer">
|
||
©
|
||
<a href="../copyright.html">
|
||
|
||
Copyright
|
||
|
||
</a>
|
||
2001-2025, Python Software Foundation.
|
||
<br />
|
||
This page is licensed under the Python Software Foundation License Version 2.
|
||
<br />
|
||
Examples, recipes, and other code in the documentation are additionally licensed under the Zero Clause BSD License.
|
||
<br />
|
||
|
||
See <a href="/license.html">History and License</a> for more information.<br />
|
||
|
||
|
||
<br />
|
||
|
||
The Python Software Foundation is a non-profit corporation.
|
||
<a href="https://www.python.org/psf/donations/">Please donate.</a>
|
||
<br />
|
||
<br />
|
||
Last updated on Apr 08, 2025 (14:33 UTC).
|
||
|
||
<a href="/bugs.html">Found a bug</a>?
|
||
|
||
<br />
|
||
|
||
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 8.2.3.
|
||
</div>
|
||
|
||
</body>
|
||
</html> |