3. 在Windows上使用python

本文档旨在概述在Microsoft Windows上使用Python时应了解的特定于Windows的行为。

与大多数UNIX系统和服务不同,Windows不包括系统支持的Python安装。为了使python可用,cpython团队已经编译了Windows安装程序(msi包),其中 release 多年来。这些安装程序主要用于添加每用户安装的python,核心解释器和库由单个用户使用。安装程序还可以为一台机器的所有用户安装,并且可以为应用程序本地分发提供单独的zip文件。

中指定的 PEP 11 ,Python版本仅支持Windows平台,而Microsoft认为该平台受扩展支持。这意味着Python 3.10 支持Windows 8.1及更高版本。如果您需要Windows 7支持,请安装Python 3.8。

Windows有许多不同的安装程序,每个安装程序都有一定的优点和缺点。

完整安装程序 包含所有组件,对于使用Python进行任何类型项目的开发人员来说都是最佳选择。

Microsoft Store软件包 是一个简单的python安装,它适用于运行脚本和包,以及使用空闲或其他开发环境。它需要Windows10,但可以安全安装而不会损坏其他程序。它还为启动python及其工具提供了许多方便的命令。

nuget.org包 是用于持续集成系统的轻量级安装。它可以用于构建Python包或运行脚本,但不可更新,也没有用户界面工具。

可嵌入包 是一个最小的python包,适合嵌入到更大的应用程序中。

3.1. 完整安装程序

3.1.1. 安装步骤

四 Python 3.10 安装程序可供下载-32位和64位版本的解释器各有两个安装程序。这个 网站安装程序 是一个小的初始下载,它将根据需要自动下载所需的组件。这个 脱机安装程序 包括默认安装所需的组件,并且仅要求可选功能的Internet连接。参见 安装而不下载 以避免在安装过程中下载。

启动安装程序后,可以选择以下两个选项之一:

../_images/win_installer.png

如果选择“立即安装”:

  • 你会 not 需要是管理员(除非需要对C运行时库进行系统更新或安装 用于Windows的python启动程序 对于所有用户)

  • python将被安装到用户目录中

  • 这个 用于Windows的python启动程序 将根据第一页底部的选项安装

  • 将安装标准库、测试套件、启动程序和PIP

  • 如果选中,安装目录将添加到 PATH

  • 快捷方式仅对当前用户可见

选择“自定义安装”将允许您选择要安装的功能、安装位置和其他选项或安装后操作。要安装调试符号或二进制文件,需要使用此选项。

要执行“所有用户”安装,应选择“自定义安装”。在这种情况下:

  • 您可能需要提供管理证书或批准

  • python将被安装到程序文件目录中

  • 这个 用于Windows的python启动程序 将安装到Windows目录中

  • 安装过程中可以选择可选功能

  • 标准库可以预编译为字节码

  • 如果选中,安装目录将添加到系统 PATH

  • 所有用户都可以使用快捷方式

3.1.2. 删除最大路径限制

Windows历史上的路径长度限制为260个字符。这意味着比这更长的路径将无法解决,并且会导致错误。

在最新版本的Windows中,此限制可以扩展到大约32,000个字符。您的管理员需要激活“启用Win32长路径”组策略,或设置 LongPathsEnabled1 在注册表项中 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem

这允许 open() 函数 os 模块和大多数其他路径功能接受和返回长度超过260个字符的路径。

更改上述选项后,无需进一步配置。

在 3.6 版更改: 在python中启用了对长路径的支持。

3.1.3. 在没有用户界面的情况下安装

安装程序UI中可用的所有选项也可以从命令行中指定,允许脚本安装程序在许多计算机上复制安装,而无需用户交互。这些选项也可以在不抑制UI的情况下设置,以更改某些默认值。

要完全隐藏安装程序UI并静默安装python,请传递 /quiet 选择权。要跳过用户交互但仍显示进度和错误,请通过 /passive 选择权。这个 /uninstall 可以传递选项立即开始删除python-不会显示提示。

所有其他选项都作为 name=value ,其中值通常为 0 要禁用某个功能, 1 启用功能或路径。可用选项的完整列表如下所示。

名字

描述

违约

InstallAllUsers

执行系统范围的安装。

0

TargetDir

安装目录

基于InstallAllUsers选择

DefaultAllUsersTargetDir

所有用户安装的默认安装目录

%ProgramFiles%\Python X.Y or %ProgramFiles(x86)%\Python X.Y

DefaultJustForMeTargetDir

只为我安装的默认安装目录

%LocalAppData%\Programs\PythonXY or %LocalAppData%\Programs\PythonXY-32 or %LocalAppData%\Programs\PythonXY-64

DefaultCustomTargetDir

用户界面中显示的默认自定义安装目录

(empty)

AssociateFiles

如果还安装了启动程序,则创建文件关联。

1

CompileAll

全部编译 .py 文件到 .pyc .

0

PrependPath

将安装目录和脚本目录添加到 PATH.PYPATHEXT

0

快捷方式

创建解释器、文档和空闲(如果已安装)的快捷方式。

1

Include_doc

安装python手册

1

Include_debug

安装调试二进制文件

0

Include_dev

安装开发人员标题和库

1

Include_exe

安装 python.exe 以及相关文件

1

Include_launcher

安装 用于Windows的python启动程序 .

1

InstallLauncherAllUsers

安装 用于Windows的python启动程序 适用于所有用户。

1

Include_lib

安装标准库和扩展模块

1

Include_pip

安装捆绑的PIP和设置工具

1

Include_symbols

安装调试符号(*.pdb)

0

Include_tcltk

安装TCL/TK支架并空转

1

Include_test

安装标准库测试套件

1

Include_tools

安装实用程序脚本

1

LauncherOnly

只安装启动程序。这将覆盖大多数其他选项。

0

SimpleInstall

禁用大多数安装用户界面

0

SimpleInstallDescription

使用简化安装用户界面时显示的自定义消息。

(empty)

例如,要以静默方式安装默认的系统范围的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>

3.1.4. 安装而不下载

由于最初的安装程序下载中没有包含Python的某些功能,因此选择这些功能可能需要Internet连接。为了避免这种需要,可以按需下载所有可能的组件,以创建一个完整的 布局 无论所选功能如何,都不再需要Internet连接。请注意,此下载可能比所需的要大,但如果要执行大量安装,则使用本地缓存副本非常有用。

从命令提示符执行以下命令以下载所有可能需要的文件。记住要替换 python-3.9.0.exe 对于安装程序的实际名称,并在其自己的目录中创建布局,以避免同名文件之间的冲突。

python-3.9.0.exe /layout [optional target directory]

您还可以指定 /quiet 用于隐藏进度显示的选项。

3.1.5. 修改安装

一旦安装了python,就可以通过作为Windows一部分的程序和功能工具添加或删除功能。选择python条目并选择“uninstall/change”以维护模式打开安装程序。

“修改”允许您通过修改复选框来添加或删除功能-未更改的复选框不会安装或删除任何内容。在此模式下无法更改某些选项,例如安装目录;若要修改这些选项,需要先删除然后完全重新安装python。

“修复”将使用当前设置验证所有应安装的文件,并替换任何已删除或修改的文件。

“uninstall”将完全删除python,除了 用于Windows的python启动程序 在程序和功能中有自己的条目。

3.2. Microsoft Store软件包

3.7.2 新版功能.

Microsoft Store软件包是一个易于安装的python解释器,主要用于交互式使用,例如,供学生使用。

要安装软件包,请确保您有最新的Windows 10更新,并在Microsoft Store应用程序中搜索“python” 3.10 “。确保你选择的应用程序是由Python软件基金会发布的,然后安装它。

警告

在微软商店里,python总是免费的。如果要求您支付,您没有选择正确的套餐。

安装之后,可以通过在start中找到它来启动python。或者,可以通过键入命令提示符或PowerShell会话来使用它。 python . 此外,可以通过键入来使用pip和idle pipidle .空闲也可以在Start中找到。

所有这三个命令也可用于版本号后缀,例如,as python3.exepython3.x.exe 以及 python.exe (何处) 3.x 是要启动的特定版本,例如 3.10 ). 通过“开始”打开“管理应用程序执行别名”,选择与每个命令关联的Python版本。建议确保 pipidle 与任何版本的 python 被选中。

可以使用创建虚拟环境 python -m venv 正常使用。

如果安装了另一个版本的python并将其添加到 PATH 变量,它将作为 python.exe 而不是微软商店的。要访问新安装,请使用 python3.exepython3.x.exe .

这个 py.exe launcher会检测到这个Python安装,但会更喜欢传统安装程序的安装。

要删除python,请打开“设置”并使用应用程序和功能,或者在“开始”中找到python,然后右键单击选择“卸载”。卸载将删除直接安装到此python安装中的所有包,但不会删除任何虚拟环境。

3.2.1. 已知问题

由于对Microsoft应用商店应用程序的限制,python脚本可能无法对共享位置(如 TEMP 以及登记处。相反,它将写入一个私有副本。如果脚本必须修改共享位置,则需要安装完整的安装程序。

3.3. nuget.org包

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 选项此名称将包括安装的特定版本。子目录中有一个 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安装。包括这些设置将自动使用构建中的标题和导入库。

nuget.org上的包信息页面是 www.nuget.org/packages/python 对于64位版本和 www.nuget.org/packages/pythonx86 对于32位版本。

3.4. 可嵌入包

3.5 新版功能.

嵌入式分发是一个包含最小Python环境的zip文件。它旨在作为另一个应用程序的一部分,而不是由最终用户直接访问。

提取时,嵌入式分发几乎与用户的系统完全隔离,包括环境变量、系统注册表设置和已安装的包。标准库包括预编译和优化的 .pyc 压缩文件,以及 python3.dllpython37.dllpython.exepythonw.exe 全部提供。不包括tcl/tk(包括所有从属文件,如idle)、pip和python文档。

注解

嵌入的分发不包括 Microsoft C Runtime 应用程序安装人员有责任提供这一信息。运行时以前可能已安装在用户的系统上,或者已通过Windows Update自动安装,可以通过查找 ucrtbase.dll 在系统目录中。

第三方软件包应由应用程序安装程序与嵌入式分发一起安装。此发行版不支持使用pip来管理常规python安装的依赖项,尽管在一定程度上可能会包括并使用pip进行自动更新。一般来说,第三方软件包应被视为应用程序(“供应商”)的一部分,以便开发人员在向用户提供更新之前确保与新版本的兼容性。

下面描述了此发行版的两个推荐使用案例。

3.4.1. python应用程序

用Python编写的应用程序不一定要求用户了解这一事实。在这种情况下,可以使用嵌入式发行版在安装包中包含私有版本的python。根据透明程度(或者相反,专业程度),有两种选择。

使用专门的可执行文件作为启动程序需要一些编码,但为用户提供了最透明的体验。使用定制的启动程序,没有明显的迹象表明程序正在python上运行:图标可以定制,公司和版本信息可以指定,文件关联行为正常。在大多数情况下,自定义启动程序应该能够调用 Py_Main 使用硬编码的命令行。

更简单的方法是提供一个批处理文件或生成的快捷方式,直接调用 python.exepythonw.exe 使用所需的命令行参数。在这种情况下,应用程序似乎是python,而不是它的实际名称,用户可能难以将其与其他运行的python进程或文件关联区分开。

使用后一种方法,包应该作为目录与python可执行文件一起安装,以确保它们在路径上可用。使用专门的启动程序,包可以定位在其他位置,因为有机会在启动应用程序之前指定搜索路径。

3.4.2. 嵌入python

用本机代码编写的应用程序通常需要某种形式的脚本语言,而嵌入式Python发行版可以用于此目的。一般来说,大多数应用程序都是本机代码,并且某些部分将调用 python.exe 或直接使用 python3.dll . 对于这两种情况,将嵌入式分发提取到应用程序安装的子目录足以提供可加载的Python解释器。

与应用程序的使用一样,包可以安装到任何位置,因为在初始化解释器之前有机会指定搜索路径。否则,使用嵌入式分发和常规安装之间没有根本区别。

3.5. 替代捆绑

除了标准的cpython发行版,还有一些修改过的包,包括附加功能。以下是流行版本及其主要功能的列表:

ActivePython

具有多平台兼容性的安装程序,文档,pywin32

Anaconda

流行的科学模块(如numpy、scipy和pandas)和 conda 包管理器。

Canopy

具有编辑器和其他开发工具的“全面的Python分析环境”。

WinPython

特定于Windows的发行版,带有预构建的科学包和用于构建包的工具。

请注意,这些包可能不包括最新版本的python或其他库,并且不由核心python团队维护或支持。

3.6. 配置python

为了从命令提示符方便地运行python,您可以考虑在Windows中更改一些默认的环境变量。虽然安装程序提供了一个为您配置路径和路径文本变量的选项,但这仅对单个系统范围的安装是可靠的。如果您经常使用多个版本的python,请考虑使用 用于Windows的python启动程序 .

3.6.1. 远足:设置环境变量

Windows允许在用户级和系统级永久配置环境变量,或在命令提示符中临时配置环境变量。

要临时设置环境变量,请打开命令提示符并使用 set 命令:

C:\>set PATH=C:\Program Files\Python 3.9;%PATH%
C:\>set PYTHONPATH=%PYTHONPATH%;C:\My_python_lib
C:\>python

这些更改将应用于该控制台中执行的任何其他命令,并且将由从该控制台启动的任何应用程序继承。

将变量名包含在百分号内将扩展到现有值,允许您在开始或结束时添加新值。修改 PATH 通过添加包含 python.exe 首先,是确保正确启动Python版本的常用方法。

要永久修改默认环境变量,请单击开始并搜索“编辑环境变量”,或打开系统属性, Advanced system settings 然后单击 Environment Variables 按钮。在此对话框中,您可以添加或修改用户和系统变量。要更改系统变量,您需要对计算机进行非限制访问(即管理员权限)。

注解

Windows将连接用户变量 之后 系统变量,修改时可能导致意外结果 PATH .

这个 PYTHONPATH 所有版本的python 2和python 3都使用变量,因此您不应该永久配置此变量,除非它只包含与所有已安装的python版本兼容的代码。

参见

https://www.microsoft.com/en-us/wdsi/help/folder-variables

Windows NT中的环境变量

https://technet.microsoft.com/en-us/library/cc754250.aspx

set命令,用于临时修改环境变量

https://technet.microsoft.com/en-us/library/cc755104.aspx

setx命令,用于永久修改环境变量

https://support.microsoft.com/en-us/help/310519/how-to-manage-environment-variables-in-windows-xp

如何在Windows XP中管理环境变量

网址:https://www.chem.gla.ac.uk/~louis/software/faq/q1.html

设置环境变量,路易斯·J·法鲁贾

3.6.2. 查找python可执行文件

在 3.5 版更改.

除了为python解释器使用自动创建的开始菜单项之外,您可能还需要在命令提示下启动python。安装程序有一个为您设置的选项。

在安装程序的第一页,可以选择标记为“将python添加到路径”的选项,让安装程序将安装位置添加到 PATH . 的位置 Scripts\ 也会添加文件夹。这允许您键入 python 运行解释器,以及 pip 用于程序包安装程序。因此,还可以使用命令行选项执行脚本,请参见 命令行 文档。

如果在安装时不启用此选项,则可以始终重新运行安装程序,选择“修改”并启用它。或者,您可以手动修改 PATH 使用中的方向 远足:设置环境变量 . 你需要设置你的 PATH 包含python安装目录的环境变量,由来自其他条目的分号分隔。示例变量可以如下所示(假设前两个条目已经存在)::

C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files\Python 3.9

3.7. UTF-8模式

3.7 新版功能.

Windows仍然使用传统编码进行系统编码(ANSI代码页)。Python将其用于文本文件的默认编码(例如。 locale.getpreferredencoding()

这可能会导致问题,因为UTF-8在internet和大多数Unix系统(包括WSL(Windows Subsystem for Linux))上广泛使用。

您可以使用 Python UTF-8 Mode 若要将默认文本编码更改为UTF-8,请执行以下操作。您可以启用 Python UTF-8 Mode 通过 -X utf8 命令行选项,或 PYTHONUTF8=1 环境变量。看见 PYTHONUTF8 用于启用UTF-8模式,以及 远足:设置环境变量 有关如何修改环境变量的信息。

Python UTF-8 Mode 启用后,您仍然可以通过“MBCS”编解码器使用系统编码(ANSI代码页)。

注意添加 PYTHONUTF8=1 默认环境变量将影响系统上的所有Python3.7+应用程序。如果有任何依赖于遗留系统编码的Python3.7+应用程序,建议临时设置环境变量或使用 -X utf8 命令行选项。

注解

即使禁用了UTF-8模式,Python在Windows上也默认使用UTF-8:

3.8. 用于Windows的python启动程序

3.3 新版功能.

用于Windows的python启动程序是一个实用程序,它帮助定位和执行不同的python版本。它允许脚本(或命令行)指示对特定Python版本的偏好,并将定位和执行该版本。

不像 PATH 变量,启动程序将正确选择最合适的Python版本。它将更类似于按用户安装,而不是按系统范围安装,并按语言版本订购,而不是使用最新安装的版本。

发射器最初是在 PEP 397 .

3.8.1. 入门

3.8.1.1. 从命令行

在 3.6 版更改.

在系统范围内安装python 3.3及更高版本将使启动程序 PATH . 启动程序与所有可用的python版本都兼容,因此安装哪个版本并不重要。要检查启动程序是否可用,请在命令提示符中执行以下命令:

py

您应该发现已经安装的最新版本的python已经启动——它可以正常退出,并且指定的任何其他命令行参数都将直接发送到python。

如果安装了多个版本的python(例如2.7和 3.10 )你会注意到 Python 3.10 已启动-要启动python 2.7,请尝试以下命令:

py -2.7

如果要安装最新版本的python 2.x,请尝试以下命令:

py -2

您应该找到最新版本的python 2.x开始。

如果看到以下错误,则表示您没有安装启动程序:

'py' is not recognized as an internal or external command,
operable program or batch file.

python的每用户安装不将启动程序添加到 PATH 除非在安装时选择了该选项。

3.8.1.2. 虚拟环境

3.5 新版功能.

如果启动程序运行时没有显式的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安装的版本号。现在尝试将第一行更改为:

#! python3

重新执行命令现在应该打印最新的python 3.x信息。与上面的命令行示例一样,您可以指定更显式的版本限定符。假设已经安装了python 2.6,请尝试将第一行更改为 #! python2.6 您应该可以找到打印的2.6版本信息。

请注意,与交互式使用不同,裸露的“python”将使用您安装的最新版本的python 2.x。这是为了向后兼容和与Unix的兼容性,其中命令 python 通常指的是python 2。

3.8.1.4. 来自文件关联

启动程序应该与python文件(即 .py.pyw.pyc 文件)。这意味着,当您从Windows资源管理器双击其中一个文件时,将使用启动程序,因此您可以使用上面描述的相同工具,让脚本指定应该使用的版本。

这样做的主要好处是,根据第一行的内容,单个启动程序可以同时支持多个Python版本。

3.8.2. 雪邦线

如果脚本文件的第一行以 #! 它被称为“shebang”线。Linux和其他类似于Unix的操作系统对这些行具有本机支持,它们通常用于此类系统,以指示应如何执行脚本。这个启动程序允许在Windows上与Python脚本一起使用相同的工具,上面的示例演示了它们的使用。

为了允许Python脚本中的shebang行在UNIX和Windows之间可移植,这个启动程序支持许多“virtual”命令来指定要使用的解释器。支持的虚拟命令包括:

  • /usr/bin/env python

  • /usr/bin/python

  • /usr/local/bin/python

  • python

例如,如果脚本的第一行以

#! /usr/bin/python

将找到并使用默认的python。由于许多为在Unix上工作而编写的python脚本已经有了这一行,您应该发现这些脚本可以被启动程序使用而不需要修改。如果您正在Windows上编写一个新脚本,希望它在Unix上有用,那么应该使用以开头的shebang行之一。 /usr .

/usr/bin/python2.7-32

3.7 新版功能: /usr/bin/python3-64

这个 /usr/bin/env 射帮线的形式又有一个特殊的性质。在查找已安装的python解释器之前,此表单将搜索可执行文件 PATH 对于python可执行文件。这对应于Unix的行为 env 程序,执行 PATH 搜索。

3.8.3. shebang行中的参数

shebang行还可以指定要传递给python解释器的其他选项。例如,如果您有一条shebang线:

#! /usr/bin/python -v

然后python将以 -v 选项

3.8.4. 定制

3.8.4.1. 通过ini文件自定义

启动程序将搜索两个.ini文件- py.ini 在当前用户的“应用程序数据”目录(即调用Windows函数返回的目录)中 SHGetFolderPath 具有 CSIDL_LOCAL_APPDATApy.ini 在与启动程序相同的目录中。相同的.ini文件用于启动程序的“控制台”版本(即py.exe)和“Windows”版本(即pyw.exe)。

“应用程序目录”中指定的自定义项优先于可执行文件旁边的自定义项,因此可能没有对启动程序旁边的.ini文件的写入权限的用户可以覆盖该全局.ini文件中的命令。

3.8.4.2. 自定义默认的python版本

在某些情况下,可以在命令中包含版本限定符,以指定命令将使用哪个版本的Python。版本限定符以主版本号开头,可以选择后跟句点(“.”)和次版本说明符。此外,还可以通过添加“-32”或“-64”来指定是否请求32位或64位实现。

例如,shebang行 #!python 没有版本限定符,而 #!python3 具有仅指定主版本的版本限定符。

如果在命令中找不到版本限定符,则环境变量 PY_PYTHON

如果找不到次要版本限定符,则环境变量 PY_PYTHON{{major}} (何处) {{major}} 是否可以设置上面确定的当前主要版本限定符以指定完整版本。如果找不到这样的选项,则启动程序将枚举已安装的python版本,并使用主版本的最新次要版本,该版本可能是该系列中最新安装的版本,但不保证是最新安装的版本。

在安装了相同(major.minor)python版本的32位和64位实现的64位Windows上,始终首选64位版本。对于启动程序的32位和64位实现,这都是正确的——如果可用,32位启动程序更愿意执行指定版本的64位python安装。因此,可以预测启动程序的行为,只知道在PC上安装了什么版本,而不考虑安装顺序(即,不知道最后安装的是32或64位版本的python和相应的启动程序)。如上所述,可以在版本说明符上使用可选的“-32”或“-64”后缀来更改此行为。

实例:

  • 如果未设置相关选项,则命令 pythonpython2 将使用最新安装的python 2.x版本和命令 python3 将使用最新安装的python 3.x。

  • 命令 python3.1python2.7 完全指定了版本,因此根本不会参考任何选项。

  • 如果 PY_PYTHON=3 命令 pythonpython3 都将使用最新安装的python 3版本。

  • 如果 PY_PYTHON=3.1-32 命令 python 将使用3.1的32位实现,而命令 python3 将使用最新安装的python(py_python根本不被视为指定的主要版本。)

  • 如果 PY_PYTHON=3PY_PYTHON3=3.1 命令 pythonpython3 都将专门使用3.1

除了环境变量之外,可以在启动程序使用的.ini文件中配置相同的设置。ini文件中的节称为 [defaults] 键名将与不带前导的环境变量相同 PY_ 前缀(注意ini文件中的键名不区分大小写。)环境变量的内容将覆盖ini文件中指定的内容。

例如:

  • 设置 PY_PYTHON=3.1 相当于包含以下内容的ini文件:

[defaults]
python=3.1
  • 设置 PY_PYTHON=3PY_PYTHON3=3.1 相当于包含以下内容的ini文件:

[defaults]
python=3
python3=3.1

3.8.5. 诊断学

如果环境变量 PYLAUNCH_DEBUG 设置为(任何值),启动程序将把诊断信息打印到stderr(即控制台)。当此信息同时变得冗长时 and 简单来说,它应该允许您查看Python的版本,选择特定版本的原因,以及用于执行目标Python的确切命令行。

3.9. 查找模块

python通常将其库(以及站点包文件夹)存储在安装目录中。所以,如果您将python安装到 C:\Python\ ,默认库将驻留在 C:\Python\Lib\ 第三方模块应存储在 C:\Python\Lib\site-packages\ .

完全覆盖 sys.path 创建一个 ._pth 与dll同名的文件 (python37._pth )或可执行文件 (python._pth )并为要添加到的每个路径指定一行 sys.path . 基于dll名称的文件将覆盖基于可执行文件的文件,该文件允许为任何加载运行时的程序限制路径(如果需要)。

当文件存在时,忽略所有注册表和环境变量,启用隔离模式,以及 site 除非文件中的一行指定 import site .从开始的空白路径和行 # 被忽略。每个路径可以是绝对路径,也可以是相对于文件位置的路径。导入非目标语句 site 不允许,并且不能指定任意代码。

注意 .pth 文件(不带前导下划线)将由 site 模块时间 import site 已指定。

当没有 ._pth 找到文件,这是 sys.path 在Windows上填充:

  • 在开始处添加一个与当前目录对应的空条目。

  • 如果环境变量 PYTHONPATH 存在,如中所述 环境变量 下一步将添加其条目。请注意,在Windows中,此变量中的路径必须用分号分隔,以便与驱动器标识符中使用的冒号区分开来。 (C:\ 等等)。

  • 附加的“应用程序路径”可以作为的子项添加到注册表中。 \SOFTWARE\Python\PythonCore{version}\PythonPath 两者之下 HKEY_CURRENT_USERHKEY_LOCAL_MACHINE 蜂箱。以分号分隔的路径字符串作为其默认值的子键将导致每个路径被添加到 sys.path .(请注意,所有已知的安装程序都只使用hklm,因此hkcu通常为空。)

  • 如果环境变量 PYTHONHOME 设为“python home”。否则,主python可执行文件的路径用于定位“里程碑文件”(或者 Lib\os.pypythonXY.zip )演绎“ Python 之家”。如果找到python主目录,则将相关子目录添加到 sys.path (Libplat-win 等)基于该文件夹。否则,核心python路径是从存储在注册表中的python path构建的。

  • 如果找不到python home,则不 PYTHONPATH 在环境中指定,并且找不到注册表项,将使用带有相对项的默认路径(例如 .\Lib;.\plat-win 等)。

如果A pyvenv.cfg 文件位于主可执行文件旁边,或位于可执行文件上方一个级别的目录中,应用以下变体:

  • 如果 home 是绝对路径 PYTHONHOME 如果未设置,则在推断起始位置时使用此路径而不是主可执行文件的路径。

所有这些的最终结果是:

  • 运行时 python.exe 或主python目录中的任何其他.exe(安装的版本或直接来自pcbuild目录),将推导核心路径,并忽略注册表中的核心路径。注册表中的其他“应用程序路径”总是被读取。

  • 当python托管在另一个.exe(不同的目录,通过com嵌入等)中时,不会推导出“python home”,因此使用注册表中的核心路径。注册表中的其他“应用程序路径”总是被读取。

  • 如果python找不到它的原点,并且没有注册表值(frozen.exe,一些非常奇怪的安装设置),那么您将得到一个具有一些默认但相对路径的路径。

对于那些希望将Python捆绑到其应用程序或发行版中的用户,以下建议将防止与其他安装发生冲突:

  • 包括一个 ._pth 包含要包含的目录的可执行文件旁边的文件。这将忽略注册表和环境变量中列出的路径,也将忽略 site 除非 import site 列出。

  • 如果您正在加载 python3.dllpython37.dll 在您自己的可执行文件中,显式调用 Py_SetPath() 或者(至少) Py_SetProgramName() 之前 Py_Initialize() .

  • 清除和/或覆盖 PYTHONPATH 并设置 PYTHONHOME 发射前 python.exe 从您的应用程序。

  • 如果您不能使用以前的建议(例如,您是一个允许人们运行的分发 python.exe 直接),确保地标文件 (Lib\os.py )存在于安装目录中。(请注意,在zip文件中不会检测到它,但会检测到正确命名的zip文件。)

这将确保系统范围安装中的文件不会优先于与应用程序捆绑的标准库的副本。否则,您的用户可能会在使用您的应用程序时遇到问题。请注意,第一个建议是最好的,因为其他建议可能仍然容易受到注册表和用户站点包中的非标准路径的影响。

在 3.6 版更改:

  • 添加 ._pth 文件支持和删除 applocal 选项从 pyvenv.cfg .

  • 添加 pythonXX.zip 作为直接与可执行文件相邻时的潜在标志。

3.6 版后已移除:

在注册表中指定的模块 Modules (不是) PythonPath )可由 importlib.machinery.WindowsRegistryFinder . 在3.6.0和更早版本中的Windows上启用了此查找程序,但可能需要显式添加到 sys.meta_path 未来。

3.10. 附加模块

尽管python的目标是在所有平台之间都可移植,但有一些特性是Windows独有的。在标准库和外部库中都有两个模块和代码片段来使用这些特性。

Windows特定的标准模块记录在 MS Windows特定服务 .

3.10.1. PyWi32

这个 PyWin32 Mark Hammond提供的模块是高级Windows特定支持的模块集合。这包括用于以下用途的实用程序:

PythonWin 是Pywin32附带的示例MFC应用程序。它是带有内置调试器的可嵌入的IDE。

参见

Win32 How Do I...?

作者:蒂姆·戈尔登

Python and COM

大卫和保罗·博迪

3.10.2. cx_Freeze

cx_Freeze 是一个 distutils 延伸部分(参见 扩展distutils )它将python脚本封装成可执行的Windows程序 ({*}.exe 文件)。完成此操作后,可以分发应用程序,而无需用户安装python。

3.10.3. WConio

因为python的高级终端处理层, curses ,仅限于类似Unix的系统,还有一个Windows专用的库:用于Python的Windows控制台I/O。

WConio 是涡轮增压器的封装 CONIO.H ,用于创建文本用户界面。

3.11. 在Windows上编译python

如果您想自己编译cpython,首先应该做的是 source . 您可以下载最新版本的源代码,也可以直接获取 checkout .

源代码树包含Microsoft Visual Studio 2015的生成解决方案和项目文件,该文件是用于生成正式的Python版本的编译器。这些文件在 PCbuild 目录。

检查 PCbuild/readme.txt 有关生成过程的常规信息。

有关扩展模块,请参阅 在Windows上构建C和C++扩展 .

参见

Python + Windows + distutils + SWIG + gcc MinGW

或者“用Windows创建Cyc++中的Python扩展,并在Windows下用MinGW GCC编译”或者“用ditutul和没有微软Visual C++安装Python扩展”,由Se巴斯蒂安SouvAGE,2003

MingW -- Python extensions

3.12. 其他平台

随着Python的不断开发,以前被支持的一些平台不再受支持(由于缺乏用户或开发人员)。检查 PEP 11 有关所有不支持的平台的详细信息。

Python for Windows 有关带有预编译安装程序的平台的详细信息。