1237 lines
90 KiB
HTML
1237 lines
90 KiB
HTML
|
|
|||
|
<!DOCTYPE html>
|
|||
|
|
|||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|||
|
<head>
|
|||
|
<meta charset="utf-8" />
|
|||
|
<title>3. Using Python on Windows — Python 3.7.4 documentation</title>
|
|||
|
<link rel="stylesheet" href="../_static/pydoctheme.css" type="text/css" />
|
|||
|
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
|||
|
|
|||
|
<script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
|
|||
|
<script type="text/javascript" src="../_static/jquery.js"></script>
|
|||
|
<script type="text/javascript" src="../_static/underscore.js"></script>
|
|||
|
<script type="text/javascript" src="../_static/doctools.js"></script>
|
|||
|
<script type="text/javascript" src="../_static/language_data.js"></script>
|
|||
|
|
|||
|
<script type="text/javascript" src="../_static/sidebar.js"></script>
|
|||
|
|
|||
|
<link rel="search" type="application/opensearchdescription+xml"
|
|||
|
title="Search within Python 3.7.4 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="4. Using Python on a Macintosh" href="mac.html" />
|
|||
|
<link rel="prev" title="2. Using Python on Unix platforms" href="unix.html" />
|
|||
|
<link rel="shortcut icon" type="image/png" href="../_static/py.png" />
|
|||
|
<link rel="canonical" href="https://docs.python.org/3/using/windows.html" />
|
|||
|
|
|||
|
<script type="text/javascript" src="../_static/copybutton.js"></script>
|
|||
|
<script type="text/javascript" src="../_static/switchers.js"></script>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<style>
|
|||
|
@media only screen {
|
|||
|
table.full-width-table {
|
|||
|
width: 100%;
|
|||
|
}
|
|||
|
}
|
|||
|
</style>
|
|||
|
|
|||
|
|
|||
|
</head><body>
|
|||
|
|
|||
|
<div class="related" role="navigation" aria-label="related navigation">
|
|||
|
<h3>Navigation</h3>
|
|||
|
<ul>
|
|||
|
<li class="right" style="margin-right: 10px">
|
|||
|
<a href="../genindex.html" title="General Index"
|
|||
|
accesskey="I">index</a></li>
|
|||
|
<li class="right" >
|
|||
|
<a href="../py-modindex.html" title="Python Module Index"
|
|||
|
>modules</a> |</li>
|
|||
|
<li class="right" >
|
|||
|
<a href="mac.html" title="4. Using Python on a Macintosh"
|
|||
|
accesskey="N">next</a> |</li>
|
|||
|
<li class="right" >
|
|||
|
<a href="unix.html" title="2. Using Python on Unix platforms"
|
|||
|
accesskey="P">previous</a> |</li>
|
|||
|
<li><img src="../_static/py.png" alt=""
|
|||
|
style="vertical-align: middle; margin-top: -1px"/></li>
|
|||
|
<li><a href="https://www.python.org/">Python</a> »</li>
|
|||
|
<li>
|
|||
|
<span class="language_switcher_placeholder">en</span>
|
|||
|
<span class="version_switcher_placeholder">3.7.4</span>
|
|||
|
<a href="../index.html">Documentation </a> »
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Python Setup and Usage</a> »</li>
|
|||
|
<li class="right">
|
|||
|
|
|||
|
|
|||
|
<div class="inline-search" style="display: none" role="search">
|
|||
|
<form class="inline-search" action="../search.html" method="get">
|
|||
|
<input placeholder="Quick search" type="text" name="q" />
|
|||
|
<input type="submit" value="Go" />
|
|||
|
<input type="hidden" name="check_keywords" value="yes" />
|
|||
|
<input type="hidden" name="area" value="default" />
|
|||
|
</form>
|
|||
|
</div>
|
|||
|
<script type="text/javascript">$('.inline-search').show(0);</script>
|
|||
|
|
|
|||
|
</li>
|
|||
|
|
|||
|
</ul>
|
|||
|
</div>
|
|||
|
|
|||
|
<div class="document">
|
|||
|
<div class="documentwrapper">
|
|||
|
<div class="bodywrapper">
|
|||
|
<div class="body" role="main">
|
|||
|
|
|||
|
<div class="section" id="using-python-on-windows">
|
|||
|
<span id="using-on-windows"></span><h1>3. Using Python on Windows<a class="headerlink" href="#using-python-on-windows" title="Permalink to this headline">¶</a></h1>
|
|||
|
<p>This document aims to give an overview of Windows-specific behaviour you should
|
|||
|
know about when using Python on Microsoft Windows.</p>
|
|||
|
<p>Unlike most Unix systems and services, Windows does not include a system
|
|||
|
supported installation of Python. To make Python available, the CPython team
|
|||
|
has compiled Windows installers (MSI packages) with every <a class="reference external" href="https://www.python.org/download/releases/">release</a> for many years. These installers
|
|||
|
are primarily intended to add a per-user installation of Python, with the
|
|||
|
core interpreter and library being used by a single user. The installer is also
|
|||
|
able to install for all users of a single machine, and a separate ZIP file is
|
|||
|
available for application-local distributions.</p>
|
|||
|
<p>As specified in <span class="target" id="index-0"></span><a class="pep reference external" href="https://www.python.org/dev/peps/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.7 supports Windows Vista and newer. If you require Windows XP
|
|||
|
support then please install Python 3.4.</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, 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>
|
|||
|
<div class="section" id="the-full-installer">
|
|||
|
<span id="windows-full"></span><h2>3.1. The full installer<a class="headerlink" href="#the-full-installer" title="Permalink to this headline">¶</a></h2>
|
|||
|
<div class="section" id="installation-steps">
|
|||
|
<h3>3.1.1. Installation steps<a class="headerlink" href="#installation-steps" title="Permalink to this headline">¶</a></h3>
|
|||
|
<p>Four Python 3.7 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>
|
|||
|
</div>
|
|||
|
<div class="section" id="removing-the-max-path-limitation">
|
|||
|
<span id="max-path"></span><h3>3.1.2. Removing the MAX_PATH Limitation<a class="headerlink" href="#removing-the-max-path-limitation" title="Permalink to this headline">¶</a></h3>
|
|||
|
<p>Windows historically has limited path lengths to 260 characters. This meant that
|
|||
|
paths longer than this would not resolve and errors would result.</p>
|
|||
|
<p>In the latest versions of Windows, this limitation can be expanded to
|
|||
|
approximately 32,000 characters. Your administrator will need to activate the
|
|||
|
“Enable Win32 long paths” group policy, or set the registry value
|
|||
|
<code class="docutils literal notranslate"><span class="pre">HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem@LongPathsEnabled</span></code>
|
|||
|
to <code class="docutils literal notranslate"><span class="pre">1</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 when
|
|||
|
using strings. (Use of bytes as paths is deprecated on Windows, and this feature
|
|||
|
is not available when using bytes.)</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>
|
|||
|
</div>
|
|||
|
<div class="section" id="installing-without-ui">
|
|||
|
<span id="install-quiet-option"></span><h3>3.1.3. Installing Without UI<a class="headerlink" href="#installing-without-ui" title="Permalink to this headline">¶</a></h3>
|
|||
|
<p>All of the options available in the installer UI can also be specified from the
|
|||
|
command line, allowing scripted installers to replicate an installation on many
|
|||
|
machines without user interaction. These options may also be set without
|
|||
|
suppressing the UI in order to change some of the defaults.</p>
|
|||
|
<p>To completely hide the installer UI and install Python silently, pass the
|
|||
|
<code class="docutils literal notranslate"><span class="pre">/quiet</span></code> option. To skip past the user interaction but still display
|
|||
|
progress and errors, pass the <code class="docutils literal notranslate"><span class="pre">/passive</span></code> option. The <code class="docutils literal notranslate"><span class="pre">/uninstall</span></code>
|
|||
|
option may be passed to immediately begin removing Python - no prompt will be
|
|||
|
displayed.</p>
|
|||
|
<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-center">
|
|||
|
<colgroup>
|
|||
|
<col style="width: 30%" />
|
|||
|
<col style="width: 42%" />
|
|||
|
<col style="width: 29%" />
|
|||
|
</colgroup>
|
|||
|
<thead>
|
|||
|
<tr class="row-odd"><th class="head"><p>Name</p></th>
|
|||
|
<th class="head"><p>Description</p></th>
|
|||
|
<th class="head"><p>Default</p></th>
|
|||
|
</tr>
|
|||
|
</thead>
|
|||
|
<tbody>
|
|||
|
<tr class="row-even"><td><p>InstallAllUsers</p></td>
|
|||
|
<td><p>Perform a system-wide installation.</p></td>
|
|||
|
<td><p>0</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td><p>TargetDir</p></td>
|
|||
|
<td><p>The installation directory</p></td>
|
|||
|
<td><p>Selected based on
|
|||
|
InstallAllUsers</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td><p>DefaultAllUsersTargetDir</p></td>
|
|||
|
<td><p>The default installation directory
|
|||
|
for all-user installs</p></td>
|
|||
|
<td><p><code class="file docutils literal notranslate"><span class="pre">%ProgramFiles%\Python</span> <span class="pre">X.Y</span></code> or <code class="file docutils literal notranslate"><span class="pre">%ProgramFiles(x86)%\Python</span> <span class="pre">X.Y</span></code></p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td><p>DefaultJustForMeTargetDir</p></td>
|
|||
|
<td><p>The default install directory for
|
|||
|
just-for-me installs</p></td>
|
|||
|
<td><p><code class="file docutils literal notranslate"><span class="pre">%LocalAppData%\Programs\PythonXY</span></code> or
|
|||
|
<code class="file docutils literal notranslate"><span class="pre">%LocalAppData%\Programs\PythonXY-32</span></code> or
|
|||
|
<code class="file docutils literal notranslate"><span class="pre">%LocalAppData%\Programs\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>Add 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 <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>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-odd"><td><p>Include_doc</p></td>
|
|||
|
<td><p>Install Python manual</p></td>
|
|||
|
<td><p>1</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td><p>Include_debug</p></td>
|
|||
|
<td><p>Install debug binaries</p></td>
|
|||
|
<td><p>0</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td><p>Include_dev</p></td>
|
|||
|
<td><p>Install developer headers and
|
|||
|
libraries</p></td>
|
|||
|
<td><p>1</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><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</p></td>
|
|||
|
<td><p>1</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><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-even"><td><p>InstallLauncherAllUsers</p></td>
|
|||
|
<td><p>Installs <a class="reference internal" href="#launcher"><span class="std std-ref">Python Launcher for Windows</span></a> for all
|
|||
|
users.</p></td>
|
|||
|
<td><p>1</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td><p>Include_lib</p></td>
|
|||
|
<td><p>Install standard library and
|
|||
|
extension modules</p></td>
|
|||
|
<td><p>1</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td><p>Include_pip</p></td>
|
|||
|
<td><p>Install bundled pip and setuptools</p></td>
|
|||
|
<td><p>1</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><td><p>Include_symbols</p></td>
|
|||
|
<td><p>Install debugging symbols (<cite>*</cite>.pdb)</p></td>
|
|||
|
<td><p>0</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><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-odd"><td><p>Include_test</p></td>
|
|||
|
<td><p>Install standard library test suite</p></td>
|
|||
|
<td><p>1</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-even"><td><p>Include_tools</p></td>
|
|||
|
<td><p>Install utility scripts</p></td>
|
|||
|
<td><p>1</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><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-even"><td><p>SimpleInstall</p></td>
|
|||
|
<td><p>Disable most install UI</p></td>
|
|||
|
<td><p>0</p></td>
|
|||
|
</tr>
|
|||
|
<tr class="row-odd"><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.7.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.7.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="nt"><Option</span> <span class="na">Name=</span><span class="s">"InstallAllUsers"</span> <span class="na">Value=</span><span class="s">"no"</span> <span class="nt">/></span>
|
|||
|
<span class="nt"><Option</span> <span class="na">Name=</span><span class="s">"Include_launcher"</span> <span class="na">Value=</span><span class="s">"0"</span> <span class="nt">/></span>
|
|||
|
<span class="nt"><Option</span> <span class="na">Name=</span><span class="s">"Include_test"</span> <span class="na">Value=</span><span class="s">"no"</span> <span class="nt">/></span>
|
|||
|
<span class="nt"><Option</span> <span class="na">Name=</span><span class="s">"SimpleInstall"</span> <span class="na">Value=</span><span class="s">"yes"</span> <span class="nt">/></span>
|
|||
|
<span class="nt"><Option</span> <span class="na">Name=</span><span class="s">"SimpleInstallDescription"</span><span class="nt">></span>Just for me, no test suite<span class="nt"></Option></span>
|
|||
|
<span class="nt"></Options></span>
|
|||
|
</pre></div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="section" id="installing-without-downloading">
|
|||
|
<span id="install-layout-option"></span><h3>3.1.4. Installing Without Downloading<a class="headerlink" href="#installing-without-downloading" title="Permalink to this headline">¶</a></h3>
|
|||
|
<p>As some features of Python are not included in the initial installer download,
|
|||
|
selecting those features may require an internet connection. To avoid this
|
|||
|
need, all possible components may be downloaded on-demand to create a complete
|
|||
|
<em>layout</em> that will no longer require an internet connection regardless of the
|
|||
|
selected features. Note that this download may be bigger than required, but
|
|||
|
where a large number of installations are going to be performed it is very
|
|||
|
useful to have a locally cached copy.</p>
|
|||
|
<p>Execute the following command from Command Prompt to download all possible
|
|||
|
required files. Remember to substitute <code class="docutils literal notranslate"><span class="pre">python-3.7.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.7.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>
|
|||
|
</div>
|
|||
|
<div class="section" id="modifying-an-install">
|
|||
|
<h3>3.1.5. Modifying an install<a class="headerlink" href="#modifying-an-install" title="Permalink to this headline">¶</a></h3>
|
|||
|
<p>Once Python has been installed, you can add or remove features through the
|
|||
|
Programs and Features tool that is part of Windows. Select the Python entry and
|
|||
|
choose “Uninstall/Change” to open the installer in maintenance mode.</p>
|
|||
|
<p>“Modify” allows you to add or remove features by modifying the checkboxes -
|
|||
|
unchanged checkboxes will not install or remove anything. Some options cannot be
|
|||
|
changed in this mode, such as the install directory; to modify these, you will
|
|||
|
need to remove and then reinstall Python completely.</p>
|
|||
|
<p>“Repair” will verify all the files that should be installed using the current
|
|||
|
settings and replace any that have been removed or modified.</p>
|
|||
|
<p>“Uninstall” will remove Python entirely, with the exception of the
|
|||
|
<a class="reference internal" href="#launcher"><span class="std std-ref">Python Launcher for Windows</span></a>, which has its own entry in Programs and Features.</p>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="section" id="the-microsoft-store-package">
|
|||
|
<span id="windows-store"></span><h2>3.2. The Microsoft Store package<a class="headerlink" href="#the-microsoft-store-package" title="Permalink to this headline">¶</a></h2>
|
|||
|
<div class="versionadded">
|
|||
|
<p><span class="versionmodified added">New in version 3.7.2.</span></p>
|
|||
|
</div>
|
|||
|
<div class="admonition note">
|
|||
|
<p class="admonition-title">Note</p>
|
|||
|
<p>The Microsoft Store package is currently considered unstable while its
|
|||
|
interactions with other tools and other copies of Python are evaluated.
|
|||
|
While Python itself is stable, this installation method may change its
|
|||
|
behavior and capabilities during Python 3.7 releases.</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.7”. 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.7).</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>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>
|
|||
|
<div class="section" id="known-issues">
|
|||
|
<h3>3.2.1. Known Issues<a class="headerlink" href="#known-issues" title="Permalink to this headline">¶</a></h3>
|
|||
|
<p>Currently, the <code class="docutils literal notranslate"><span class="pre">py.exe</span></code> launcher cannot be used to start Python when it
|
|||
|
has been installed from the Microsoft Store.</p>
|
|||
|
<p>Because of restrictions on Microsoft Store apps, Python scripts may not have
|
|||
|
full write access to shared locations such as <code class="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>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="section" id="the-nuget-org-packages">
|
|||
|
<span id="windows-nuget"></span><h2>3.3. The nuget.org packages<a class="headerlink" href="#the-nuget-org-packages" title="Permalink to this headline">¶</a></h2>
|
|||
|
<div class="versionadded">
|
|||
|
<p><span class="versionmodified added">New in version 3.5.2.</span></p>
|
|||
|
</div>
|
|||
|
<p>The nuget.org package is a reduced size Python environment intended for use on
|
|||
|
continuous integration and build systems that do not have a system-wide
|
|||
|
install of Python. While nuget is “the package manager for .NET”, it also works
|
|||
|
perfectly fine for packages containing build-time tools.</p>
|
|||
|
<p>Visit <a class="reference external" href="https://www.nuget.org/">nuget.org</a> for the most up-to-date information
|
|||
|
on using nuget. What follows is a summary that is sufficient for Python
|
|||
|
developers.</p>
|
|||
|
<p>The <code class="docutils literal notranslate"><span class="pre">nuget.exe</span></code> command line tool may be downloaded directly from
|
|||
|
<code class="docutils literal notranslate"><span class="pre">https://aka.ms/nugetclidl</span></code>, for example, using curl or PowerShell. With the
|
|||
|
tool, the latest version of Python for 64-bit or 32-bit machines is installed
|
|||
|
using:</p>
|
|||
|
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>nuget.exe install python -ExcludeVersion -OutputDirectory .
|
|||
|
nuget.exe install pythonx86 -ExcludeVersion -OutputDirectory .
|
|||
|
</pre></div>
|
|||
|
</div>
|
|||
|
<p>To select a particular version, add a <code class="docutils literal notranslate"><span class="pre">-Version</span> <span class="pre">3.x.y</span></code>. The output directory
|
|||
|
may be changed from <code class="docutils literal notranslate"><span class="pre">.</span></code>, and the package will be installed into a
|
|||
|
subdirectory. By default, the subdirectory is named the same as the package,
|
|||
|
and without the <code class="docutils literal notranslate"><span class="pre">-ExcludeVersion</span></code> option this name will include the specific
|
|||
|
version installed. Inside the subdirectory is a <code class="docutils literal notranslate"><span class="pre">tools</span></code> directory that
|
|||
|
contains the Python installation:</p>
|
|||
|
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span># Without -ExcludeVersion
|
|||
|
> .\python.3.5.2\tools\python.exe -V
|
|||
|
Python 3.5.2
|
|||
|
|
|||
|
# With -ExcludeVersion
|
|||
|
> .\python\tools\python.exe -V
|
|||
|
Python 3.5.2
|
|||
|
</pre></div>
|
|||
|
</div>
|
|||
|
<p>In general, nuget packages are not upgradeable, and newer versions should be
|
|||
|
installed side-by-side and referenced using the full path. Alternatively,
|
|||
|
delete the package directory manually and install it again. Many CI systems
|
|||
|
will do this automatically if they do not preserve files between builds.</p>
|
|||
|
<p>Alongside the <code class="docutils literal notranslate"><span class="pre">tools</span></code> directory is a <code class="docutils literal notranslate"><span class="pre">build\native</span></code> directory. This
|
|||
|
contains a MSBuild properties file <code class="docutils literal notranslate"><span class="pre">python.props</span></code> that can be used in a
|
|||
|
C++ project to reference the Python install. Including the settings will
|
|||
|
automatically use the headers and import libraries in your build.</p>
|
|||
|
<p>The package information pages on nuget.org are
|
|||
|
<a class="reference external" href="https://www.nuget.org/packages/python">www.nuget.org/packages/python</a>
|
|||
|
for the 64-bit version and <a class="reference external" href="https://www.nuget.org/packages/pythonx86">www.nuget.org/packages/pythonx86</a> for the 32-bit version.</p>
|
|||
|
</div>
|
|||
|
<div class="section" id="the-embeddable-package">
|
|||
|
<span id="windows-embeddable"></span><h2>3.4. The embeddable package<a class="headerlink" href="#the-embeddable-package" title="Permalink to this headline">¶</a></h2>
|
|||
|
<div class="versionadded">
|
|||
|
<p><span class="versionmodified added">New in version 3.5.</span></p>
|
|||
|
</div>
|
|||
|
<p>The embedded distribution is a ZIP file containing a minimal Python environment.
|
|||
|
It is intended for acting as part of another application, rather than being
|
|||
|
directly accessed by end-users.</p>
|
|||
|
<p>When extracted, the embedded distribution is (almost) fully isolated from the
|
|||
|
user’s system, including environment variables, system registry settings, and
|
|||
|
installed packages. The standard library is included as pre-compiled and
|
|||
|
optimized <code class="docutils literal notranslate"><span class="pre">.pyc</span></code> files in a ZIP, and <code class="docutils literal notranslate"><span class="pre">python3.dll</span></code>, <code class="docutils literal notranslate"><span class="pre">python37.dll</span></code>,
|
|||
|
<code class="docutils literal notranslate"><span class="pre">python.exe</span></code> and <code class="docutils literal notranslate"><span class="pre">pythonw.exe</span></code> are all provided. Tcl/tk (including all
|
|||
|
dependants, 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://www.microsoft.com/en-us/download/details.aspx?id=48145">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>
|
|||
|
<div class="section" id="python-application">
|
|||
|
<h3>3.4.1. Python Application<a class="headerlink" href="#python-application" title="Permalink to this headline">¶</a></h3>
|
|||
|
<p>An application written in Python does not necessarily require users to be aware
|
|||
|
of that fact. The embedded distribution may be used in this case to include a
|
|||
|
private version of Python in an install package. Depending on how transparent it
|
|||
|
should be (or conversely, how professional it should appear), there are two
|
|||
|
options.</p>
|
|||
|
<p>Using a specialized executable as a launcher requires some coding, but provides
|
|||
|
the most transparent experience for users. With a customized launcher, there are
|
|||
|
no obvious indications that the program is running on Python: icons can be
|
|||
|
customized, company and version information can be specified, and file
|
|||
|
associations behave properly. In most cases, a custom launcher should simply be
|
|||
|
able to call <code class="docutils literal notranslate"><span class="pre">Py_Main</span></code> with a hard-coded command line.</p>
|
|||
|
<p>The simpler approach is to provide a batch file or generated shortcut that
|
|||
|
directly calls the <code class="docutils literal notranslate"><span class="pre">python.exe</span></code> or <code class="docutils literal notranslate"><span class="pre">pythonw.exe</span></code> with the required
|
|||
|
command-line arguments. In this case, the application will appear to be Python
|
|||
|
and not its actual name, and users may have trouble distinguishing it from other
|
|||
|
running Python processes or file associations.</p>
|
|||
|
<p>With the latter approach, packages should be installed as directories alongside
|
|||
|
the Python executable to ensure they are available on the path. With the
|
|||
|
specialized launcher, packages can be located in other locations as there is an
|
|||
|
opportunity to specify the search path before launching the application.</p>
|
|||
|
</div>
|
|||
|
<div class="section" id="embedding-python">
|
|||
|
<h3>3.4.2. Embedding Python<a class="headerlink" href="#embedding-python" title="Permalink to this headline">¶</a></h3>
|
|||
|
<p>Applications written in native code often require some form of scripting
|
|||
|
language, and the embedded Python distribution can be used for this purpose. In
|
|||
|
general, the majority of the application is in native code, and some part will
|
|||
|
either invoke <code class="docutils literal notranslate"><span class="pre">python.exe</span></code> or directly use <code class="docutils literal notranslate"><span class="pre">python3.dll</span></code>. For either case,
|
|||
|
extracting the embedded distribution to a subdirectory of the application
|
|||
|
installation is sufficient to provide a loadable Python interpreter.</p>
|
|||
|
<p>As with the application use, packages can be installed to any location as there
|
|||
|
is an opportunity to specify search paths before initializing the interpreter.
|
|||
|
Otherwise, there is no fundamental differences between using the embedded
|
|||
|
distribution and a regular installation.</p>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="section" id="alternative-bundles">
|
|||
|
<h2>3.5. Alternative bundles<a class="headerlink" href="#alternative-bundles" title="Permalink to this headline">¶</a></h2>
|
|||
|
<p>Besides the standard CPython distribution, there are modified packages including
|
|||
|
additional functionality. The following is a list of popular versions and their
|
|||
|
key features:</p>
|
|||
|
<dl class="simple">
|
|||
|
<dt><a class="reference external" href="https://www.activestate.com/activepython/">ActivePython</a></dt><dd><p>Installer with multi-platform compatibility, documentation, PyWin32</p>
|
|||
|
</dd>
|
|||
|
<dt><a class="reference external" href="https://www.anaconda.com/download/">Anaconda</a></dt><dd><p>Popular scientific modules (such as numpy, scipy and pandas) and the
|
|||
|
<code class="docutils literal notranslate"><span class="pre">conda</span></code> package manager.</p>
|
|||
|
</dd>
|
|||
|
<dt><a class="reference external" href="https://www.enthought.com/product/canopy/">Canopy</a></dt><dd><p>A “comprehensive Python analysis environment” with editors and other
|
|||
|
development tools.</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>
|
|||
|
</div>
|
|||
|
<div class="section" id="configuring-python">
|
|||
|
<h2>3.6. Configuring Python<a class="headerlink" href="#configuring-python" title="Permalink to this headline">¶</a></h2>
|
|||
|
<p>To run Python conveniently from a command prompt, you might consider changing
|
|||
|
some default environment variables in Windows. While the installer provides an
|
|||
|
option to configure the PATH and PATHEXT variables for you, this is only
|
|||
|
reliable for a single, system-wide installation. If you regularly use multiple
|
|||
|
versions of Python, consider using the <a class="reference internal" href="#launcher"><span class="std std-ref">Python Launcher for Windows</span></a>.</p>
|
|||
|
<div class="section" id="excursus-setting-environment-variables">
|
|||
|
<span id="setting-envvars"></span><h3>3.6.1. Excursus: Setting environment variables<a class="headerlink" href="#excursus-setting-environment-variables" title="Permalink to this headline">¶</a></h3>
|
|||
|
<p>Windows allows environment variables to be configured permanently at both the
|
|||
|
User level and the System level, or temporarily in a command prompt.</p>
|
|||
|
<p>To temporarily set environment variables, open Command Prompt and use the
|
|||
|
<strong class="command">set</strong> command:</p>
|
|||
|
<div class="highlight-doscon notranslate"><div class="highlight"><pre><span></span><span class="gp">C:\></span><span class="k">set</span> <span class="nv">PATH</span><span class="p">=</span>C:\Program Files\Python 3.7;<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-5"></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-6"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PATH</span></code>.</p>
|
|||
|
<p>The <span class="target" id="index-7"></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 2 and
|
|||
|
Python 3, so you should not permanently configure this variable unless it
|
|||
|
only includes 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://www.microsoft.com/en-us/wdsi/help/folder-variables">https://www.microsoft.com/en-us/wdsi/help/folder-variables</a></dt><dd><p>Environment variables in Windows NT</p>
|
|||
|
</dd>
|
|||
|
<dt><a class="reference external" href="https://technet.microsoft.com/en-us/library/cc754250.aspx">https://technet.microsoft.com/en-us/library/cc754250.aspx</a></dt><dd><p>The SET command, for temporarily modifying environment variables</p>
|
|||
|
</dd>
|
|||
|
<dt><a class="reference external" href="https://technet.microsoft.com/en-us/library/cc755104.aspx">https://technet.microsoft.com/en-us/library/cc755104.aspx</a></dt><dd><p>The SETX command, for permanently modifying environment variables</p>
|
|||
|
</dd>
|
|||
|
<dt><a class="reference external" href="https://support.microsoft.com/en-us/help/310519/how-to-manage-environment-variables-in-windows-xp">https://support.microsoft.com/en-us/help/310519/how-to-manage-environment-variables-in-windows-xp</a></dt><dd><p>How To Manage Environment Variables in Windows XP</p>
|
|||
|
</dd>
|
|||
|
<dt><a class="reference external" href="https://www.chem.gla.ac.uk/~louis/software/faq/q1.html">https://www.chem.gla.ac.uk/~louis/software/faq/q1.html</a></dt><dd><p>Setting Environment variables, Louis J. Farrugia</p>
|
|||
|
</dd>
|
|||
|
</dl>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="section" id="finding-the-python-executable">
|
|||
|
<span id="windows-path-mod"></span><h3>3.6.2. Finding the Python executable<a class="headerlink" href="#finding-the-python-executable" title="Permalink to this headline">¶</a></h3>
|
|||
|
<div class="versionchanged">
|
|||
|
<p><span class="versionmodified changed">Changed in version 3.5.</span></p>
|
|||
|
</div>
|
|||
|
<p>Besides using the automatically created start menu entry for the Python
|
|||
|
interpreter, you might want to start Python in the command prompt. The
|
|||
|
installer has an option to set that up for you.</p>
|
|||
|
<p>On the first page of the installer, an option labelled “Add Python to PATH”
|
|||
|
may be selected to have the installer add the install location into the
|
|||
|
<span class="target" id="index-8"></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-9"></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-10"></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.7
|
|||
|
</pre></div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="section" id="python-launcher-for-windows">
|
|||
|
<span id="launcher"></span><h2>3.7. Python Launcher for Windows<a class="headerlink" href="#python-launcher-for-windows" title="Permalink to this headline">¶</a></h2>
|
|||
|
<div class="versionadded">
|
|||
|
<p><span class="versionmodified added">New in version 3.3.</span></p>
|
|||
|
</div>
|
|||
|
<p>The Python launcher for Windows is a utility which aids in locating and
|
|||
|
executing of different Python versions. It allows scripts (or the
|
|||
|
command-line) to indicate a preference for a specific Python version, and
|
|||
|
will locate and execute that version.</p>
|
|||
|
<p>Unlike the <span class="target" id="index-11"></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-12"></span><a class="pep reference external" href="https://www.python.org/dev/peps/pep-0397"><strong>PEP 397</strong></a>.</p>
|
|||
|
<div class="section" id="getting-started">
|
|||
|
<h3>3.7.1. Getting started<a class="headerlink" href="#getting-started" title="Permalink to this headline">¶</a></h3>
|
|||
|
<div class="section" id="from-the-command-line">
|
|||
|
<h4>3.7.1.1. From the command-line<a class="headerlink" href="#from-the-command-line" title="Permalink to this headline">¶</a></h4>
|
|||
|
<div class="versionchanged">
|
|||
|
<p><span class="versionmodified changed">Changed in version 3.6.</span></p>
|
|||
|
</div>
|
|||
|
<p>System-wide installations of Python 3.3 and later will put the launcher on your
|
|||
|
<span class="target" id="index-13"></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., 2.7 and 3.7) you
|
|||
|
will have noticed that Python 3.7 was started - to launch Python 2.7, try
|
|||
|
the command:</p>
|
|||
|
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>py -2.7
|
|||
|
</pre></div>
|
|||
|
</div>
|
|||
|
<p>If you want the latest version of Python 2.x you have installed, try the
|
|||
|
command:</p>
|
|||
|
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>py -2
|
|||
|
</pre></div>
|
|||
|
</div>
|
|||
|
<p>You should find the latest version of Python 2.x starts.</p>
|
|||
|
<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>Per-user installations of Python do not add the launcher to <span class="target" id="index-14"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PATH</span></code>
|
|||
|
unless the option was selected on installation.</p>
|
|||
|
</div>
|
|||
|
<div class="section" id="virtual-environments">
|
|||
|
<h4>3.7.1.2. Virtual environments<a class="headerlink" href="#virtual-environments" title="Permalink to this headline">¶</a></h4>
|
|||
|
<div class="versionadded">
|
|||
|
<p><span class="versionmodified added">New in version 3.5.</span></p>
|
|||
|
</div>
|
|||
|
<p>If the launcher is run with no explicit Python version specification, and a
|
|||
|
virtual environment (created with the standard library <a class="reference internal" href="../library/venv.html#module-venv" title="venv: Creation of virtual environments."><code class="xref py py-mod docutils literal notranslate"><span class="pre">venv</span></code></a> module or
|
|||
|
the external <code class="docutils literal notranslate"><span class="pre">virtualenv</span></code> tool) active, the launcher will run the virtual
|
|||
|
environment’s interpreter rather than the global one. To run the global
|
|||
|
interpreter, either deactivate the virtual environment, or explicitly specify
|
|||
|
the global Python version.</p>
|
|||
|
</div>
|
|||
|
<div class="section" id="from-a-script">
|
|||
|
<h4>3.7.1.3. From a script<a class="headerlink" href="#from-a-script" title="Permalink to this headline">¶</a></h4>
|
|||
|
<p>Let’s create a test Python script - create a file called <code class="docutils literal notranslate"><span class="pre">hello.py</span></code> with the
|
|||
|
following contents</p>
|
|||
|
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="ch">#! python</span>
|
|||
|
<span class="kn">import</span> <span class="nn">sys</span>
|
|||
|
<span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">"hello from Python </span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">version</span><span class="p">,))</span>
|
|||
|
</pre></div>
|
|||
|
</div>
|
|||
|
<p>From the directory in which hello.py lives, execute the command:</p>
|
|||
|
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>py hello.py
|
|||
|
</pre></div>
|
|||
|
</div>
|
|||
|
<p>You should notice the version number of your latest Python 2.x installation
|
|||
|
is printed. Now try changing the first line to be:</p>
|
|||
|
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="ch">#! python3</span>
|
|||
|
</pre></div>
|
|||
|
</div>
|
|||
|
<p>Re-executing the command should now print the latest Python 3.x information.
|
|||
|
As with the above command-line examples, you can specify a more explicit
|
|||
|
version qualifier. Assuming you have Python 2.6 installed, try changing the
|
|||
|
first line to <code class="docutils literal notranslate"><span class="pre">#!</span> <span class="pre">python2.6</span></code> and you should find the 2.6 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>
|
|||
|
</div>
|
|||
|
<div class="section" id="from-file-associations">
|
|||
|
<h4>3.7.1.4. From file associations<a class="headerlink" href="#from-file-associations" title="Permalink to this headline">¶</a></h4>
|
|||
|
<p>The launcher should have been associated with Python files (i.e. <code class="docutils literal notranslate"><span class="pre">.py</span></code>,
|
|||
|
<code class="docutils literal notranslate"><span class="pre">.pyw</span></code>, <code class="docutils literal notranslate"><span class="pre">.pyc</span></code> files) when it was installed. This means that
|
|||
|
when you double-click on one of these files from Windows explorer the launcher
|
|||
|
will be used, and therefore you can use the same facilities described above to
|
|||
|
have the script specify the version which should be used.</p>
|
|||
|
<p>The key benefit of this is that a single launcher can support multiple Python
|
|||
|
versions at the same time depending on the contents of the first line.</p>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="section" id="shebang-lines">
|
|||
|
<h3>3.7.2. Shebang Lines<a class="headerlink" href="#shebang-lines" title="Permalink to this headline">¶</a></h3>
|
|||
|
<p>If the first line of a script file starts with <code class="docutils literal notranslate"><span class="pre">#!</span></code>, it is known as a
|
|||
|
“shebang” line. Linux and other Unix like operating systems have native
|
|||
|
support for such lines and they are commonly used on such systems to indicate
|
|||
|
how a script should be executed. This launcher allows the same facilities to
|
|||
|
be used with Python scripts on Windows and the examples above demonstrate their
|
|||
|
use.</p>
|
|||
|
<p>To allow shebang lines in Python scripts to be portable between Unix and
|
|||
|
Windows, this launcher supports a number of ‘virtual’ commands to specify
|
|||
|
which interpreter to use. The supported virtual commands are:</p>
|
|||
|
<ul class="simple">
|
|||
|
<li><p><code class="docutils literal notranslate"><span class="pre">/usr/bin/env</span> <span class="pre">python</span></code></p></li>
|
|||
|
<li><p><code class="docutils literal notranslate"><span class="pre">/usr/bin/python</span></code></p></li>
|
|||
|
<li><p><code class="docutils literal notranslate"><span class="pre">/usr/local/bin/python</span></code></p></li>
|
|||
|
<li><p><code class="docutils literal notranslate"><span class="pre">python</span></code></p></li>
|
|||
|
</ul>
|
|||
|
<p>For example, if the first line of your script starts with</p>
|
|||
|
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="ch">#! /usr/bin/python</span>
|
|||
|
</pre></div>
|
|||
|
</div>
|
|||
|
<p>The default Python will be located and used. As many Python scripts written
|
|||
|
to work on Unix will already have this line, you should find these scripts can
|
|||
|
be used by the launcher without modification. If you are writing a new script
|
|||
|
on Windows which you hope will be useful on Unix, you should use one of the
|
|||
|
shebang lines starting with <code class="docutils literal notranslate"><span class="pre">/usr</span></code>.</p>
|
|||
|
<p>Any of the above virtual commands can be suffixed with an explicit version
|
|||
|
(either just the major version, or the major and minor version).
|
|||
|
Furthermore the 32-bit version can be requested by adding “-32” after the
|
|||
|
minor version. I.e. <code class="docutils literal notranslate"><span class="pre">/usr/bin/python2.7-32</span></code> will request usage of the
|
|||
|
32-bit python 2.7.</p>
|
|||
|
<div class="versionadded">
|
|||
|
<p><span class="versionmodified added">New in version 3.7: </span>Beginning with python launcher 3.7 it is possible to request 64-bit version
|
|||
|
by the “-64” suffix. Furthermore it is possible to specify a major and
|
|||
|
architecture without minor (i.e. <code class="docutils literal notranslate"><span class="pre">/usr/bin/python3-64</span></code>).</p>
|
|||
|
</div>
|
|||
|
<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-15"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PATH</span></code> for a Python executable. 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-16"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PATH</span></code> search.</p>
|
|||
|
</div>
|
|||
|
<div class="section" id="arguments-in-shebang-lines">
|
|||
|
<h3>3.7.3. Arguments in shebang lines<a class="headerlink" href="#arguments-in-shebang-lines" title="Permalink to this headline">¶</a></h3>
|
|||
|
<p>The shebang lines can also specify additional options to be passed to the
|
|||
|
Python interpreter. For example, if you have a shebang line:</p>
|
|||
|
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span><span class="ch">#! /usr/bin/python -v</span>
|
|||
|
</pre></div>
|
|||
|
</div>
|
|||
|
<p>Then Python will be started with the <code class="docutils literal notranslate"><span class="pre">-v</span></code> option</p>
|
|||
|
</div>
|
|||
|
<div class="section" id="customization">
|
|||
|
<h3>3.7.4. Customization<a class="headerlink" href="#customization" title="Permalink to this headline">¶</a></h3>
|
|||
|
<div class="section" id="customization-via-ini-files">
|
|||
|
<h4>3.7.4.1. Customization via INI files<a class="headerlink" href="#customization-via-ini-files" title="Permalink to this headline">¶</a></h4>
|
|||
|
<p>Two .ini files will be searched by the launcher - <code class="docutils literal notranslate"><span class="pre">py.ini</span></code> in the current
|
|||
|
user’s “application data” directory (i.e. the directory returned by calling the
|
|||
|
Windows function <code class="docutils literal notranslate"><span class="pre">SHGetFolderPath</span></code> with <code class="docutils literal notranslate"><span class="pre">CSIDL_LOCAL_APPDATA</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>
|
|||
|
</div>
|
|||
|
<div class="section" id="customizing-default-python-versions">
|
|||
|
<h4>3.7.4.2. Customizing default Python versions<a class="headerlink" href="#customizing-default-python-versions" title="Permalink to this headline">¶</a></h4>
|
|||
|
<p>In some cases, a version qualifier can be included in a command to dictate
|
|||
|
which version of Python will be used by the command. A version qualifier
|
|||
|
starts with a major version number and can optionally be followed by a period
|
|||
|
(‘.’) and a minor version specifier. Furthermore it is possible to specifiy
|
|||
|
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-17"></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 commands <code class="docutils literal notranslate"><span class="pre">python3.1</span></code> and <code class="docutils literal notranslate"><span class="pre">python2.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.1-32</span></code>, the command <code class="docutils literal notranslate"><span class="pre">python</span></code> will use the 32-bit
|
|||
|
implementation of 3.1 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.1</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.1</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.1</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.1</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.1</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.1</span>
|
|||
|
</pre></div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="section" id="diagnostics">
|
|||
|
<h3>3.7.5. Diagnostics<a class="headerlink" href="#diagnostics" title="Permalink to this headline">¶</a></h3>
|
|||
|
<p>If an environment variable <code class="docutils literal notranslate"><span class="pre">PYLAUNCH_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.</p>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="section" id="finding-modules">
|
|||
|
<span id="id1"></span><h2>3.8. Finding modules<a class="headerlink" href="#finding-modules" title="Permalink to this headline">¶</a></h2>
|
|||
|
<p>Python usually stores its library (and thereby your site-packages folder) in the
|
|||
|
installation directory. So, if you had installed Python to
|
|||
|
<code class="file docutils literal notranslate"><span class="pre">C:\Python\</span></code>, the default library would reside in
|
|||
|
<code class="file docutils literal notranslate"><span class="pre">C:\Python\Lib\</span></code> and third-party modules should be stored in
|
|||
|
<code class="file docutils literal notranslate"><span class="pre">C:\Python\Lib\site-packages\</span></code>.</p>
|
|||
|
<p>To completely override <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>, create a <code class="docutils literal notranslate"><span class="pre">._pth</span></code> file with the same
|
|||
|
name as the DLL (<code class="docutils literal notranslate"><span class="pre">python37._pth</span></code>) or the executable (<code class="docutils literal notranslate"><span class="pre">python._pth</span></code>) and
|
|||
|
specify one line for each path to add 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>. The file based on the
|
|||
|
DLL name overrides the one based on the executable, which allows paths to be
|
|||
|
restricted for any program loading the runtime if desired.</p>
|
|||
|
<p>When the file exists, all registry and environment variables are ignored,
|
|||
|
isolated mode is enabled, and <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> is not imported unless one line in the
|
|||
|
file specifies <code class="docutils literal notranslate"><span class="pre">import</span> <span class="pre">site</span></code>. Blank paths and lines starting with <code class="docutils literal notranslate"><span class="pre">#</span></code> are
|
|||
|
ignored. Each path may be absolute or relative to the location of the file.
|
|||
|
Import statements other than to <code class="docutils literal notranslate"><span class="pre">site</span></code> are not permitted, and arbitrary code
|
|||
|
cannot be specified.</p>
|
|||
|
<p>Note that <code class="docutils literal notranslate"><span class="pre">.pth</span></code> files (without leading underscore) will be processed normally
|
|||
|
by the <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> module when <code class="docutils literal notranslate"><span class="pre">import</span> <span class="pre">site</span></code> has been specified.</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-18"></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-19"></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-20"></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-21"></span><a class="reference internal" href="cmdline.html#envvar-PYTHONHOME"><code class="xref std std-envvar docutils literal notranslate"><span class="pre">PYTHONHOME</span></code></a> is not set, this
|
|||
|
path is used instead of the path to the main executable when deducing the
|
|||
|
home location.</p></li>
|
|||
|
</ul>
|
|||
|
<p>The end result of all this is:</p>
|
|||
|
<ul class="simple">
|
|||
|
<li><p>When running <code class="file docutils literal notranslate"><span class="pre">python.exe</span></code>, or any other .exe in the main Python
|
|||
|
directory (either an installed version, or directly from the PCbuild
|
|||
|
directory), the core path is deduced, and the core paths in the registry are
|
|||
|
ignored. Other “application paths” in the registry are always read.</p></li>
|
|||
|
<li><p>When Python is hosted in another .exe (different directory, embedded via COM,
|
|||
|
etc), the “Python Home” will not be deduced, so the core path from the
|
|||
|
registry is used. Other “application paths” in the registry are always read.</p></li>
|
|||
|
<li><p>If Python can’t find its home and there are no registry value (frozen .exe,
|
|||
|
some very strange installation setup) you get a path with some default, but
|
|||
|
relative, paths.</p></li>
|
|||
|
</ul>
|
|||
|
<p>For those who want to bundle Python into their application or distribution, the
|
|||
|
following advice will prevent conflicts with other installations:</p>
|
|||
|
<ul class="simple">
|
|||
|
<li><p>Include a <code class="docutils literal notranslate"><span class="pre">._pth</span></code> file alongside your executable containing the
|
|||
|
directories to include. This will ignore paths listed in the registry and
|
|||
|
environment variables, and also ignore <a class="reference internal" href="../library/site.html#module-site" title="site: Module responsible for site-specific configuration."><code class="xref py py-mod docutils literal notranslate"><span class="pre">site</span></code></a> unless <code class="docutils literal notranslate"><span class="pre">import</span> <span class="pre">site</span></code> is
|
|||
|
listed.</p></li>
|
|||
|
<li><p>If you are loading <code class="file docutils literal notranslate"><span class="pre">python3.dll</span></code> or <code class="file docutils literal notranslate"><span class="pre">python37.dll</span></code> in your own
|
|||
|
executable, explicitly call <a class="reference internal" href="../c-api/init.html#c.Py_SetPath" title="Py_SetPath"><code class="xref c c-func docutils literal notranslate"><span class="pre">Py_SetPath()</span></code></a> or (at least)
|
|||
|
<a class="reference internal" href="../c-api/init.html#c.Py_SetProgramName" title="Py_SetProgramName"><code class="xref c c-func docutils literal notranslate"><span class="pre">Py_SetProgramName()</span></code></a> before <a class="reference internal" href="../c-api/init.html#c.Py_Initialize" title="Py_Initialize"><code class="xref c c-func docutils literal notranslate"><span class="pre">Py_Initialize()</span></code></a>.</p></li>
|
|||
|
<li><p>Clear and/or overwrite <span class="target" id="index-22"></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-23"></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">
|
|||
|
<blockquote>
|
|||
|
<div><span class="versionmodified changed">Changed in version 3.6: </span><ul class="simple">
|
|||
|
<li><p>Adds <code class="docutils literal notranslate"><span class="pre">._pth</span></code> file support and removes <code class="docutils literal notranslate"><span class="pre">applocal</span></code> option from
|
|||
|
<code class="docutils literal notranslate"><span class="pre">pyvenv.cfg</span></code>.</p></li>
|
|||
|
<li><p>Adds <code class="docutils literal notranslate"><span class="pre">pythonXX.zip</span></code> as a potential landmark when directly adjacent
|
|||
|
to the executable.</p></li>
|
|||
|
</ul>
|
|||
|
</div></blockquote>
|
|||
|
</div>
|
|||
|
<div class="deprecated">
|
|||
|
<blockquote>
|
|||
|
<div><span class="versionmodified deprecated">Deprecated since version 3.6: </span><p>Modules specified in the registry under <code class="docutils literal notranslate"><span class="pre">Modules</span></code> (not <code class="docutils literal notranslate"><span class="pre">PythonPath</span></code>)
|
|||
|
may be imported by <a class="reference internal" href="../library/importlib.html#importlib.machinery.WindowsRegistryFinder" title="importlib.machinery.WindowsRegistryFinder"><code class="xref py py-class docutils literal notranslate"><span class="pre">importlib.machinery.WindowsRegistryFinder</span></code></a>.
|
|||
|
This finder is enabled on Windows in 3.6.0 and earlier, but may need to
|
|||
|
be explicitly added to <a class="reference internal" href="../library/sys.html#sys.meta_path" title="sys.meta_path"><code class="xref py py-attr docutils literal notranslate"><span class="pre">sys.meta_path</span></code></a> in the future.</p>
|
|||
|
</div></blockquote>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="section" id="additional-modules">
|
|||
|
<h2>3.9. Additional modules<a class="headerlink" href="#additional-modules" title="Permalink to this headline">¶</a></h2>
|
|||
|
<p>Even though Python aims to be portable among all platforms, there are features
|
|||
|
that are unique to Windows. A couple of modules, both in the standard library
|
|||
|
and external, and snippets exist to use these features.</p>
|
|||
|
<p>The Windows-specific standard modules are documented in
|
|||
|
<a class="reference internal" href="../library/windows.html#mswin-specific-services"><span class="std std-ref">MS Windows Specific Services</span></a>.</p>
|
|||
|
<div class="section" id="pywin32">
|
|||
|
<h3>3.9.1. PyWin32<a class="headerlink" href="#pywin32" title="Permalink to this headline">¶</a></h3>
|
|||
|
<p>The <a class="reference external" href="https://pypi.org/project/pywin32">PyWin32</a> module by Mark Hammond
|
|||
|
is a collection of modules for advanced Windows-specific support. This includes
|
|||
|
utilities for:</p>
|
|||
|
<ul class="simple">
|
|||
|
<li><p><a class="reference external" href="https://docs.microsoft.com/en-us/windows/desktop/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://msdn.microsoft.com/en-us/library/fe1cf721%28VS.80%29.aspx">Microsoft Foundation Classes</a> (MFC)
|
|||
|
user interfaces</p></li>
|
|||
|
</ul>
|
|||
|
<p><a class="reference external" href="https://web.archive.org/web/20060524042422/https://www.python.org/windows/pythonwin/">PythonWin</a> is a sample MFC application
|
|||
|
shipped with PyWin32. It is an embeddable IDE with a built-in debugger.</p>
|
|||
|
<div class="admonition seealso">
|
|||
|
<p class="admonition-title">See also</p>
|
|||
|
<dl class="simple">
|
|||
|
<dt><a class="reference external" href="http://timgolden.me.uk/python/win32_how_do_i.html">Win32 How Do I…?</a></dt><dd><p>by Tim Golden</p>
|
|||
|
</dd>
|
|||
|
<dt><a class="reference external" href="http://www.boddie.org.uk/python/COM.html">Python and COM</a></dt><dd><p>by David and Paul Boddie</p>
|
|||
|
</dd>
|
|||
|
</dl>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="section" id="cx-freeze">
|
|||
|
<h3>3.9.2. cx_Freeze<a class="headerlink" href="#cx-freeze" title="Permalink to this headline">¶</a></h3>
|
|||
|
<p><a class="reference external" href="https://anthony-tuininga.github.io/cx_Freeze/">cx_Freeze</a> is a <a class="reference internal" href="../library/distutils.html#module-distutils" title="distutils: Support for building and installing Python modules into an existing Python installation."><code class="xref py py-mod docutils literal notranslate"><span class="pre">distutils</span></code></a>
|
|||
|
extension (see <a class="reference internal" href="../distutils/extending.html#extending-distutils"><span class="std std-ref">Extending Distutils</span></a>) which 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>
|
|||
|
</div>
|
|||
|
<div class="section" id="wconio">
|
|||
|
<h3>3.9.3. WConio<a class="headerlink" href="#wconio" title="Permalink to this headline">¶</a></h3>
|
|||
|
<p>Since Python’s advanced terminal handling layer, <a class="reference internal" href="../library/curses.html#module-curses" title="curses: An interface to the curses library, providing portable terminal handling. (Unix)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">curses</span></code></a>, is restricted to
|
|||
|
Unix-like systems, there is a library exclusive to Windows as well: Windows
|
|||
|
Console I/O for Python.</p>
|
|||
|
<p><a class="reference external" href="http://newcenturycomputers.net/projects/wconio.html">WConio</a> is a wrapper for
|
|||
|
Turbo-C’s <code class="file docutils literal notranslate"><span class="pre">CONIO.H</span></code>, used to create text user interfaces.</p>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="section" id="compiling-python-on-windows">
|
|||
|
<h2>3.10. Compiling Python on Windows<a class="headerlink" href="#compiling-python-on-windows" title="Permalink to this headline">¶</a></h2>
|
|||
|
<p>If you want to compile CPython yourself, first thing you should do is get the
|
|||
|
<a class="reference external" href="https://www.python.org/downloads/source/">source</a>. You can download either the
|
|||
|
latest release’s source or just grab a fresh <a class="reference external" href="https://devguide.python.org/setup/#getting-the-source-code">checkout</a>.</p>
|
|||
|
<p>The source tree contains a build solution and project files for Microsoft
|
|||
|
Visual Studio 2015, 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>
|
|||
|
<div class="admonition seealso">
|
|||
|
<p class="admonition-title">See also</p>
|
|||
|
<dl class="simple">
|
|||
|
<dt><a class="reference external" href="http://sebsauvage.net/python/mingw.html">Python + Windows + distutils + SWIG + gcc MinGW</a></dt><dd><p>or “Creating Python extensions in C/C++ with SWIG and compiling them with
|
|||
|
MinGW gcc under Windows” or “Installing Python extension with distutils
|
|||
|
and without Microsoft Visual C++” by Sébastien Sauvage, 2003</p>
|
|||
|
</dd>
|
|||
|
</dl>
|
|||
|
<p><a class="reference external" href="http://www.mingw.org/wiki/FAQ#toc14">MingW – Python extensions</a></p>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="section" id="other-platforms">
|
|||
|
<h2>3.11. Other Platforms<a class="headerlink" href="#other-platforms" title="Permalink to this headline">¶</a></h2>
|
|||
|
<p>With ongoing development of Python, some platforms that used to be supported
|
|||
|
earlier are no longer supported (due to the lack of users or developers).
|
|||
|
Check <span class="target" id="index-24"></span><a class="pep reference external" href="https://www.python.org/dev/peps/pep-0011"><strong>PEP 11</strong></a> for details on all unsupported platforms.</p>
|
|||
|
<ul class="simple">
|
|||
|
<li><p><a class="reference external" href="http://pythonce.sourceforge.net/">Windows CE</a> is still supported.</p></li>
|
|||
|
<li><p>The <a class="reference external" href="https://cygwin.com/">Cygwin</a> installer offers to install the Python
|
|||
|
interpreter as well (cf. <a class="reference external" href="ftp://ftp.uni-erlangen.de/pub/pc/gnuwin32/cygwin/mirrors/cygnus/release/python">Cygwin package source</a>, <a class="reference external" href="http://www.tishler.net/jason/software/python/">Maintainer releases</a>)</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>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
|
|||
|
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
|||
|
<div class="sphinxsidebarwrapper">
|
|||
|
<h3><a href="../contents.html">Table of Contents</a></h3>
|
|||
|
<ul>
|
|||
|
<li><a class="reference internal" href="#">3. Using Python on Windows</a><ul>
|
|||
|
<li><a class="reference internal" href="#the-full-installer">3.1. The full installer</a><ul>
|
|||
|
<li><a class="reference internal" href="#installation-steps">3.1.1. Installation steps</a></li>
|
|||
|
<li><a class="reference internal" href="#removing-the-max-path-limitation">3.1.2. Removing the MAX_PATH Limitation</a></li>
|
|||
|
<li><a class="reference internal" href="#installing-without-ui">3.1.3. Installing Without UI</a></li>
|
|||
|
<li><a class="reference internal" href="#installing-without-downloading">3.1.4. Installing Without Downloading</a></li>
|
|||
|
<li><a class="reference internal" href="#modifying-an-install">3.1.5. Modifying an install</a></li>
|
|||
|
</ul>
|
|||
|
</li>
|
|||
|
<li><a class="reference internal" href="#the-microsoft-store-package">3.2. The Microsoft Store package</a><ul>
|
|||
|
<li><a class="reference internal" href="#known-issues">3.2.1. Known Issues</a></li>
|
|||
|
</ul>
|
|||
|
</li>
|
|||
|
<li><a class="reference internal" href="#the-nuget-org-packages">3.3. The nuget.org packages</a></li>
|
|||
|
<li><a class="reference internal" href="#the-embeddable-package">3.4. The embeddable package</a><ul>
|
|||
|
<li><a class="reference internal" href="#python-application">3.4.1. Python Application</a></li>
|
|||
|
<li><a class="reference internal" href="#embedding-python">3.4.2. Embedding Python</a></li>
|
|||
|
</ul>
|
|||
|
</li>
|
|||
|
<li><a class="reference internal" href="#alternative-bundles">3.5. Alternative bundles</a></li>
|
|||
|
<li><a class="reference internal" href="#configuring-python">3.6. Configuring Python</a><ul>
|
|||
|
<li><a class="reference internal" href="#excursus-setting-environment-variables">3.6.1. Excursus: Setting environment variables</a></li>
|
|||
|
<li><a class="reference internal" href="#finding-the-python-executable">3.6.2. Finding the Python executable</a></li>
|
|||
|
</ul>
|
|||
|
</li>
|
|||
|
<li><a class="reference internal" href="#python-launcher-for-windows">3.7. Python Launcher for Windows</a><ul>
|
|||
|
<li><a class="reference internal" href="#getting-started">3.7.1. Getting started</a><ul>
|
|||
|
<li><a class="reference internal" href="#from-the-command-line">3.7.1.1. From the command-line</a></li>
|
|||
|
<li><a class="reference internal" href="#virtual-environments">3.7.1.2. Virtual environments</a></li>
|
|||
|
<li><a class="reference internal" href="#from-a-script">3.7.1.3. From a script</a></li>
|
|||
|
<li><a class="reference internal" href="#from-file-associations">3.7.1.4. From file associations</a></li>
|
|||
|
</ul>
|
|||
|
</li>
|
|||
|
<li><a class="reference internal" href="#shebang-lines">3.7.2. Shebang Lines</a></li>
|
|||
|
<li><a class="reference internal" href="#arguments-in-shebang-lines">3.7.3. Arguments in shebang lines</a></li>
|
|||
|
<li><a class="reference internal" href="#customization">3.7.4. Customization</a><ul>
|
|||
|
<li><a class="reference internal" href="#customization-via-ini-files">3.7.4.1. Customization via INI files</a></li>
|
|||
|
<li><a class="reference internal" href="#customizing-default-python-versions">3.7.4.2. Customizing default Python versions</a></li>
|
|||
|
</ul>
|
|||
|
</li>
|
|||
|
<li><a class="reference internal" href="#diagnostics">3.7.5. Diagnostics</a></li>
|
|||
|
</ul>
|
|||
|
</li>
|
|||
|
<li><a class="reference internal" href="#finding-modules">3.8. Finding modules</a></li>
|
|||
|
<li><a class="reference internal" href="#additional-modules">3.9. Additional modules</a><ul>
|
|||
|
<li><a class="reference internal" href="#pywin32">3.9.1. PyWin32</a></li>
|
|||
|
<li><a class="reference internal" href="#cx-freeze">3.9.2. cx_Freeze</a></li>
|
|||
|
<li><a class="reference internal" href="#wconio">3.9.3. WConio</a></li>
|
|||
|
</ul>
|
|||
|
</li>
|
|||
|
<li><a class="reference internal" href="#compiling-python-on-windows">3.10. Compiling Python on Windows</a></li>
|
|||
|
<li><a class="reference internal" href="#other-platforms">3.11. Other Platforms</a></li>
|
|||
|
</ul>
|
|||
|
</li>
|
|||
|
</ul>
|
|||
|
|
|||
|
<h4>Previous topic</h4>
|
|||
|
<p class="topless"><a href="unix.html"
|
|||
|
title="previous chapter">2. Using Python on Unix platforms</a></p>
|
|||
|
<h4>Next topic</h4>
|
|||
|
<p class="topless"><a href="mac.html"
|
|||
|
title="next chapter">4. Using Python on a Macintosh</a></p>
|
|||
|
<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/3.7/Doc/using/windows.rst"
|
|||
|
rel="nofollow">Show Source
|
|||
|
</a>
|
|||
|
</li>
|
|||
|
</ul>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<div class="clearer"></div>
|
|||
|
</div>
|
|||
|
<div class="related" role="navigation" aria-label="related navigation">
|
|||
|
<h3>Navigation</h3>
|
|||
|
<ul>
|
|||
|
<li class="right" style="margin-right: 10px">
|
|||
|
<a href="../genindex.html" title="General Index"
|
|||
|
>index</a></li>
|
|||
|
<li class="right" >
|
|||
|
<a href="../py-modindex.html" title="Python Module Index"
|
|||
|
>modules</a> |</li>
|
|||
|
<li class="right" >
|
|||
|
<a href="mac.html" title="4. Using Python on a Macintosh"
|
|||
|
>next</a> |</li>
|
|||
|
<li class="right" >
|
|||
|
<a href="unix.html" title="2. Using Python on Unix platforms"
|
|||
|
>previous</a> |</li>
|
|||
|
<li><img src="../_static/py.png" alt=""
|
|||
|
style="vertical-align: middle; margin-top: -1px"/></li>
|
|||
|
<li><a href="https://www.python.org/">Python</a> »</li>
|
|||
|
<li>
|
|||
|
<span class="language_switcher_placeholder">en</span>
|
|||
|
<span class="version_switcher_placeholder">3.7.4</span>
|
|||
|
<a href="../index.html">Documentation </a> »
|
|||
|
</li>
|
|||
|
|
|||
|
<li class="nav-item nav-item-1"><a href="index.html" >Python Setup and Usage</a> »</li>
|
|||
|
<li class="right">
|
|||
|
|
|||
|
|
|||
|
<div class="inline-search" style="display: none" role="search">
|
|||
|
<form class="inline-search" action="../search.html" method="get">
|
|||
|
<input placeholder="Quick search" type="text" name="q" />
|
|||
|
<input type="submit" value="Go" />
|
|||
|
<input type="hidden" name="check_keywords" value="yes" />
|
|||
|
<input type="hidden" name="area" value="default" />
|
|||
|
</form>
|
|||
|
</div>
|
|||
|
<script type="text/javascript">$('.inline-search').show(0);</script>
|
|||
|
|
|
|||
|
</li>
|
|||
|
|
|||
|
</ul>
|
|||
|
</div>
|
|||
|
<div class="footer">
|
|||
|
© <a href="../copyright.html">Copyright</a> 2001-2019, Python Software Foundation.
|
|||
|
<br />
|
|||
|
The Python Software Foundation is a non-profit corporation.
|
|||
|
<a href="https://www.python.org/psf/donations/">Please donate.</a>
|
|||
|
<br />
|
|||
|
Last updated on Jul 13, 2019.
|
|||
|
<a href="../bugs.html">Found a bug</a>?
|
|||
|
<br />
|
|||
|
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 2.0.1.
|
|||
|
</div>
|
|||
|
|
|||
|
</body>
|
|||
|
</html>
|