On this page
3. 在 Windows 上使用 Python
本文档旨在概述您在 Microsoft Windows 上使用 Python 时应了解的 Windows 特定行为。
与大多数 Unix 系统和服务不同,Windows 不包括系统支持的 Python 安装。为了使 Python 可用,CPython 团队多年来一直用release编译 Windows 安装程序(MSI 软件包)。这些安装程序主要用于添加按用户安装的 Python,并且核心解释器和库由单个用户使用。该安装程序还可以为一台计算机上的所有用户安装,并且单独的 ZIP 文件可用于本地应用程序发行版。
如 PEP 11中所指定,Python 版本仅支持 Windows 平台,而 Microsoft 认为该平台受到扩展支持。这意味着 Python 3.8 支持 Windows Vista 和更高版本。如果需要 Windows XP 支持,请安装 Python 3.4.
Windows 有许多不同的安装程序,每种都有某些优点和缺点。
完整的安装程序包含所有组件,对于将 Python 用于任何类型的项目的开发人员来说,都是最佳选择。
Microsoft Store 软件包是 Python 的简单安装,适用于运行脚本和程序包以及使用 IDLE 或其他开发环境。它需要 Windows 10,但可以安全安装而不会损坏其他程序。它还提供了许多方便的命令来启动 Python 及其工具。
nuget.org 软件包是用于连续集成系统的轻型安装。它可用于构建 Python 软件包或运行脚本,但不可更新且没有用户界面工具。
可嵌入的程序包是适合嵌入到较大应用程序中的 Python 最小软件包。
3.1. 完整的安装程序
3.1.1. 安装步骤
可供下载的四个 Python 3.8 安装程序-解释程序的 32 位和 64 位版本各有两个。 Web 安装程序是一个很小的初始下载,它将在需要时自动下载所需的组件。 “离线安装程序”包括默认安装所必需的组件,并且仅需要 Internet 连接即可获得可选Function。有关避免在安装过程中下载的其他方法,请参见无需下载即可安装。
启动安装程序后,可以选择以下两个选项之一:
如果选择“立即安装”:
您将无需成为 Management 员(除非需要对 C 运行时库进行系统更新,或者为所有用户安装适用于 Windows 的 Python 启动器)
Python 将安装到您的用户目录中
适用于 Windows 的 Python 启动器将根据第一页底部的选项安装
将安装标准库,测试套件,启动器和 pip
如果选择,安装目录将被添加到您的
PATH
快捷方式仅对当前用户可见
选择“自定义安装”将允许您选择要安装的Function,安装位置以及其他选项或安装后操作。要安装调试符号或二进制文件,您将需要使用此选项。
要执行所有用户的安装,应选择“自定义安装”。在这种情况下:
您可能需要提供 Management 凭据或批准
Python 将安装到 Program Files 目录中
适用于 Windows 的 Python 启动器将安装到 Windows 目录中
在安装过程中可以选择可选Function
可以将标准库预编译为字节码
如果选择,安装目录将被添加到系统
PATH
快捷方式适用于所有用户
3.1.2. 消除 MAX_PATH 限制
Windows 历史上将路径长度限制为 260 个字符。这意味着更长的路径无法解决,并且会导致错误。
在 Windows 的最新版本中,此限制可以扩展到大约 32,000 个字符。您的 Management 员将需要激活“启用 Win32 长路径”组策略,或将注册表值HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem@LongPathsEnabled
设置为1
。
这允许open()函数,os模块和大多数其他路径Function接受并返回超过 260 个字符的路径。
更改以上选项后,无需进一步配置。
在版本 3.6 中更改:在 Python 中启用了对长路径的支持。
3.1.3. 不使用 UI 进行安装
还可以从命令行指定安装程序 UI 中可用的所有选项,从而使脚本化安装程序无需用户交互即可在许多计算机上复制安装。这些选项也可以在不抑制 UI 的情况下进行设置,以更改某些默认值。
要完全隐藏安装程序用户界面并以静默方式安装 Python,请传递/quiet
选项。要跳过用户交互但仍显示进度和错误,请传递/passive
选项。可以传递/uninstall
选项以立即开始删除 Python-不会显示任何提示。
所有其他选项均以name=value
的形式传递,其中值通常是0
以禁用Function,1
则启用Function或路径。可用选项的完整列表如下所示。
Name | Description | Default |
---|---|---|
InstallAllUsers | 执行系统范围的安装。 | 0 |
TargetDir | 安装目录 | 根据 InstallAllUsers 选择 |
DefaultAllUsersTargetDir | 所有用户安装的默认安装目录 | %ProgramFiles%\Python X.Y 或%ProgramFiles(x86)%\Python X.Y |
DefaultJustForMeTargetDir | 专门为我安装的默认安装目录 | %LocalAppData%\Programs\PythonXY 或%LocalAppData%\Programs\PythonXY-32 或%LocalAppData%\Programs\PythonXY-64 |
DefaultCustomTargetDir | UI 中显示的默认自定义安装目录 | (empty) |
AssociateFiles | 如果还安装了启动器,则创建文件关联。 | 1 |
CompileAll | 将所有.py 个文件编译为.pyc 。 |
0 |
PrependPath | 将安装目录和脚本目录添加到 PATH ,将.PY 添加到 PATHEXT |
0 |
Shortcuts | 创建解释器,文档和 IDLE(如果已安装)的快捷方式。 | 1 |
Include_doc | 安装 Python 手册 | 1 |
Include_debug | 安装调试二进制文件 | 0 |
Include_dev | 安装开发人员 Headers 和库 | 1 |
Include_exe | 安装python.exe 和相关文件 |
1 |
Include_launcher | Install 适用于 Windows 的 Python 启动器. | 1 |
InstallLauncherAllUsers | 为所有用户安装适用于 Windows 的 Python 启动器。 | 1 |
Include_lib | 安装标准库和扩展模块 | 1 |
Include_pip | 安装 Binding 的 pip 和 setuptools | 1 |
Include_symbols | 安装调试符号(* .pdb) | 0 |
Include_tcltk | 安装 Tcl/Tk 支持和 IDLE | 1 |
Include_test | 安装标准库测试套件 | 1 |
Include_tools | 安装 Util 脚本 | 1 |
LauncherOnly | 仅安装启动器。这将覆盖大多数其他选项。 | 0 |
SimpleInstall | 禁用大多数安装用户界面 | 0 |
SimpleInstallDescription | 使用简化的安装 UI 时显示的自定义消息。 | (empty) |
例如,要静默安装系统范围的默认 Python 安装,可以使用以下命令(在提升的命令提示符下):
python-3.8.0.exe /quiet InstallAllUsers=1 PrependPath=1 Include_test=0
为使用户无需测试套件即可轻松安装 Python 的个人副本,可以使用以下命令提供快捷方式。这将显示简化的初始页面,并禁止自定义:
python-3.8.0.exe InstallAllUsers=0 Include_launcher=0 Include_test=0
SimpleInstall=1 SimpleInstallDescription="Just for me, no test suite."
(请注意,Ellipsis启动器也会忽略文件关联,仅当每个系统的安装都包含启动器时,才建议对每个用户进行安装.)
上面列出的选项也可以在可执行文件旁边的名为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>
3.1.4. 无需下载即可安装
由于 Python 的某些Function未包含在初始安装程序下载中,因此选择这些Function可能需要互联网连接。为了避免这种需求,可以按需下载所有可能的组件以创建一个完整的* layout *,无论选择什么Function,该布局都将不再需要 Internet 连接。请注意,此下载可能会超过所需的下载量,但是在要执行大量安装的情况下,拥有本地缓存的副本非常有用。
从命令提示符处执行以下命令以下载所有可能的必需文件。切记用python-3.8.0.exe
代替安装程序的实际名称,并在其自己的目录中创建布局,以避免具有相同名称的文件之间发生冲突。
python-3.8.0.exe /layout [optional target directory]
您也可以指定/quiet
选项以隐藏进度显示。
3.1.5. 修改安装
安装 Python 之后,您可以pass Windows 的“程序和Function”工具添加或删除Function。选择 Python 条目,然后选择“卸载/更改”以维护模式打开安装程序。
“修改”允许您pass修改复选框来添加或删除Function-不变的复选框不会安装或删除任何内容。在此模式下,某些选项无法更改,例如安装目录。要修改这些内容,您需要先删除然后重新安装 Python。
“修复”将验证使用当前设置应安装的所有文件,并替换所有已删除或修改的文件。
除了适用于 Windows 的 Python 启动器,“卸载”将完全删除 Python,而适用于 Windows 的 Python 启动器在“程序和Function”中有其自己的条目。
3.2. Microsoft Store 软件包
3.7.2 版中的新Function。
Microsoft Store 软件包是易于安装的 Python 解释器,主要用于交互式使用,例如,学生。
要安装该软件包,请确保您具有最新的 Windows 10 更新并在 Microsoft Store 应用中搜索“ Python 3.8”。确保您选择的应用程序是由 Python Software Foundation 发布并安装的。
Warning
Python 将始终在 Microsoft Store 上免费提供。如果要求您付款,则说明您没有选择正确的包裹。
安装后,可以pass在“开始”中找到 Python 来启动它。或者,可以pass键入python
在任何命令提示符或 PowerShell 会话中使用它。此外,可以pass键入pip
或idle
来使用 pip 和 IDLE。也可以在开始中找到 IDLE。
这三个命令也都带有版本号后缀,例如python3.exe
和python3.x.exe
以及python.exe
(其中3.x
是要启动的特定版本,例如 3.8)。pass开始打开“Management 应用程序执行别名”,以选择与每个命令关联的 Python 版本。建议确保pip
和idle
与所选的python
版本一致。
可以使用python -m venv
创建虚拟环境,然后将其激活并正常使用。
如果您安装了另一版本的 Python,并将其添加到PATH
变量中,则它将以python.exe
的形式提供,而不是 Microsoft Store 中的版本。要访问新安装,请使用python3.exe
或python3.x.exe
。
py.exe
启动器将检测到此 Python 安装,但更喜欢传统安装程序中的安装。
要删除 Python,请打开“设置”并使用“应用和Function”,或者在“开始”中找到 Python,然后右键单击以选择“卸载”。卸载将删除您直接安装到此 Python 安装中的所有软件包,但不会删除任何虚拟环境
3.2.1. 已知的问题
由于 Microsoft Store 应用程序的限制,Python 脚本可能没有对共享位置(例如TEMP
和注册表)的完全写访问权限。相反,它将写入私有副本。如果您的脚本必须修改共享位置,则需要安装完整的安装程序。
3.3. nuget.org 软件包
版本 3.5.2 中的新Function。
nuget.org 软件包是缩小的 Python 环境,旨在用于持续集成和构建没有在系统范围内安装 Python 的系统。虽然 nuget 是“ .NET 的软件包 Management 器”,但它对于包含构建时工具的软件包也可以很好地工作。
访问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
选项,该名称将包括安装的特定版本。子目录中是一个tools
目录,其中包含 Python 安装:
# 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 安装。包括设置在内,将自动使用 Headers 并在构建中 importlib。
nuget.org 上的软件包信息页面是www.nuget.org/packages/python(用于 64 位版本)和www.nuget.org/packages/pythonx86(用于 32 位版本)。
3.4. 可嵌入的程序包
3.5 版中的新Function。
嵌入式发行版是一个包含最小 Python 环境的 ZIP 文件。它旨在用作另一个应用程序的一部分,而不是由finally用户直接访问。
提取后,嵌入式发行版(几乎)与用户系统完全隔离,包括环境变量,系统注册表设置和已安装的软件包。该标准库以预编译和优化的.pyc
文件的形式包含在 ZIP 中,并且都提供了python3.dll
,python37.dll
,python.exe
和pythonw.exe
。不包括 Tcl/tk(包括所有依赖项,例如 Idle),pip 和 Python 文档。
Note
嵌入式发行版不包含Microsoft C 运行时,应用程序安装程序负责提供此代码。运行时可能已预先安装在用户系统上,也可能已pass Windows Update 自动安装,并且可以pass在系统目录中找到ucrtbase.dll
进行检测。
应用程序安装程序应与嵌入式发行版一起安装第三方软件包。此发行版不支持使用 pip 来 Management 与常规 Python 安装相同的依赖关系,尽管有些注意可能会包含 pip 并将其用于自动更新。通常,第三方软件包应被视为应用程序的一部分(“供应商”),以便开发人员可以在向用户提供更新之前确保与较新版本的兼容性。
下面介绍了此发行版的两个推荐用例。
3.4.1. Python 应用程序
用 Python 编写的应用程序不一定要求用户意识到这一事实。在这种情况下,可以使用嵌入式发行版在安装包中包含 Python 的私有版本。有两种选择,具体取决于其透明度(反之亦然,它应该显得专业)。
使用特殊的可执行文件作为启动器需要一些编码,但是为用户提供了最透明的体验。使用自定义的启动器,没有明显的迹象表明程序正在 Python 上运行:可以自定义图标,可以指定公司和版本信息,并且文件关联行为正确。在大多数情况下,自定义启动器应该只能够使用硬编码的命令行调用Py_Main
。
比较简单的方法是提供一个批处理文件或生成的快捷方式,该批处理文件或生成的快捷方式可以使用所需的命令行参数直接调用python.exe
或pythonw.exe
。在这种情况下,该应用程序看起来将是 Python,而不是其实际名称,并且用户可能难以将其与其他正在运行的 Python 进程或文件关联区分开。
使用后一种方法时,应将软件包作为目录安装在 Python 可执行文件的旁边,以确保它们在路径中可用。使用专用的启动器,程序包可以位于其他位置,因为有机会在启动应用程序之前指定搜索路径。
3.4.2. 嵌入 Python
用本机代码编写的应用程序通常需要某种形式的脚本语言,并且嵌入式 Python 发行版可用于此目的。通常,大多数应用程序都使用本机代码,并且某些部分将调用python.exe
或直接使用python3.dll
。无论哪种情况,将嵌入式发行版解压缩到应用程序安装的子目录就足以提供可加载的 Python 解释器。
与应用程序的使用一样,程序包可以安装到任何位置,因为可以在初始化解释器之前指定搜索路径。否则,使用嵌入式发行版与常规安装之间没有根本区别。
3.5. 替代 Binding
除了标准的 CPython 发行版之外,还有一些经过修改的软件包,其中包括其他Function。以下是受欢迎版本及其主要Function的列表:
-
- 具有多平台兼容性的安装程序,文档,PyWin32
-
- 流行的科学模块(例如 numpy,scipy 和 pandas)和
conda
程序包 Management 器。
- 流行的科学模块(例如 numpy,scipy 和 pandas)和
-
- 具有编辑器和其他开发工具的“综合 Python 分析环境”。
-
- Windows 特定的发行版,带有预先构建的科学软件包和用于构建软件包的工具。
请注意,这些软件包可能不包括最新版本的 Python 或其他库,并且不由核心 Python 团队维护或支持。
3.6. 配置 Python
为了在命令提示符下方便地运行 Python,您可以考虑在 Windows 中更改一些默认环境变量。尽管安装程序提供了一个选项来为您配置 PATH 和 PATHEXT 变量,但这仅对于单个系统范围的安装是可靠的。如果您经常使用多个版本的 Python,请考虑使用适用于 Windows 的 Python 启动器。
3.6.1. 总结:设置环境变量
Windows 允许在用户级别和系统级别永久配置环境变量,或在命令提示符下临时配置环境变量。
要临时设置环境变量,请打开命令提示符并使用 set 命令:
C:\>set PATH=C:\Program Files\Python 3.8;%PATH%
C:\>set PYTHONPATH=%PYTHONPATH%;C:\My_python_lib
C:\>python
这些更改将应用于在该控制台中执行的所有其他命令,并且将从控制台启动的所有应用程序继承。
在百分号中包含变量名称将扩展为现有值,从而允许您在开始或结尾处添加新值。pass将包含 python.exe 的目录添加到开头来修改 PATH
是确保启动正确版本的 Python 的常用方法。
要永久修改默认环境变量,请单击“开始”并搜索“编辑环境变量”,或打开“系统属性”,“高级系统设置”,然后单击“环境变量”按钮。在此对话框中,您可以添加或修改用户和系统变量。要更改系统变量,您需要不受限制地访问您的计算机(即 Management 员权限)。
Note
Windows 将在系统变量之后串联用户变量,在修改 PATH
时可能会导致意外结果。
PYTHONPATH变量可用于所有版本的 Python 2 和 Python 3,因此,除非该变量仅包含与所有已安装的 Python 版本兼容的代码,否则不应永久配置该变量。
See also
Windows NT 中的环境变量
SET 命令,用于临时修改环境变量
SETX 命令,用于永久修改环境变量
https://support.microsoft.com/en-us/help/310519/how-to-manage-environment-variables-in-windows-xp
如何在 Windows XP 中 Management 环境变量
设置环境变量,Louis J. Farrugia
3.6.2. 查找 Python 可执行文件
在版本 3.5 中更改。
除了使用自动为 Python 解释器创建的开始菜单项之外,您可能还想在命令提示符下启动 Python。安装程序可以为您进行设置。
在安装程序的第一页上,可以选择一个标记为“将 Python 添加到 PATH”的选项,以使安装程序将安装位置添加到 PATH
中。 Scripts\
文件夹的位置也已添加。这使您可以 Importingpython 来运行解释器,并 Importingpip 来安装软件包。因此,您还可以使用命令行选项执行脚本,请参阅Command line文档。
如果在安装时未启用此选项,则始终可以重新运行安装程序,选择“修改”并启用它。或者,您可以按照总结:设置环境变量中的说明手动修改 PATH
。您需要设置 PATH
环境变量以包含 Python 安装目录,并用分号与其他条目分隔。一个示例变量可能看起来像这样(假设前两个条目已经存在):
C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files\Python 3.8
3.7. UTF-8 模式
3.7 版中的新Function。
Windows 仍将旧式编码用于系统编码(“ ANSI 代码页”)。 Python 将其用于文本文件的默认编码(例如locale.getpreferredencoding())。
这可能会引起问题,因为 UTF-8 已在 Internet 和大多数 Unix 系统(包括 WSL(Linux 的 Windows 子系统))上广泛使用。
您可以使用 UTF-8 模式将默认文本编码更改为 UTF-8.您可以pass-X utf8
命令行选项或PYTHONUTF8=1
环境变量来启用 UTF-8 模式。有关启用 UTF-8 模式的信息,请参见 PYTHONUTF8,有关如何修改环境变量的信息请参见总结:设置环境变量。
启用 UTF-8 模式时:
locale.getpreferredencoding()返回
'UTF-8'
而不是系统编码。此Function在许多地方用于默认文本编码,包括open(),Popen
,Path.read_text()
等。sys.stdin,sys.stdout和sys.stderr都使用 UTF-8 作为其文本编码。
您仍然可以pass“ mbcs”编解码器使用系统编码。
请注意,将PYTHONUTF8=1
添加到默认环境变量将影响系统上的所有 Python 3.7 应用程序。如果您有任何依赖于旧系统编码的 Python 3.7 应用程序,建议您暂时设置环境变量或使用-X utf8
命令行选项。
Note
3.8. 适用于 Windows 的 Python 启动器
版本 3.3 中的新Function。
Windows 的 Python 启动器是一个 Util,可帮助查找和执行不同的 Python 版本。它允许脚本(或命令行)指示特定 Python 版本的首选项,并将查找并执行该版本。
与 PATH
变量不同,启动器将正确选择最合适的 Python 版本。与系统级安装相比,它更倾向于按用户安装,并且按语言版本 Order,而不是使用最新安装的版本。
启动器最初是在 PEP 397中指定的。
3.8.1. 入门
3.8.1.1. 从命令行
在版本 3.6 中更改。
Python 3.3 及更高版本在系统范围内的安装会将启动器安装在 PATH
上。启动器与所有可用的 Python 版本兼容,因此安装哪个版本都没有关系。要检查启动器是否可用,请在命令提示符中执行以下命令:
py
您应该发现已安装的最新版本的 Python 已启动-可以正常退出,指定的任何其他命令行参数都将直接发送到 Python。
如果您安装了多个版本的 Python(例如 2.7 和 3.8),您会注意到 Python 3.8 已启动-要启动 Python 2.7,请try以下命令:
py -2.7
如果要安装最新版本的 Python 2.x,请try以下命令:
py -2
您应该找到启动的最新版本的 Python2.x。
如果看到以下错误,则说明您未安装启动器:
'py' is not recognized as an internal or external command,
operable program or batch file.
除非在安装时选择了该选项,否则按用户安装 Python 不会将启动器添加到 PATH
中。
3.8.1.2. 虚拟环境
3.5 版中的新Function。
如果启动器没有明确的 Python 版本规范运行,并且虚拟环境(使用标准库venv模块或外部virtualenv
工具创建)处于活动状态,则启动器将运行虚拟环境的解释器,而不是全局的解释器。要运行全局解释器,请停用虚拟环境,或显式指定全局 Python 版本。
3.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 安装的版本号。现在try将第一行更改为:
#! python3
现在,重新执行命令应该可以打印最新的 Python 3.x 信息。与上面的命令行示例一样,您可以指定更明确的版本限定符。假设您已安装 Python 2.6,请try将第一行更改为#! python2.6
,您应该找到打印的 2.6 版本信息。
请注意,与交互式使用不同,裸露的“ python”将使用已安装的最新版本的 Python2.x。这是为了向后兼容和与 Unix 兼容,其中python
通常指的是 Python 2.
3.8.1.4. 来自文件关联
安装启动器后,启动器应已与 Python 文件(即.py
,.pyw
,.pyc
文件)相关联。这意味着,当您双击 Windows 资源 Management 器中的这些文件之一时,将使用启动器,因此,您可以使用上述相同的Function来让脚本指定应使用的版本。
这样做的主要好处是,根据第一行的内容,单个启动器可以同时支持多个 Python 版本。
3.8.2. 舍邦线
如果脚本文件的第一行以#!
开头,则称为“ shebang”行。 Linux 和其他类似 Unix 的 os 对此行具有本地支持,它们通常在此类系统上用于指示应如何执行脚本。此启动程序允许 Windows 上的 Python 脚本使用相同的Function,并且上面的示例演示了它们的用法。
为了允许 Python 脚本中的 shebang 行在 Unix 和 Windows 之间可移植,此启动器支持许多“虚拟”命令来指定要使用的解释器。支持的虚拟命令是:
/usr/bin/env python
/usr/bin/python
/usr/local/bin/python
python
例如,如果脚本的第一行以
#! /usr/bin/python
将找到并使用默认的 Python。由于许多在 Unix 上运行的 Python 脚本已经有了这一行,因此您应该发现启动器可以直接使用这些脚本而无需进行修改。如果要在 Windows 上编写新脚本,希望在 Unix 上有用,则应使用以/usr
开头的 shebang 行之一。
上面的任何虚拟命令都可以带有显式版本(仅是主版本,或者是主版本和次版本)后缀。此外,可以pass在次要版本之后添加“ -32”来请求 32 位版本。即/usr/bin/python2.7-32
将请求使用 32 位 python 2.7.
3.7 版的新Function:从 python 启动器 3.7 开始,可以pass后缀“ -64”请求 64 位版本。此外,可以指定主辅和不辅辅的架构(即/usr/bin/python3-64
)。
shebang 行的/usr/bin/env
形式还有另一个特殊属性。在查找已安装的 Python 解释器之前,此表单将在可执行文件 PATH
中搜索 Python 可执行文件。这对应于 Unix env
程序的行为,该程序执行 PATH
搜索。
3.8.3. 社帮行中的论点
shebang 行还可以指定要传递给 Python 解释器的其他选项。例如,如果您有一个 shebang 行:
#! /usr/bin/python -v
然后,将使用-v
选项启动 Python
3.8.4. Customization
3.8.4.1. pass INI 文件自定义
启动器将在当前用户的“应用程序数据”目录(即pass使用CSIDL_LOCAL_APPDATA
调用 Windows 函数SHGetFolderPath
返回的目录)中搜索两个.ini 文件,并在与启动器相同的目录中搜索py.ini
。相同的.ini 文件用于启动器的“控制台”版本(即 py.exe)和“ windows”版本(即 pyw.exe)。
在“应用程序目录”中指定的自定义将优先于可执行文件旁边的自定义文件,因此可能没有启动器旁边的.ini 文件的写访问权的用户可以覆盖该全局.ini 文件中的命令。
3.8.4.2. 自定义默认 Python 版本
在某些情况下,命令中可以包含版本限定符,以指示该命令将使用哪个版本的 Python。版本限定符以主版本号开头,可以选择在其后跟一个句点(.)和次要版本说明符。此外,可以pass添加“ -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 位 Python 安装(如果可用)。这样一来,仅知道 PC 上安装了哪些版本,而无需考虑安装 Sequences(例如,不知道 Python 的 32 位或 64 位版本以及相应的启动器是否被安装),就可以预测启动器的行为。最后安装)。如上所述,可以在版本说明符上使用可选的“ -32”或“ -64”后缀来更改此行为。
Examples:
如果未设置任何相关选项,则命令
python
和python2
将使用最新安装的 Python 2.x 版本,命令python3
将使用最新安装的 Python 3.x 版本。由于完全指定了版本,因此命令
python3.1
和python2.7
将完全不参考任何选项。如果为
PY_PYTHON=3
,则命令python
和python3
都将使用最新安装的 Python 3 版本。如果为
PY_PYTHON=3.1-32
,则命令python
将使用 3.1 的 32 位实现,而命令python3
将使用最新安装的 Python(由于指定了主要版本,因此完全不考虑 PY_PYTHON.)如果
PY_PYTHON=3
和PY_PYTHON3=3.1
,则命令python
和python3
都将专门使用 3.1
除了环境变量外,可以在启动器使用的.INI 文件中配置相同的设置。 INI 文件中的部分称为[defaults]
,键名将与不带前导PY_
前缀的环境变量相同(请注意,INI 文件中的键名不区分大小写.)环境变量的内容将被覆盖 INI 文件中指定的内容。
For example:
- 设置
PY_PYTHON=3.1
等效于包含以下内容的 INI 文件:
[defaults]
python=3.1
- 设置
PY_PYTHON=3
和PY_PYTHON3=3.1
等效于包含以下内容的 INI 文件:
[defaults]
python=3
python3=3.1
3.8.5. Diagnostics
如果将环境变量PYLAUNCH_DEBUG
设置为(任何值),启动器将把诊断信息打印到 stderr(即到控制台)。虽然此信息设法同时变得冗长和简短,但它应该使您能够看到所定位的 Python 版本,为什么选择了特定版本以及用于执行目标 Python 的确切命令行。
3.9. 查找模块
Python 通常将其库(以及您的 site-packages 文件夹)存储在安装目录中。因此,如果您已将 Python 安装到C:\Python\
,则默认库将位于C:\Python\Lib\
,第三方模块应存储在C:\Python\Lib\site-packages\
。
要完全覆盖sys.path,请创建一个与 DLL(python37._pth
)或可执行文件(python._pth
)同名的._pth
文件,并为要添加到sys.path的每个路径指定一行。基于 DLL 名称的文件将覆盖基于可执行文件的文件,这将允许在需要时限制加载任何程序的路径。
当文件存在时,所有注册表和环境变量都将被忽略,启用隔离模式,并且除非文件中的一行指定import site
,否则不会导入site。以#
开头的空白路径和行将被忽略。每个路径可以是绝对路径,也可以是相对于文件位置的路径。不允许导入除site
以外的其他语句,并且不能指定任意代码。
请注意,当指定了import site
时,site模块将正常处理.pth
个文件(不带下划线)。
当找不到._pth
文件时,这是在 Windows 上填充sys.path的方式:
在开始处添加一个空条目,该条目对应于当前目录。
如果存在环境变量 PYTHONPATH,如Environment variables中所述,则接下来添加其条目。请注意,在 Windows 上,此变量中的路径必须用分号分隔,以将其与驱动器标识符(
C:\
等)中使用的冒号区分开。可以在注册表中将其他“应用程序路径”添加为
HKEY_CURRENT_USER
和HKEY_LOCAL_MACHINE
配置单元下的\SOFTWARE\Python\PythonCore{version}\PythonPath
子项。带有以分号分隔的路径字符串作为默认值的子项将导致将每个路径添加到sys.path。 (请注意,所有已知的安装程序仅使用 HKLM,因此 HKCU 通常为空.)如果设置了环境变量 PYTHONHOME,则将其假定为“ Python Home”。否则,将使用主 Python 可执行文件的路径来定位“地标文件”(
Lib\os.py
或pythonXY.zip
)以推断出“ Python 主页”。如果找到 Python 主页,则添加到sys.path的相关子目录(Lib
,plat-win
等)基于该文件夹。否则,将根据存储在注册表中的 PythonPath 构造核心 Python 路径。如果无法找到 Python 主目录,在环境中未指定 PYTHONPATH,并且找不到注册表项,则使用带有相对项的默认路径(例如
.\Lib;.\plat-win
等)。
如果在主要可执行文件旁边或可执行文件上方一级目录中找到pyvenv.cfg
文件,则适用以下变体:
- 如果
home
是绝对路径,而未设置 PYTHONHOME,则在推断起始位置时,将使用此路径代替主可执行文件的路径。
所有这些的finally结果是:
当在主 Python 目录(安装的版本,或直接从 PCbuild 目录)中运行
python.exe
或任何其他.exe 时,将推导出核心路径,并忽略注册表中的核心路径。注册表中的其他“应用程序路径”始终会被读取。当 Python 托管在另一个.exe(不同目录,pass COM 嵌入等)中时,将不会推断出“ Python Home”,因此将使用注册表的核心路径。注册表中的其他“应用程序路径”始终会被读取。
如果 Python 无法找到其主目录,并且没有注册表值(冻结的.exe,有些非常奇怪的安装设置),则您将获得一个带有默认但相对路径的路径。
对于那些想要将 PythonBinding 到其应用程序或发行版中的人,以下建议将防止与其他安装发生冲突:
在可执行文件旁边包含
._pth
文件,其中包含要包含的目录。这将忽略注册表和环境变量中列出的路径,也将忽略site,除非列出了import site
。如果要在自己的可执行文件中加载
python3.dll
或python37.dll
,请在Py_Initialize()之前显式调用Py_SetPath()或(至少)Py_SetProgramName()。从应用程序启动
python.exe
之前,清除和/或覆盖 PYTHONPATH并设置 PYTHONHOME。如果您不能使用以前的建议(例如,您是允许人们直接运行
python.exe
的发行版),请确保地标文件(Lib\os.py
)存在于您的安装目录中。 (请注意,将不会在 ZIP 文件中检测到该文件,而是会检测到一个正确命名的 ZIP 文件.)
这些将确保系统范围的安装中的文件不会优先于与您的应用程序 Binding 在一起的标准库的副本。否则,您的用户可能会在使用您的应用程序时遇到问题。请注意,第一个建议是最好的,因为其他建议可能仍然容易受到注册表和用户站点包中非标准路径的影响。
Note
在 3.6 版中进行了更改:
添加
._pth
文件支持并从pyvenv.cfg
中删除applocal
选项。与可执行文件直接相邻时,将
pythonXX.zip
添加为潜在的地标。
Note
自版本 3.6 起不推荐使用:
注册表中Modules
(不是PythonPath
)下指定的模块可以由importlib.machinery.WindowsRegistryFinder导入。此查找程序已在 Windows 3.6.0 及更低版本中启用,但将来可能需要显式添加到sys.meta_path。
3.10. 附加模块
即使 Python 的目标是在所有平台之间都可移植,但 Windows 还是有一些独特的Function。标准库和外部库中都有几个模块,以及使用这些Function的代码段。
Windows 特定的标准模块记录在MS Windows 特定服务中。
3.10.1. PyWin32
Mark Hammond 的PyWin32模块是用于高级 Windows 特定支持的模块集合。这包括用于以下目的的 Util:
组件对象模型 (COM)
Win32 API 调用
Registry
Event log
Microsoft 基础班(MFC)用户界面
PythonWin是 PyWin32 附带的示例 MFC 应用程序。它是带有嵌入式调试器的可嵌入 IDE。
See also
蒂姆·金(Tim Golden)
大卫和保罗·博迪
3.10.2. cx_Freeze
cx_Freeze是distutilsextensions(请参见Extending Distutils),它将 Python 脚本包装到可执行的 Windows 程序(*.exe
文件)中。完成此操作后,您可以分发应用程序而无需用户安装 Python。
3.10.3. WConio
由于 Python 的高级终端处理层curses仅限于类 Unix 系统,因此还有 Windows 独有的库:适用于 Python 的 Windows 控制台 I/O。
WConio是 Turbo-C CONIO.H
的包装,用于创建文本用户界面。
3.11. 在 Windows 上编译 Python
如果要自己编译 CPython,首先要做的就是获取source。您可以下载最新版本的源代码,也可以只下载一个新的checkout。
源代码树包含 Microsoft Visual Studio 2015 的构建解决方案和项目文件,Microsoft Visual Studio 2015 是用于构建正式 Python 版本的编译器。这些文件位于PCbuild
目录中。
检查PCbuild/readme.txt
以获取有关构建过程的一般信息。
有关扩展模块,请咨询在 Windows 上构建 C 和 C 扩展。
See also
或 SébastienSauvage 撰写的“使用 SWIG 在 C/C 中创建 Python 扩展并在 Windows 下使用 MinGW gcc 对其进行编译”或“使用 distutils 且不使用 Microsoft Visual C 来安装 Python 扩展”
3.12. 其他平台
随着 Python 的不断开发,不再支持某些以前受支持的平台(由于缺少用户或开发人员)。在 PEP 11上查看有关所有不受支持的平台的详细信息。
仍然支持Windows CE。
Cygwin安装程序还提供了安装 Python 解释程序的Function(请参阅Cygwin 包源码,Maintainer releases)
有关具有预编译安装程序的平台的详细信息,请参见Windows 版 Python。