4. 在Windows上使用 Python¶
本文档旨在概述在 Microsoft Windows 上使用 Python 时应了解的特定于 Windows 的行为。
Unlike most Unix systems and services, Windows does not include a system supported installation of Python. To make Python available, the CPython team has compiled Windows installers with every release 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.
As specified in PEP 11, a Python release only supports a Windows platform while Microsoft considers the platform under extended support. This means that Python 3.13 supports Windows 8.1 and newer. If you require Windows 7 support, please install Python 3.8.
There are a number of different installers available for Windows, each with certain benefits and downsides.
The full installer contains all components and is the best option for developers using Python for any kind of project.
The Microsoft Store package is a simple installation of Python that is suitable for running scripts and packages, and using IDLE or other development environments. It requires Windows 10 and above, but can be safely installed without corrupting other programs. It also provides many convenient commands for launching Python and its tools.
nuget.org 安装包 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.
可嵌入的包 is a minimal package of Python suitable for embedding into a larger application.
4.1. The full installer¶
4.1.1. 安装步骤¶
四个 Python 3.13 安装程序可供下载 - 32位和64位版本的各有两个。 web installer (网络安装包)是一个小的初始化工具,它将在安装过程中,根据需要自动下载所需的组件。 offline installer (离线安装包)内含默认安装所需的组件,可选择功能仍需要Internet连接下载。请参阅 免下载安装 以了解在安装过程中避免下载的其他方法。
启动安装程序后,可以选择以下两个选项之一:

如果选择“Install Now(立即安装)”:
您 不 需要成为管理员(除非需要对C运行库进行系统更新,或者为所有用户安装 Python Launcher for Windows )
Python将安装到您的用户目录中
Python Launcher for Windows 将根据第一页底部的选项安装
将安装标准库,测试套件,启动器和pip
如果选择将安装目录将添加到
PATH
快捷方式仅对当前用户可见
选择“自定义安装”将允许您选择:要安装的功能、安装位置、其他选项或安装后的操作。如果要安装调试符号或二进制文件,您需要使用此选项。
如要为全部用户安装,应选择“自定义安装”。在这种情况下:
您可能需要提供管理凭据或批准
Python 将安装到Program Files目录中
Python Launcher for Windows 将安装到Windows目录中
安装期间可以选择可选功能
标准库可以预编译为字节码
如果选中,安装目录将添加到系统
PATH
快捷方式所有用户可用
4.1.2. 删除 MAX_PATH 限制¶
历史上Windows的路径长度限制为260个字符。这意味着长于此的路径将无法解决并导致错误。
在最新版本的 Windows 中,此限制可被扩展到大约 32,000 个字符。 但需要让管理员激活“启用 Win32 长路径”组策略,或在注册表键 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem
中设置 LongPathsEnabled
为 1
。
这允许 open()
函数,os
模块和大多数其他路径功能接受并返回长度超过 260 个字符的路径。
更改上述选项后,无需进一步配置。
在 3.6 版本发生变更: Python中启用了对长路径的支持。
4.1.3. 无UI 安装¶
安装程序UI中的所有选项也可以从命令行指定,允许脚本安装程序在许多机器上复制安装,而无需用户交互。还可以在不禁用UI的情况下设置这些选项,以更改一些默认值。
下列选项(通过附带 /?
执行安装器来查看)可被传给安装器:
名称 |
描述 |
---|---|
/passive |
显示进度而无需用户交互 |
/quiet |
安装/卸载时不显示任何 UI |
/simple |
防止用户定制 |
/uninstall |
移除 Python(无需确认) |
/layout [directory] |
预下载所有组件 |
/log [filename] |
指定日志记录文件位置 |
所有其他选项都传递为 name=value
,其中值通常是 0
来禁用某个特性, 1
来启用某个特性或路径。可用选项的完整列表如下所示。
名称 |
描述 |
默认值 |
---|---|---|
InstallAllUsers |
为所有用户安装。 |
0 |
TargetDir |
安装目录 |
基于InstallAllUsers选择 |
DefaultAllUsersTargetDir |
为所有用户安装时的默认安装路径 |
|
DefaultJustForMeTargetDir |
仅为当前用户安装时的默认安装路径 |
|
DefaultCustomTargetDir |
UI中显示的默认自定义安装目录 |
(空) |
AssociateFiles |
如果还安装了启动器,则创建文件关联。 |
1 |
CompileAll |
将所有 |
0 |
PrependPath |
将安装和脚本目录添加到 |
0 |
AppendPath |
将安装和脚本目录添加到 |
0 |
Shortcuts |
如果已安装,为解释器,文档和IDLE创建快捷方式 |
1 |
Include_doc |
安装Python手册 |
1 |
Include_debug |
安装调试二进制文件 |
0 |
Include_dev |
安装开发者头文件和库文件。 省略这一步可能导致安装不可用。 |
1 |
Include_exe |
安装 |
1 |
Include_launcher |
1 |
|
InstallLauncherAllUsers |
为所有用户安装启动器。还需要 |
1 |
Include_lib |
安装标准库和扩展模块。 省略这一步可能导致安装不可用。 |
1 |
Include_pip |
安装捆绑的pip和setuptools |
1 |
Include_symbols |
安装调试符号集 ( |
0 |
Include_tcltk |
安装Tcl/Tk 支持和IDLE |
1 |
Include_test |
安装标准库测试套件 |
1 |
Include_tools |
安装实用程序脚本 |
1 |
LauncherOnly |
仅安装启动器。这将覆盖大多数其他选项。 |
0 |
SimpleInstall |
禁用大多数安装UI |
0 |
SimpleInstallDescription |
使用简化安装UI时显示的自定义消息。 |
(空) |
例如,要以静默方式全局安装默认的Python,您可以(在命令提示符>)使用以下命令:
python-3.9.0.exe /quiet InstallAllUsers=1 PrependPath=1 Include_test=0
要允许用户在没有测试套件的情况下轻松安装Python的个人副本,可以使用以下命令提供快捷方式。这将显示一个简化的初始页面,不允许自定义:
python-3.9.0.exe InstallAllUsers=0 Include_launcher=0 Include_test=0
SimpleInstall=1 SimpleInstallDescription="Just for me, no test suite."
(请注意,省略启动器也会省略文件关联,并且仅在全局安装包含启动器时才建议用于每用户安装。)
上面列出的选项也可以在一个名为 unattend.xml
的文件中与可执行文件一起提供。此文件指定选项和值的列表。作为属性提供的值,(如果可能)它将转换为数字。作为文本提供的值,始终保留为字符串。此示例文件设置与上一示例采用相同的选项:
<Options>
<Option Name="InstallAllUsers" Value="no" />
<Option Name="Include_launcher" Value="0" />
<Option Name="Include_test" Value="no" />
<Option Name="SimpleInstall" Value="yes" />
<Option Name="SimpleInstallDescription">Just for me, no test suite</Option>
</Options>
4.1.4. 免下载安装¶
由于下载的初始安装包中未包含Python的某些可选功能,如果选择安装这些功能可能需要Internet连接。为了避免这种需要,可以按需下载所有可能的组件,以创建一个完整的布局,该布局将不再需要internet连接,而不管所选择的特性是什么。请注意,此下载可能比要求的要大,但是如果要执行大量安装,则拥有本地缓存的副本非常有用。
从命令提示符执行以下命令以下载所有可能的必需文件。 请记得要将 python-3.9.0.exe
替换为安装程序的实际名称,并在单独的目录中创建子目录以避免同名文件间的冲突。
python-3.9.0.exe /layout [可选的目标目录]
您也可以指定 /quiet
选项来隐藏进度显示。
4.1.5. 修改安装¶
安装Python后,您可以通过Windows中的“程序和功能”工具添加或删除功能。选择Python条目并选择“卸载/更改”以在维护模式下打开安装程序。
“修改” 允许您通过修改复选框来添加或删除功能 - 未更改的复选框将不会安装或删除任何内容。在此模式下无法更改某些选项,例如安装目录;要修改这些,您需要完全删除然后重新安装Python。
“修复” 将使用当前设置验证应安装的所有文件,并替换已删除或修改的任何文件
“卸载” 将完全删除Python,但 Python Launcher for Windows 除外,它在“程序和功能”中有自己的条目。
4.1.6. 安装自由线程二进制文件¶
Added in version 3.13: (试验性功能)
备注
本节中描述的所有内容都是试验性的,它们预计会在未来的发布版中发生改变。
要安装启用了自由线程的预编译版二进制文件 (参见 PEP 703),你应当选择 "Customize installation"。 在第二个选项页中包括了 "Download free-threaded binaries" 复选框。

选择此选项将下载并将额外的二进制文件安装到与 Python 主安装版本相同的目录下。 主可执行文件的名称为 python3.13t.exe
,而其他二进制文件将带有 t
前缀或完整的 ABI 前缀。 Python 源文件和捆绑的第三方依赖将与主安装版本共享。
自由线程版将被注册为具有 3.13t
标签的常规 Python 安装版(并会按相应系统平台的惯例附带 -32
或 -arm64
后缀)。 这使得各种工具能够找到它,并使得 Python Launcher for Windows 能够支持 py.exe -3.13t
。 请注意 launcher 会将 py.exe -3
(或 python3
shebang 行) 解读为“最新的 3.x 安装版”,这将使得自由线程版二进制文件优先于常规版,而 py.exe -3.13
则会使用常规版。 如果你要使用简短风格的选项,那么目前你应该选择不安装自由线程版二进制文件。
要在命令行中指定安装选项,请使用 Include_freethreaded=1
。 请参阅 免下载安装 获取有关预先下载额外二进制文件供离线安装的指导。 包括调试符号和二进制文件的选项也同样适用于自由线程构建版。
自由线程版二进制文件也可 在 nuget.org 获取。
4.2. The Microsoft Store package¶
Added in version 3.7.2.
The Microsoft Store package is an easily installable Python interpreter that is intended mainly for interactive use, for example, by students.
To install the package, ensure you have the latest Windows 10 updates and search the Microsoft Store app for "Python 3.13". Ensure that the app you select is published by the Python Software Foundation, and install it.
警告
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.
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 python
. Further, pip and IDLE may be used by typing
pip
or idle
. IDLE can also be found in Start.
All three commands are also available with version number suffixes, for
example, as python3.exe
and python3.x.exe
as well as
python.exe
(where 3.x
is the specific version you want to launch,
such as 3.13). Open "Manage App Execution Aliases" through Start to
select which version of Python is associated with each command. It is
recommended to make sure that pip
and idle
are consistent with
whichever version of python
is selected.
Virtual environments can be created with python -m venv
and activated
and used as normal.
If you have installed another version of Python and added it to your
PATH
variable, it will be available as python.exe
rather than the
one from the Microsoft Store. To access the new installation, use
python3.exe
or python3.x.exe
.
The py.exe
launcher will detect this Python installation, but will prefer
installations from the traditional installer.
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
4.2.1. Known issues¶
4.2.1.1. Redirection of local data, registry, and temporary paths¶
Because of restrictions on Microsoft Store apps, Python scripts may not have
full write access to shared locations such as TEMP
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.
At runtime, Python will use a private copy of well-known Windows folders and the registry.
For example, if the environment variable %APPDATA%
is c:\Users\<user>\AppData\
,
then when writing to C:\Users\<user>\AppData\Local
will write to
C:\Users\<user>\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\Local\
.
When reading files, Windows will return the file from the private folder, or if that does not exist, the
real Windows directory. For example reading C:\Windows\System32
returns the contents of C:\Windows\System32
plus the contents of C:\Program Files\WindowsApps\package_name\VFS\SystemX86
.
You can find the real path of any existing file using os.path.realpath()
:
>>> import os
>>> test_file = 'C:\\Users\\example\\AppData\\Local\\test.txt'
>>> os.path.realpath(test_file)
'C:\\Users\\example\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\\LocalCache\\Local\\test.txt'
When writing to the Windows Registry, the following behaviors exist:
Reading from
HKLM\\Software
is allowed and results are merged with theregistry.dat
file in the package.Writing to
HKLM\\Software
is not allowed if the corresponding key/value exists, i.e. modifying existing keys.Writing to
HKLM\\Software
is allowed as long as a corresponding key/value does not exist in the package and the user has the correct access permissions.
For more detail on the technical basis for these limitations, please consult Microsoft's documentation on packaged full-trust apps, currently available at docs.microsoft.com/en-us/windows/msix/desktop/desktop-to-uwp-behind-the-scenes
4.3. nuget.org 安装包¶
Added in version 3.5.2.
nuget.org 是一个精简的 Python 环境,用于在没有全局安装 Python 的系统的持续集成和构建。 虽然 nuget 是“.NET的包管理器”,但是对于包含构建时工具的包来说,它也可以很好地工作。
访问 nuget.org 获取有关使用 nuget 的最新信息。 下面的摘要对 Python 开发人员来说已经足够了。
nuget.exe
命令行工具可以直接从 https://aka.ms/nugetclidl
下载,例如,使用 curl 或 PowerShell。 使用该工具安装 64 位或 32 位最新版本的 Python:
nuget.exe install python -ExcludeVersion -OutputDirectory .
nuget.exe install pythonx86 -ExcludeVersion -OutputDirectory .
要选择特定版本,请添加 -Version 3.x.y
。 输出目录可以从 .
更改,包将安装到子目录中。 默认情况下,子目录的名称与包的名称相同,如果没有 -ExcludeVersion
选项,则此名称将包含已安装的特定版本。 子目录里面是一个包含 Python 安装的 tools
目录:
# 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
通常,nuget 包不可升级,应该平行安装较新版本并使用完整路径引用。 或者,手动删除程序包目录并再次安装。 如果在构建之间不保留文件,许多 CI 系统将自动执行此操作。
除了 tools
目录外,还有一个 build\native
目录。 它包含一个 MSBuild 属性文件 python.props
,可以在 C++ 项目中使用该文件来引用 Python 安装。 包含这些设置将自动在生成中使用标头和导入库。
在 nuget.org 上的软件包信息页 www.nuget.org/packages/python 对应 64 位版本,www.nuget.org/packages/pythonx86 对应 32 位版本,www.nuget.org/packages/pythonarm64 对应 ARM64 版本
4.3.1. 自由线程版软件包¶
Added in version 3.13: (试验性功能)
备注
本节中描述的所有内容都是试验性的,它们预计会在未来的发布版中发生改变。
包含自由线程版二进制文件的包名称 python-freethreaded 对应 64 位版本,pythonx86-freethreaded 对应 32 位版本,pythonarm64-freethreaded 对应 ARM64 版本。 这些包同时包含 python3.13t.exe
和 python.exe
入口点,两者均在自由线程模式下运行。
4.4. 可嵌入的包¶
Added in version 3.5.
嵌入式发行版是一个包含最小 Python 环境的 ZIP 文件。 它旨在作为另一个应用程序的一部分,而不是由最终用户直接访问。
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 .pyc
files in a ZIP, and python3.dll
, python37.dll
,
python.exe
and pythonw.exe
are all provided. Tcl/tk (including all
dependents, such as Idle), pip and the Python documentation are not included.
备注
The embedded distribution does not include the Microsoft C Runtime 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
ucrtbase.dll
in the system directory.
第三方软件包应该由应用程序与嵌入式发行版一起安装。这个发行版不支持像常规 Python 安装那样使用 pip 来管理依赖关系,不过可以小心地将 pip 包含进来并使用它进行自动更新。 通常,第三方包应该作为应用程序的一部分(“打包”)处理,以便开发人员在向用户提供更新之前能够确保与新版本兼容。
下面描述了这个发行版的两个推荐用例。
4.4.1. Python 应用程序¶
用 Python 编写的应用程序并不一定要求用户了解这一事实。 在这种情况下,可以使用嵌入式发行版在安装包中包含 Python 的私有版本。 根据它应该有多透明(或者相反,它应该看起来有多专业),有两个选项。
使用专门的可执行文件作为启动程序需要一些编码,但为用户提供了最透明的体验。使用定制的启动器,没有明显的迹象表明程序是在 Python 上运行的:图标可以定制,公司和版本信息可以指定,文件关联可以正常运行。在大多数情况下,自定义启动程序应该只需使用硬编码的命令行就能调用 Py_Main
。
更简单的方法是提供批处理文件或生成的快捷方式,使用所需的命令行参数直接调用 python.exe
或 pythonw.exe
。在这种情况下,应用程序将显示为 Python 而不是其实际名称,并且用户可能无法将其与其他正在运行的 Python 进程或文件关联区分开来。
对于后一种方法,包应该与 Python 可执行文件一起作为目录安装,以确保它们在路径上可用。 使用专用的启动器,包可以位于其他位置,因为在启动应用程序之前有机会指定搜索路径。
4.4.2. 嵌入Python¶
用本地代码编写的应用程序通常需要某种形式的脚本语言,嵌入式Python发行版可以用于此目的。通常,应用程序的大部分都是本机代码,某些部分将调用 python.exe
或直接使用 python3.dll
。无论是哪种情况,将嵌入的发行版解压缩到应用程序安装的子目录中就足以提供可加载的Python解释器。
与应用程序使用一样,包可以安装到任何位置,因为在初始化解释器之前有机会指定搜索路径。否则,使用嵌入式发行版和常规安装之间没有根本区别。
4.5. 替代捆绑包¶
除了标准的CPython发行版之外,还有一些包含附加功能的修改包。以下是热门版本及其主要功能的列表:
- ActivePython
具有多平台兼容性的安装程序,文档,PyWin32
- Anaconda
流行的科学模块(如numpy,scipy和pandas)和
conda
包管理器。- Enthought 部署管理器
“下一代的 Python 环境和包管理器”
之前 Enthought 提供了 Canopy,但已经 于 2016 年结束生命期。
- WinPython
特定于Windows的发行版,包含用于构建包的预构建科学包和工具。
请注意,这些软件包可能不包含最新版本的Python或其他库,并且不由核心Python团队维护或支持。
4.6. Configuring Python¶
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 Python Launcher for Windows.
4.6.1. Excursus: Setting environment variables¶
Windows allows environment variables to be configured permanently at both the User level and the System level, or temporarily in a command prompt.
To temporarily set environment variables, open Command Prompt and use the set command:
C:\>set PATH=C:\Program Files\Python 3.9;%PATH%
C:\>set PYTHONPATH=%PYTHONPATH%;C:\My_python_lib
C:\>python
These changes will apply to any further commands executed in that console, and will be inherited by any applications started from the console.
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 PATH
by adding the directory containing
python.exe to the start is a common way to ensure the correct version
of Python is launched.
To permanently modify the default environment variables, click Start and search for 'edit environment variables', or open System properties, Advanced system settings and click the Environment Variables 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).
备注
Windows will concatenate User variables after System variables, which may
cause unexpected results when modifying PATH
.
The PYTHONPATH
variable is used by all versions of Python,
so you should not permanently configure it unless the listed paths
only include code that is compatible with all of your installed Python
versions.
参见
- https://learn.microsoft.com/windows/win32/procthread/environment-variables
Overview of environment variables on Windows
- https://learn.microsoft.com/windows-server/administration/windows-commands/set_1
The
set
command, for temporarily modifying environment variables- https://learn.microsoft.com/windows-server/administration/windows-commands/setx
The
setx
command, for permanently modifying environment variables
4.6.2. Finding the Python executable¶
在 3.5 版本发生变更.
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.
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
PATH
. The location of the Scripts\
folder is also added.
This allows you to type python to run the interpreter, and
pip for the package installer. Thus, you can also execute your
scripts with command line options, see 命令行 documentation.
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 PATH
using the directions in Excursus: Setting environment variables. You
need to set your PATH
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):
C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files\Python 3.9
4.7. UTF-8 模式¶
Added in version 3.7.
Windows 仍然使用传统编码格式作为系统的编码格式 (ANSI 代码页)。 Python 使用它作为文本文件默认的编码格式 (即 locale.getencoding()
)。
这可能会造成问题,因为因特网和大多数 Unix 系统包括 WSL (Windows Subsystem for Linux) 广泛使用 UTF-8。
你可以使用 Python UTF-8 模式 将默认的文本编码格式改为 UTF-8。 要启用 Python UTF-8 模式 可以通过 -X utf8
命令行选项,或者 PYTHONUTF8=1
环境变量。 请参阅 PYTHONUTF8
了解如何启用 UTF-8 模式,并参阅 Excursus: Setting environment variables 了解如何修改环境变量。
当 Python UTF-8 模式 启用时,你仍然可以通过 "mbcs" 编解码器使用系统编码格式(ANSI 代码页)。
请注意添加 PYTHONUTF8=1
到默认环境变量将会影响你的系统中的所有 Python 3.7+ 应用。 如果你有任何 Python 3.7+ 应用仍然依赖于传统的系统编码格式,则推荐设置临时环境变量或使用 -X utf8
命令行选项。
4.8. Python Launcher for Windows¶
Added in version 3.3.
用于Windows的Python启动器是一个实用程序,可帮助定位和执行不同的Python版本。它允许脚本(或命令行)指示特定Python版本的首选项,并将定位并执行该版本。
与 PATH
变量不同,启动器将正确选择最合适的Python版本。它更倾向于按用户安装而不是系统安装,并按语言版本排序,而不是使用最新安装的版本。
启动器最初是在 PEP 397 中指定的。
4.8.1. 入门¶
4.8.1.1. 从命令行¶
在 3.6 版本发生变更.
全局安装Python 3.3及更高版本将把启动器放在你的 PATH
上。启动程序与所有可用的Python版本兼容,因此安装哪个版本无关紧要。要检查启动程序是否可用,请在命令提示符中执行以下命令:
py
您应该会发现已安装的最新版本的Python已启动 - 它可以正常退出,并且将指定的任何其他命令行参数直接发送到Python。
如果您安装了多个版本的Python(例如,3.7和 3.13 ),您会注意到Python 3.13 启动 - 如果要启动 Python 3.7,尝试命令:
py -3.7
如果您想使用已安装的 Python 2 的最新版本,请尝试以下命令:
py -2
如果您看到以下错误,则表明您没有安装启动器:
'py' 不是内部或外部命令,也不是可运行的程序或批处理文件。
Tix 命令:
py --list
显示当前已安装的Python版本。
-x.y
参数是 -V:Company/Tag
参数的简短形式,它允许选择一个特定的 Python 运行时,包括可能来自于 pyth.onl 以外地方的版本。 任何遵循 PEP 514 进行注册的运行时都将是可被发现的。 --list
命令将列出所有使用 -V:
格式的可用运行时。
当使用 -V:
参数时,指定 Company 将把选择限制到来自该提供方的运行时,而仅指定 Tag 将选择来自所有提供方的运行时。 请注意省略斜杠将会视作是一个 Tag:
# 选择任意带 '3.*' 标签的运行时
py -V:3
# 选择任何 'PythonCore' 发行的运行时
py -V:PythonCore/
# 选择 PythonCore 的最新 Python 3 运行时
py -V:PythonCore/3
该参数的简短形式 (-3
) 将只选择来自核心 Python 发布版的运行时,而不选择其他分发版。 但是,完整形式 (-V:3
) 则将选择来自任何版本的运行时。
Company 是在完整字符串上以大小写不敏感的方式进行匹配。 Tag 是在完整字符串或前缀上进行匹配,具体取决于下一个字符是点号还是连字符。 这将允许 -V:3.1
匹配 3.1-32
,但不匹配 3.10
。 Tag 是使用数字顺序进行排序的 (3.10
比 3.1
新),但会按文本进行比较 (-V:3.01
将不匹配 3.1
)。
4.8.1.2. 从虚拟环境¶
Added in version 3.5.
如果启动程序运行时没有明确的Python版本,并且虚拟环境(使用标准库创建 venv
模块或外部 virtualenv
工具)处于活动状态,则启动程序将运行虚拟环境的解释器而不是全局的。要运行全局解释器,请停用虚拟环境,或显式指定全局Python版本。
4.8.1.3. 从脚本¶
让我们创建一个测试Python脚本 - 创建一个名为 hello.py
的文件,其中包含以下内容
#! python
import sys
sys.stdout.write("hello from Python %s\n" % (sys.version,))
从hello.py所在的目录中,执行以下命令:
py hello.py
您应该注意到最新的Python 2.x安装的版本号已打印出来。现在尝试将第一行更改为:
#! python3
现在重新执行该命令将打印最新的 Python 3.x 信息。 如上面的命令行示例一样,你可以更明确地指定版本限定符。 假设你已安装了 Python 3.7,请尝试将第一行改为 #! python3.7
那么你应当看到打印出了 3.7 的版本信息。
请注意,与交互式使用不同,裸“python”将使用您已安装的Python 2.x的最新版本。这是为了向后兼容及兼容Unix,其中命令 python
通常是指Python 2。
4.8.1.4. 从文件关联¶
安装时应该将启动器与Python文件(即 .py
, .pyw
, .pyc
文件)相关联。这意味着当您从Windows资源管理器中双击其中一个文件时,将使用启动程序,因此您可以使用上述相同的工具让脚本指定应使用的版本。
这样做的主要好处是,单个启动程序可以同时支持多个Python版本,具体取决于第一行的内容。
4.8.2. Shebang 行¶
如果脚本文件的第一行以 #!
开头,则称为 "shebang" 行。Linux和其他类Unix操作系统都有对这些行的本机支持,它们通常在此类系统上用来指示应该如何执行脚本。这个启动器允许在Windows上对Python脚本使用相同的工具,上面的示例演示了它们的使用。
为了允许Python脚本中的shebang行在Unix和Windows之间移植,该启动器支持许多“虚拟”命令来指定要使用的解释器。支持的虚拟命令是:
/usr/bin/env
/usr/bin/python
/usr/local/bin/python
python
例如,如果脚本开始的第一行为
#! /usr/bin/python
将找到并使用默认的 Python 或激活的虚拟环境。 因为在 Unix 上编写的许多 Python 脚本都已经有了这一行,你应该会发现这些脚本可以由启动器使用而无需修改。 如果你在 Windows 上编写一个新脚本并希望其在 Unix 上可用,你应当使用某个以 /usr
开头的 shebang 行。
任何上述虚拟命令都可以附带一个显式版本号的后缀(可以是只有主版本号,也可以是有主版本号和次版本号)。 此外还可以在次版本号之后添加 "-32" 来请求 32 位版本。 即 /usr/bin/python3.7-32
将请求使用 32 位的 Python 3.7。 如果激活了一个虚拟环境,则将忽略版本号并使用激活的环境。
Added in version 3.7: 从 python 启动器 3.7 开始,可以通过 "-64" 后缀调用 64 位版本。 此外还可以指定一个主版本号加架构而不带次版本号 (即 /usr/bin/python3-64
)。
在 3.11 版本发生变更: “-64”后缀已被弃用,现在会被视为“任何不被确定为 i386/32 位的架构”。 要请求一个特定的环境,请使用新的 -V:TAG
参数并附带完整的标签。
在 3.13 版本发生变更: 引用了 python
的虚拟命令现在会优先使用激活的虚拟环境再去搜索 PATH
。 这是为了处理 shebang 指定了 /usr/bin/env python3
但激活的环境中没有 python3.exe
的情况。
shebang 行的 /usr/bin/env
形式具有一个额外的特别属性。 在查找已安装的 Python 解释器时,此形式将在可执行程序目录 PATH
中搜索与作为第一个参数传入的名称相匹配的 Python 可执行程序。 这对应于 Unix 中 PATH
执行搜索的 env
程序的行为。 如果无法找到与 env
命令之后的第一个参数相匹配的可执行程序,但该参数是以 python
开头的,它将按针对其他虚拟命令的描述来处理。 可以设置环境变量 PYLAUNCHER_NO_SEARCH_PATH
(为任意值) 来跳过对 PATH
的搜索。
无法匹配这些模式中任何一个的井号叹号行将在启动器的 .INI 文件 的 [commands]
一节中查找。 这可被用来以对你的系统来说有意义的方式处理某些命令。 命名的名称必须是一个单独的参数(在井号叹号行的可执行程序中不可有空格),而被替代的值则是该可执行程序的完整路径(在 .INI 中指定的附加参数将作为文件名的一部分被引用)。
[commands]
/bin/xpython=C:\Program Files\XPython\python.exe
任何未出现在 .INI 文件中的命令都会被当作 Windows 可执行程序的绝对或相对于包含脚本文件的目录的路径。 这对于 Windows 专属的脚本来说很方便,例如由安装器所生成的脚本,因为此行为与 Unix 风格的 shell 是不兼容的。 这些路径可以加上引号,并可以包含多个参数,在它之后将会加上脚本路径以及任何附加参数。
4.8.3. shebang 行的参数¶
shebang 行还可以指定要传递给Python解释器的其他选项。 举例来说,如果你有这样的 shebang 行:
#! /usr/bin/python -v
那么 Python 将以 -v
选项启动
4.8.4. 自定义¶
4.8.4.1. 通过INI文件自定义¶
启动器将搜索两个 .ini 文件 —— 当前用户应用程序数据目录中的 py.ini
(%LOCALAPPDATA%
或 $env:LocalAppData
) 以及启动器所在目录中的 py.ini
。 同样的 .ini 文件还会被用于启动器的‘控制台’版本 (即 py.exe) 和‘窗口’版本 (即 pyw.exe)。
“应用程序目录”中指定的自定义优先于可执行文件旁边.ini文件的自定义,因此对启动程序旁边的.ini文件不具有写访问权限的用户可以覆盖该全局.ini文件中的命令。
4.8.4.2. 自定义默认的Python版本¶
在某些情况下,可以在命令中包含版本限定符,以指定命令将使用哪个Python版本。版本限定符以主版本号开头,可以选择后跟 ('.') 和次版本说明符。此外,可以通过添加 "-32" 或 “-64” 来指定是请求32位还是64位实现。
例如,一个shebang 行的 #!python
行没有版本限定符,而 #!python3
有一个版本限定符,它只指定一个主版本。
如果在命令中找不到版本限定符,则可以设置环境变量 PY_PYTHON
以指定默认版本限定符。 如果未设置,则默认为 "3"。 该变量可以指定能通过命令行传递的任何值,比如 "3", "3.7", "3.7-32" 或 "3.7-64"。 (请注意 "-64" 选项仅适用于 Python 3.7 或更高版本中包含的启动器。)
如果没有找到次版本限定符,则可以设置环境变量 PY_PYTHON{major}
(其中 {major}
是上面确定的当前主要版本限定符)以指定完整版本。如果没有找到这样的选项,启动器将枚举已安装的Python版本并使用为主要版本找到的最新次要版本,尽管不能保证,但该版本可能是该系列中最新安装的版本。
在安装了相同(major.minor)Python版本的32位和64位的64位Windows上,64位版本将始终是首选。对于启动程序的32位和64位实现都是如此 -- 这对于启动程序32位和64位都是正确的 -- 如果可用,32位启动程序将倾向于执行指定版本的64位Python安装。这样就可以预测启动器的行为,只知道PC上安装了哪些版本,而不考虑它们的安装顺序(即,不知道32位或64位版本的Python和相应的启动器是否是最后安装)。如上所述,可以在版本说明符上使用可选的“-32”或“-64”后缀来更改此行为。
示例:
如果没有设置相关选项,命令
python
和python2
将使用安装的最新Python 2.x版本,命令python3
将使用最新安装的Python 3.x.命令
python3.7
根本不会查阅任何选项,因为版本已完全指定。如果
PY_PYTHON=3
,命令python
和python3
都将使用最新安装的Python 3版本。如果
PY_PYTHON=3.7-32
,命令python
将使用3.7的32位实现,而命令python3
将使用最新安装的Python(PY_PYTHON根本没有被视为指定了主要版本。)如果
PY_PYTHON=3
且PY_PYTHON3=3.7
,命令python
和python3
都将特别使用3.7
除环境变量外,还可以在启动程序使用的.INI文件中配置相同的设置。 INI文件中的部分称为 [defaults]
,键名称将与没有前导 PY_
前缀的环境变量相同(并注意INI文件中的键名不区分大小写) 。)环境变量的内容将覆盖INI文件中指定的内容。
例如:
设置
PY_PYTHON=3.7
等同于包含以下内容的INI文件:
[defaults]
python=3.7
设置
PY_PYTHON=3
和PY_PYTHON3=3.7
相当于包含以下内容的INI文件:
[defaults]
python=3
python3=3.7
4.8.5. 诊断¶
如果环境变量 PYLAUNCHER_DEBUG
已设置(为任何值),启动器将把诊断信息打印到 stderr(即控制台)。 此信息会尽量做到既详细 又 简洁,它应当允许你查看已被定位的 Python 的版本,特定版本为何被选择以及被用于执行目标 Python 的实际命令行。 它的主要目标是用于测试和调试。
4.8.6. 试运行¶
如果环境变量 PYLAUNCHER_DRYRUN
已设置(为任意值),启动器将输出它将要运行的命令,但不会实际启动 Python。 这对于想要使用启动器执行检测然后再直接启动 Python 的工具来说很有用处。 请注意写入到标准输出的命令总是会使用 UTF-8 来编码,因而在控制台中可能无法正确渲染。
4.8.7. 按需安装¶
如果环境变量 PYLAUNCHER_ALLOW_INSTALL
已经设置(为任何值),而所请求的 Python 版本没有安装但可以在 Microsoft Store 获得,启动器将尝试安装它。 这可能需要用户进行交互来完成,你可能需要再次运行此命令。
额外的 PYLAUNCHER_ALWAYS_INSTALL
变量将导致启动器总是尝试安装 Python,即使它已经被检测到。 这主要是出于测试目的(并且应当与 PYLAUNCHER_DRYRUN
一起使用)。
4.8.8. 返回码¶
Python 启动器可能返回以下的退出码。 不幸的是,没有任何办法可以将这些退出码与 Python 本身的退出码区分开来。
退出码的名称将在源代码中使用,并且仅供参考。 除了阅读本页面以外没有其他办法可以获取或解读它们。 这些条目是以名称的字母顺序列出的。
名称 |
值 |
描述 |
---|---|---|
RC_BAD_VENV_CFG |
107 |
找到了 |
RC_CREATE_PROCESS |
101 |
启动 Python 失败。 |
RC_INSTALLING |
111 |
安装已启动,但命令需要在其完成后重新运行。 |
RC_INTERNAL_ERROR |
109 |
未预期的错误。 请报告程序错误。 |
RC_NO_COMMANDLINE |
108 |
无法从操作系统获取命令行。 |
RC_NO_PYTHON |
103 |
无法定位所请求的版本。 |
RC_NO_VENV_CFG |
106 |
需要 |
4.9. 查找模块¶
这些注释以详细的 Windows 注释对 sys.path 模块搜索路径的初始化 中的描述进行了补充。
当找不到 ._pth
文件时, sys.path
是如何在Windows上填充的:
在开始时,添加一个空条目,该条目对应于当前目录。
如果环境变量
PYTHONPATH
存在,如 环境变量 中所述,则接下来添加其条目。请注意,在Windows上,此变量中的路径必须用分号分隔,以区别于驱动器标识符中使用的冒号(C:\
等)。额外的 "应用程序路径" 可以作为子键被同时添加到注册表
HKEY_CURRENT_USER
和HKEY_LOCAL_MACHINE
分支下的\SOFTWARE\Python\PythonCore{version}\PythonPath
中。 以分号分隔的路径字符串作为默认值的子键将导致每个路径都被添加到sys.path
中。 (请注意所有已知的安装程序都只使用 HKLM,因此 HKCU 通常为空。)如果设置了环境变量
PYTHONHOME
,则将其假定为 “Python 主目录” 。否则,主Python可执行文件的路径用于定位 “landmark 文件” (Lib\os.py
或pythonXY.zip
)以推断 ”Python 主目录“ 。如果找到了Python主目录,则基于该文件夹将相关的子目录添加到sys.path
(Lib
,plat-win
等)。否则,核心Python路径是从存储在注册表中的PythonPath构造的。如果找不到Python Home,也没有指定
PYTHONPATH
环境变量,并且找不到注册表项,则使用具有相对条目的默认路径(例如.\Lib; .\plat-win
等等)。
如果在主可执行文件旁边或在可执行文件上一级的目录中找到 pyvenv.cfg
文件,则以下变体适用:
如果
home
是一个绝对路径,并且PYTHONHOME
未设置,则在推断起始位置时使用此路径而不是主可执行文件的路径。
这一切的最终结果是:
运行
python.exe
,或主Python目录中的任何其他.exe(安装版本,或直接来自PCbuild目录)时,推导出核心路径,并忽略注册表中的核心路径。始终读取注册表中的其他“应用程序路径”。当Python托管在另一个.exe(不同的目录,通过COM嵌入等)时,将不会推断出“Python Home”,因此使用了来自注册表的核心路径。始终读取注册表中的其他“应用程序路径”。
如果Python找不到它的主目录并且没有注册表值(冻结的.exe,一些非常奇怪的安装设置),那么你会得到一条带有一些默认但相对的路径的路径。
对于那些想要将Python捆绑到其应用程序或发行版中的人,以下建议将防止与其他安装冲突:
在您的可执行文件中包含一个
._pth
文件,其中包含目录。这将忽略注册表和环境变量中列出的路径,并忽略site
,除非列出import site
。如果你在自己的可执行文件中加载
python3.dll
或python37.dll
,请在Py_InitializeFromConfig()
之前显式地设置PyConfig.module_search_paths
。清除 和/或 覆盖
PYTHONPATH
并在启动来自应用程序的python.exe
之前设置PYTHONHOME
。如果您不能使用前面的建议(例如,您是一个允许人们直接运行
python.exe
的分发版),请确保安装目录中存在 landmark 文件 (Lib\os.py
)。 (请注意,在 ZIP 文件中不会检测到该文件,但会检测到正确命名的 ZIP 文件。)
这些将确保系统范围安装中的文件不会优先于与应用程序捆绑在一起的标准库的副本。否则,用户可能会在使用您的应用程序时遇到问题请注意,第一个建议是最好的,因为其他建议可能仍然容易受到注册表和用户站点包中的非标准路径的影响。
在 3.6 版本发生变更: 添加 ._pth
文件支持并从 pyvenv.cfg
中移除了 applocal
选项。
在 3.6 版本发生变更: 当与可执行文件直接相邻时将添加 pythonXX.zip
作为潜在的标志物。
自 3.6 版本弃用: 在 Modules
(不是 PythonPath
) 下的注册表中指定的模块可以通过 importlib.machinery.WindowsRegistryFinder
导入。 在 Windows 上此查找器在 3.6.0 及更早版本中被启用,但在将来可能需要显式地添加到 sys.meta_path
。
4.10. 附加模块¶
尽管Python的目标是在所有平台中都可移植,但是Windows有一些独特的特性。在标准库和外部都有一些模块和代码片段在使用这些特性。
特定于Windows的标准模块记录在 Windows系统相关模块 中。
4.10.1. PyWin32¶
Mark Hammond 编写的 PyWin32 模块是一组用于高级 Windows 专属支持的模块。 这包括以下实用工具:
Component Object Model (COM)
Win32 API 调用
注册
事件日志
Microsoft Foundation Classes (MFC) 用户接口
PythonWin 是PyWin32附带的一个示例MFC应用程序。它是一个内置调试器的可嵌入IDE。
参见
- Win32 How Do I...?
Tim Golden 著
- Python and COM
David 和 Paul Boddie 著
4.10.2. cx_Freeze¶
cx_Freeze 将 Python 脚本包装成可执行的 Windows 程序 (*.exe
文件)。 当你完成此操作后,你就可以分发你的应用程序而无需用户安装 Python。
4.11. 在Windows上编译Python¶
如果你想要自己编译 CPython,首先要做的是获取 源代码。 你可以下载最新发行版的源代码或是执行最新的 签出。
源代码树包含Microsoft Visual Studio的构建解决方案和项目文件,它是用于构建官方Python版本的编译器。这些文件位于 PCbuild
目录中。
检查 PCbuild/readme.txt
以获取有关构建过程的一般信息。
有关扩展模块,请参阅 在 Windows 上构建 C 和 C++ 扩展 。
4.12. Other Platforms¶
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 PEP 11 for details on all unsupported platforms.
Windows CE is no longer supported since Python 3 (if it ever was).
The Cygwin installer offers to install the Python interpreter as well
See Python for Windows for detailed information about platforms with pre-compiled installers.