Skip to main content

3. 在Windows上使用Python

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

3.1. 安装Python

与大多数Unix系统和服务不同,Windows不包括系统支持的Python安装。为了使Python可用,CPython团队已经为每个 发布 编译Windows安装程序(MSI软件包)多年。这些安装程序主要用于添加每用户安装的Python,核心解释器和库由单个用户使用。安装程序还能够为单个计算机的所有用户安装,并且单独的ZIP文件可用于应用程序本地分发。

3.1.1. 支持的版本

PEP 11 中所述,Python版本只支持Windows平台,而Microsoft认为该平台在扩展支持下。这意味着Python 3.6 支持Windows Vista和更新版本。如果您需要Windows XP支持,那么请安装Python 3.4。

3.1.2. 安装步骤

四个Python 3.6 安装程序可供下载 - 每个都有32位和64位版本的解释器。 web安装程序 是一个小的初始下载,并将根据需要自动下载所需的组件。 离线安装程序 包括默认安装所需的组件,并且只需要互联网连接可选功能。有关在安装过程中避免下载的其他方法,请参阅 安装而不下载

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

../../_images/win_installer.png

如果选择“立即安装”:

  • 您将需要 not 是管理员(除非需要C运行时库的系统更新或您为所有用户安装 适用于Windows的Python Launcher

  • Python将被安装到您的用户目录中

  • 适用于Windows的Python Launcher 将根据第一页底部的选项进行安装

  • 将安装标准库,测试套件,启动器和pip

  • 如果选择,安装目录将被添加到您的 PATH

  • 快捷键仅对当前用户可见

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

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

  • 您可能需要提供管理凭据或批准

  • Python将被安装到Program Files目录中

  • 适用于Windows的Python Launcher 将安装到Windows目录中

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

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

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

  • 快捷键适用于所有用户

3.1.3. 删除MAX_PATH限制

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

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

这允许 open() 函数,os 模块和大多数其他路径功能在使用字符串时接受和返回长度超过260个字符的路径。 (在Windows上不支持使用字节作为路径,并且此功能在使用字节时不可用。)

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

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

3.1.4. 安装无UI

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

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

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

名称

描述

默认

InstallAllUsers

执行系统范围的安装。

0

TargetDir

安装目录

基于InstallAllUsers选择

defaultAllUsersTargetDir

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

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

DefaultJustForMeTargetDir

for-for-me安装的默认安装目录

%LocalAppData%\Programs\PythonXY%LocalAppData%\Programs\PythonXY-32

DefaultCustomTargetDir

默认自定义安装目录显示在UI中

(空)

AssociateFiles

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

1

CompileAll

将所有 .py 文件编译为 .pyc

0

PrependPath

PATHEXT 添加安装和脚本目录tho PATH.PY

0

快捷方式

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

1

Include_doc

安装Python手册

1

Include_debug

安装调试二进制文件

0

Include_dev

安装开发人员标题和库

1

Include_exe

安装 python.exe 和相关文件

1

Include_launcher

安装 适用于Windows的Python Launcher

1

InstallLauncherAllUsers

为所有用户安装 适用于Windows的Python Launcher

1

Include_lib

安装标准库和扩展模块

1

Include_pip

安装捆绑pip和setuptools

1

Include_symbols

安装调试符号(* .pdb)

0

Include_tcltk

安装Tcl/Tk支持和IDLE

1

Include_test

安装标准库测试套件

1

Include_tools

安装实用程序脚本

1

LauncherOnly

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

0

SimpleInstall

禁用大多数安装界面

0

SimpleInstallDescription

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

(空)

例如,要静默安装默认的系统范围的Python安装,您可以使用以下命令(从提升的命令提示符):

python-3.6.0.exe /quiet InstallAllUsers=1 PrependPath=1 Include_test=0

要允许用户轻松安装没有测试套件的Python的个人副本,您可以使用以下命令提供快捷方式。这将显示简化的初始页面并禁止自定义:

python-3.6.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.5. 安装而不下载

由于Python的某些功能未包含在初始安装程序下载中,因此选择这些功能可能需要互联网连接。为了避免这种需要,可以按需下载所有可能的组件以创建不再需要互联网连接而不管所选择的特征的完整 layout。请注意,此下载可能大于所需的大小,但是在要执行大量安装的情况下,拥有本地缓存副本非常有用。

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

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

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

3.1.6. 修改安装

一旦安装了Python,您可以通过作为Windows一部分的程序和功能工具添加或删除功能。选择Python条目并选择“卸载/更改”以在维护模式下打开安装程序。

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

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

“卸载”将完全删除Python,除了 适用于Windows的Python Launcher,在程序和功能中有自己的条目。

3.1.7. 其他平台

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

有关具有预编译安装程序的平台的详细信息,请参阅 Python for Windows

参见

Python on XP

“7分钟到”你好世界!“由Richard Dooling,2006年

在Windows上安装

in“ 深入Python:Python从新手到专业 ”by Mark Pilgrim,2004,ISBN 1-59059-356-1

对于Windows用户

在“安装Python”在“ 一个Python字节 ”由Swaroop C H,2003

3.2. 替代捆绑

除了标准的CPython分发之外,还有包含附加功能的修改包。以下是热门版本及其主要功能的列表:

ActivePython

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

蟒蛇

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

林冠

一个“综合的Python分析环境”与编辑器和其他开发工具。

WinPython

特定于Windows的分发,包括预先构建的科学包和用于构建包的工具。

请注意,这些软件包可能不包含最新版本的Python或其他库,并且不会被核心Python团队维护或支持。

3.3. 配置Python

要从命令提示符方便地运行Python,您可以考虑在Windows中更改一些默认环境变量。虽然安装程序提供了为您配置PATH和PATHEXT变量的选项,但这对于单个系统级安装是可靠的。如果您经常使用多个版本的Python,请考虑使用 适用于Windows的Python Launcher

3.3.1. Excursus:设置环境变量

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

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

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

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

在百分号中包含变量名将扩展为现有值,允许您在开始或结尾添加新值。通过将包含 python.exe 的目录添加到start来修改 PATH 是确保启动正确版本的Python的常见方法。

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

注解

Windows将连接用户变量 after 系统变量,这可能会在修改 PATH 时导致意外结果。

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

参见

https://support.microsoft.com/kb/100843

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/kb/310519

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

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

设置环境变量,Louis J. Farrugia

3.3.2. 查找Python可执行文件

在 3.5 版更改.

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

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

如果在安装时未启用此选项,则可以始终重新运行安装程序,选择“修改”并启用它。或者,您可以使用 Excursus:设置环境变量 中的说明手动修改 PATH。您需要设置您的 PATH 环境变量以包括Python安装的目录,由其他条目的分号分隔。一个示例变量看起来像这样(假设前两个条目已经存在):

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

3.4. 适用于Windows的Python Launcher

3.3 新版功能.

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

PATH 变量不同,启动器将正确选择最适合的Python版本。它将优先于系统范围内的每个用户安装,以及按语言版本而不是使用最近安装的版本的顺序。

3.4.1. 入门

3.4.1.1. 从命令行

在 3.6 版更改.

系统范围内安装的Python 3.3及更高版本会将启动器放在您的 PATH 上。启动器与所有可用的Python版本兼容,因此安装的版本无关紧要。要检查启动程序是否可用,请在命令提示符中执行以下命令:

py

你应该发现你安装的最新版本的Python已经启动了 - 它可以正常退出,任何额外的命令行参数指定将直接发送到Python。

如果您安装了多个版本的Python(例如2.7和 3.6),您将注意到Python 3.6 已启动 - 要启动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.4.1.2. 虚拟环境

3.5 新版功能.

如果启动器没有明确的Python版本规范运行,并且虚拟环境(使用标准库 venv 模块或外部 virtualenv 工具创建)处于活动状态,则启动器将运行虚拟环境的解释器而不是全局解释器。要运行全局解释器,请停用虚拟环境,或显式指定全局Python版本。

3.4.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.4.1.4. 从文件关联

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

这样做的主要好处是,单个启动器可以同时支持多个Python版本,具体取决于第一行的内容。

3.4.2. 谢邦线

如果脚本文件的第一行以 #! 开头,则称为“shebang”行。 Linux和其他类似Unix的操作系统本地支持这样的行,并且通常在这样的系统上使用以指示如何执行脚本。此启动器允许相同的设施在Windows上使用Python脚本,上面的示例演示了它们的用法。

要允许Python脚本中的shebang行在Unix和Windows之间移植,此启动器支持多个“虚拟”命令来指定要使用的解释器。支持的虚拟命令是:

  • /usr/bin/env python

  • /usr/bin/python

  • /usr/local/bin/python

  • python

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

#! /usr/bin/python

将定位和使用默认的Python。由于许多Python脚本编写的工作在Unix上已经有这一行,你应该发现这些脚本可以由启动器使用没有修改。如果你在Windows上编写一个你希望在Unix上有用的新脚本,你应该使用一个以 /usr 开头的shebang行。

任何上述虚拟命令都可以带有显式版本(仅主要版本,或主要版本和次要版本)(例如 /usr/bin/python2.7)的后缀,这将导致定位和使用该特定版本。

/usr/bin/env 形式的shebang线有另一个特殊属性。在寻找已安装的Python解释器之前,此窗体将搜索可执行文件 PATH 以查找Python可执行文件。这对应于执行 PATH 搜索的Unix env 程序的行为。

3.4.3. shebang行中的参数

shebang行还可以指定要传递给Python解释器的其他选项。例如,如果你有一个shebang行:

#! /usr/bin/python -v

然后Python将使用 -v 选项启动

3.4.4. 定制

3.4.4.1. 通过INI文件进行定制

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

在“应用程序目录”中指定的定制将优先于可执行文件旁边的定制,因此可能没有对启动器旁边的.ini文件具有写访问权的用户可以覆盖该全局.ini文件中的命令)

3.4.4.2. 自定义默认Python版本

在某些情况下,可以在命令中包括版本限定符,以指示命令将使用哪个版本的Python。版本限定符以主版本号开头,可以选择性地后跟句点(’。’)和次要版本说明符。如果指定了minor限定符,则可以可选地后跟“-32”,以指示使用该版本的32位实现。

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

如果在命令中未找到版本限定符,则可以将环境变量 PY_PYTHON 设置为指定默认版本限定符 - 默认值为“2”。请注意,此值可以仅指定主版本(例如“2”)或major.minor限定符(例如“2.6”),或甚至major.minor-32。

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

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

例子:

  • 如果没有设置相关选项,命令 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.4.5. 诊断

如果环境变量 PYLAUNCH_DEBUG 被设置(到任何值),启动器将打印诊断信息到stderr(即到控制台)。虽然这些信息同时具有详细的 and 特性,但它应该能够让你看到Python的版本是什么,为什么选择一个特定的版本,以及用于执行目标Python的精确命令行。

3.5. 查找模块

Python通常将其库(以及从而您的site-packages文件夹)存储在安装目录中。所以,如果你已经安装了Python到 C:\Python\,默认库将驻留在 C:\Python\Lib\ 和第三方模块应该存储在 C:\Python\Lib\site-packages\

要完全覆盖 sys.path,请创建与DLL(python36._pth)或可执行文件(python._pth)同名的 ._pth 文件,并为要添加到 sys.path 的每个路径指定一行。基于DLL名的文件会覆盖基于可执行文件的文件,这样,如果需要,可以限制任何程序加载运行时的路径。

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

请注意,site 模块将正常处理 .pth 文件(无前导下划线)。

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

  • 在开始处添加一个空条目,其对应于当前目录。

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

  • 额外的“应用程序路径”可以在注册表中的 HKEY_CURRENT_USERHKEY_LOCAL_MACHINE 荨麻疹根据双方的 \SOFTWARE\Python\PythonCore\version\PythonPath 子加入。以分号分隔的路径字符串作为其默认值的子键将导致每个路径添加到 sys.path。 (请注意,所有已知的安装程序仅使用HKLM,因此HKCU通常为空。)

  • 如果设置了环境变量 PYTHONHOME,则假定为“Python Home”。否则,主Python可执行文件的路径用于定位“地标文件”(Lib\os.pypythonXY.zip)以推导“Python Home”。如果找到Python主目录,添加到 sys.pathLibplat-win 等)的相关子目录基于该文件夹。否则,核心Python路径是从存储在注册表中的PythonPath构造的。

  • 如果无法找到Python Home,则在环境中未指定 PYTHONPATH,并且未找到注册表项,则使用带有相对条目的默认路径(例如 .\Lib;.\plat-win 等)。

如果在主可执行文件或可执行文件上一级目录中找到 pyvenv.cfg 文件,则应用以下变体:

  • 如果 home 是绝对路径并且 PYTHONHOME 未设置,则在推导归属位置时使用该路径而不是到主可执行文件的路径。

这一切的最终结果是:

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

  • 当Python托管在另一个.exe(不同的目录,通过COM嵌入等),“Python Home”不会被推导出来,所以使用从注册表的核心路径。注册表中的其他“应用程序路径”总是被读取。

  • 如果Python找不到它的家,没有注册表值(冻结的.exe,一些非常奇怪的安装设置),你得到一个路径与一些默认,但相对路径。

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

  • 在包含要包括的目录的可执行文件中包含 ._pth 文件。这将忽略在注册表和环境变量中列出的路径,并且还会忽略 site,除非列出了 import site

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

  • 在从应用程序启动 python.exe 之前,清除和/或覆盖 PYTHONPATH 并设置 PYTHONHOME

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

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

在 3.6 版更改:
  • 添加 ._pth 文件支持并从 pyvenv.cfg 中删除 applocal 选项。

  • pythonXX.zip 添加为直接邻近可执行文件时的潜在标记。

3.6 版后已移除:

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

3.6. 附加模块

即使Python的目标是在所有平台之间移植,有一些Windows独有的功能。存在几个模块,在标准库和外部和片段中使用这些功能。

Windows专用标准模块在 MS Windows特定服务 中有记录。

3.6.1. PyWin32

Mark Hammond的 PyWin32 模块是用于高级Windows特定支持的模块集合。这包括以下工具:

PythonWin 是随PyWin32一起提供的示例MFC应用程序。它是一个带有内置调试器的可嵌入IDE。

参见

Win32我如何...?

作者:Tim Golden

Python和COM

由David和Paul Boddie

3.6.2. cx_Freeze

cx_Freeze 是一个 distutils 扩展(见 扩展Distutils),它将Python脚本包装到可执行的Windows程序(*.exe 文件)中。当你这样做,你可以分发你的应用程序,而不需要你的用户安装Python。

3.6.3. WConio

由于Python的高级终端处理层(curses)仅限于类Unix系统,因此还有一个专门针对Windows的库:用于Python的Windows控制台I/O。

WConio 是Turbo-C的 CONIO.H 的包装器,用于创建文本用户界面。

3.7. 在Windows上编译Python

如果你想自己编译CPython,首先你应该做的是得到 资源。你可以下载最新版本的源码,或者只是拿一个新的 查看

源代码树包含Microsoft Visual Studio 2015的构建解决方案和项目文件,这是用于构建官方Python版本的编译器。这些文件位于 PCbuild 目录中。

检查 PCbuild/readme.txt 有关构建过程的一般信息。

有关扩展模块,请咨询 在Windows上构建C和C++扩展

参见

Python + Windows + distutils + SWIG + gcc MinGW

或者“使用SWIG在C/C++中创建Python扩展并使用Windows下的MinGW gcc编译Python扩展”或者SébastienSauvage的“使用distutils并且不使用Microsoft Visual C++安装Python扩展”

MingW - Python扩展

由Trent Apted等人,2007

3.8. 嵌入式分发

3.5 新版功能.

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

提取时,嵌入式分发与用户系统(几乎)完全隔离,包括环境变量,系统注册表设置和已安装的软件包。标准库作为预编译和优化的 .pyc 文件包括在ZIP中,并且 python3.dllpython36.dllpython.exepythonw.exe 都被提供。 Tcl/tk(包括所有依赖项,如Idle),pip和Python文档不包括在内。

注解

嵌入式分发不包括 Microsoft C运行时,并且应用安装程序有责任提供此。运行时可能已经预先或通过Windows Update自动安装在用户系统上,并且可以通过在系统目录中找到 ucrtbase.dll 来检测。

第三方包应由应用程序安装程序与嵌入式发行版一起安装。使用pip来管理依赖关系,对于普通的Python安装不支持这个分发,虽然有一些小心,可能包括和使用pip自动更新。一般来说,第三方包应被视为应用程序(“装配”)的一部分,以便开发人员在向用户提供更新之前确保与新版本的兼容性。

此分布的两个推荐用例如下所述。

3.8.1. Python应用程序

用Python编写的应用程序不一定要求用户知道这个事实。在这种情况下,嵌入式分发可以在安装包中包括Python的私有版本。根据它应该是多么透明(或者相反,它应该显示多么专业),有两个选择。

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

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

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

3.8.2. 嵌入Python

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

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

3.9. 其他资源

参见

Python编程在Win32

“Help for Windows Programmers”,Mark Hammond和Andy Robinson,O’Reilly Media,2000,ISBN 1-56592-621-8

Python for Windows教程

由Amanda Birmingham,2004年

PEP 397 - 适用于Windows的Python启动器

将启动器的提议包括在Python分发中。