3. Using Python on Windows¶
本文档旨在概述在Microsoft Windows上使用Python时应了解的Windows特定行为。
3.1. Installing Python¶
与大多数Unix系统和服务不同,Windows不包括系统支持的Python安装。为了使Python可用,CPython团队已经为每个发布编译Windows安装程序(MSI软件包)多年。这些安装程序主要用于添加每用户安装的Python,核心解释器和库由单个用户使用。安装程序还能够为单个计算机的所有用户安装,并且单独的ZIP文件可用于应用程序本地分发。
3.1.1. Supported Versions¶
如 PEP 11中所述,Python版本只支持Windows平台,而Microsoft认为该平台在扩展支持下。这意味着Python 3.5支持Windows Vista及更高版本。如果您需要Windows XP支持,那么请安装Python 3.4。
3.1.2. Installation Steps¶
四个Python 3.5安装程序可供下载 - 解释器的32位和64位版本各有两个。网络安装程序是一个小型的初始下载,它会根据需要自动下载所需的组件。离线安装程序包含默认安装所需的组件,并且只需要互联网连接可选功能。有关在安装过程中避免下载的其他方法,请参见Installing Without Downloading。
启动安装程序后,可以选择以下两个选项之一:
如果选择“立即安装”:
- 您将不是需要是管理员(除非需要C Runtime库的系统更新或您为所有用户安装Python Launcher for Windows)
- Python将被安装到您的用户目录中
- 将根据第一页底部的选项安装Python Launcher for Windows
- 将安装标准库,测试套件,启动器和pip
- 如果选择此选项,安装目录将添加到您的
PATH
- 快捷键仅对当前用户可见
选择“自定义安装”将允许您选择要安装的功能,安装位置和其他选项或安装后操作。要安装调试符号或二进制文件,您需要使用此选项。
要执行所有用户安装,应选择“自定义安装”。在这种情况下:
- 您可能需要提供管理凭据或批准
- Python将被安装到Program Files目录中
- Python Launcher for Windows将安装到Windows目录中
- 在安装过程中可以选择可选功能
- 标准库可以预编译为字节码
- 如果选择,安装目录将添加到系统
PATH
- 所有用户都可以使用快捷方式
3.1.3. Installing Without UI¶
安装程序UI中的所有可用选项也可以从命令行指定,允许脚本安装程序在没有用户交互的情况下在多台计算机上复制安装。也可以在不抑制UI的情况下设置这些选项以便改变一些默认值。
要完全隐藏安装程序UI并静默安装Python,请传递/quiet
选项。要跳过用户互动,但仍显示进度和错误,请传递/passive
选项。可以传递/uninstall
选项以立即开始删除Python - 不会显示提示。
All other options are passed as name=value
, where the value is usually 0
to disable a feature, 1
to enable a feature, or a path. 可用选项的完整列表如下所示。
名称 | 描述 | 默认 |
---|---|---|
InstallAllUsers | 执行系统范围的安装。 | 0 |
TargetDir | 安装目录 | 基于InstallAllUsers选择 |
DefaultAllUsersTargetDir | 所有用户安装的默认安装目录 | %ProgramFiles%\ Python XY 或%ProgramFiles(x86)%\ Python XY |
DefaultJustForMeTargetDir | for-for-me安装的默认安装目录 | %LocalAppData%\Programs\PythonXY 或%LocalAppData%\Programs\PythonXY-32 |
DefaultCustomTargetDir | 默认自定义安装目录显示在UI中 | (空) |
AssociateFiles | 如果还安装了启动器,则创建文件关联。 | 1 |
CompileAll | 将所有.py 文件编译为.pyc 。 | 0 |
PrependPath | 添加安装和脚本目录tho PATH 和.PY 到 PATHEXT | 0 |
快捷方式 | 创建解释器,文档和IDLE的快捷方式(如果已安装)。 | 1 |
Include_doc | 安装Python手册 | 1 |
Include_debug | 安装调试二进制文件 | 0 |
Include_dev | 安装开发人员标题和库 | 1 |
Include_exe | 安装python.exe 和相关文件 | 1 |
Include_launcher | 安装Python Launcher for Windows。 | 1 |
InstallLauncherAllUsers | 为所有用户安装Python Launcher for Windows。 | 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.5.0.exe /quiet InstallAllUsers=1 PrependPath=1 Include_test=0
要允许用户在没有测试套件的情况下轻松安装Python的个人副本,可以使用以下命令提供快捷方式。这将显示简化的初始页面并禁止自定义:
python-3.5.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. Installing Without Downloading¶
由于Python的某些功能未包含在初始安装程序下载中,因此选择这些功能可能需要互联网连接。为了避免这种需要,可以按需下载所有可能的组件以创建完整的布局,其将不再需要互联网连接,而不管所选择的特征。请注意,此下载可能大于所需的大小,但是如果要执行大量安装,则拥有本地缓存副本非常有用。
从命令提示符执行以下命令以下载所有可能需要的文件。请记住用python-3.5.0.exe
替换安装程序的实际名称,并在自己的目录中创建布局,以避免具有相同名称的文件之间发生冲突。
python-3.5.0.exe /layout [optional target directory]
您还可以指定/quiet
选项以隐藏进度显示。
3.1.5. Modifying an install¶
一旦安装了Python,您可以通过作为Windows一部分的程序和功能工具添加或删除功能。选择Python条目并选择“卸载/更改”在维护模式下打开安装程序。
“修改”允许您通过修改复选框添加或删除功能 - 不变的复选框将不会安装或删除任何东西。在此模式下无法更改某些选项,例如安装目录;要修改这些,你需要删除然后重新安装Python完全。
“修复”将使用当前设置验证应安装的所有文件,并替换已删除或修改的所有文件。
“卸载”将完全删除Python,除了Python Launcher for Windows,它在程序和功能中有自己的条目。
3.1.6. Other Platforms¶
随着Python的不断发展,一些以前被支持的平台不再受支持(由于缺乏用户或开发人员)。有关所有不受支持的平台的详细信息,请查看 PEP 11。
- Windows CE仍然受支持。
- Cygwin安装程序还提供安装Python解释器(cf.Cygwin软件包源,维护程序版本)
有关具有预编译安装程序的平台的详细信息,请参阅Python for Windows。
也可以看看
- Python on XP
- “7分钟到”你好世界!“由Richard Dooling,2006年
- 在Windows上安装
- 在Mark Pilgrim,2004,“ISBN 1-59059-356-1”的“Dive into Python:Python from novice to pro”中
- 对于Windows用户
- 在“安装Python”中的“一个Python字符串”,由Swaroop C H,2003
3.2. Alternative bundles¶
除了标准的CPython分发之外,还有包含附加功能的修改包。以下是热门版本及其主要功能的列表:
- ActivePython
- 安装程序具有多平台兼容性,文档,PyWin32
- Anaconda
- 热门科学模块(如numpy,scipy和pandas)和
conda
包管理器。 - 林冠
- 一个“综合的Python分析环境”,带有编辑器和其他开发工具。
- WinPython
- 特定于Windows的分发,包括用于构建包的预构建的科学包和工具。
请注意,这些软件包可能不包含最新版本的Python或其他库,并且不会被核心Python团队维护或支持。
3.3. Configuring Python¶
要从命令提示符方便地运行Python,您可以考虑在Windows中更改一些默认环境变量。虽然安装程序提供了为您配置PATH和PATHEXT变量的选项,但这对于单个系统级安装是可靠的。如果您经常使用多个版本的Python,请考虑使用Python Launcher for Windows。
3.3.1. Excursus: Setting environment variables¶
Windows允许在用户级别和系统级别永久配置环境变量,或临时在命令提示符中。
要临时设置环境变量,请打开命令提示符,并使用set命令:
C:\>set PATH=C:\Program Files\Python 3.5;%PATH%
C:\>set PYTHONPATH=%PYTHONPATH%;C:\My_python_lib
C:\>python
这些更改将应用于在该控制台中执行的任何其他命令,并且将从由控制台启动的任何应用程序继承。
在百分号中包含变量名将扩展为现有值,允许您在开始或结束时添加新值。通过将包含python.exe的目录添加到开始来修改 PATH
是确保启动正确版本的Python的常见方法。
要永久修改默认环境变量,请单击开始并搜索“编辑环境变量”,或打开系统属性高级系统设置,然后单击环境变量按钮。在此对话框中,您可以添加或修改用户和系统变量。要更改系统变量,您需要对计算机进行非受限访问。管理员权限)。
注意
Windows将在系统变量后连接用户变量,这可能会在修改 PATH
时导致意外结果。
所有版本的Python 2和Python 3都使用 PYTHONPATH
变量,因此您不应该永久配置此变量,除非它仅包含与您安装的所有版本兼容的代码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. Finding the Python executable¶
在版本3.5中更改。
除了使用为Python解释器自动创建的开始菜单项,您可能需要在命令提示符下启动Python。Python 3.5及更高版本的安装程序具有为您设置的选项。
在安装程序的第一页上,可以选择标记为“将Python 3.5添加到PATH”的选项,让安装程序将安装位置添加到 PATH
中。还会添加Scripts\
文件夹的位置。这允许您键入python运行解释器,并为包安装程序输入pip。因此,您也可以使用命令行选项执行脚本,请参见Command line文档。
如果在安装时不启用此选项,则可以始终重新运行安装程序,选择“修改”并启用它。或者,您可以使用Excursus: Setting environment variables中的说明手动修改 PATH
。您需要将 PATH
环境变量设置为包含Python安装目录,由其他条目的分号分隔。一个示例变量看起来像这样(假设前两个条目已经存在):
C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files\Python 3.5
3.4. Python Launcher for Windows¶
版本3.3中的新功能。
用于Windows的Python启动器是一个实用程序,有助于定位和执行不同的Python版本。它允许脚本(或命令行)指示特定Python版本的首选项,并将定位并执行该版本。
与 PATH
变量不同,启动器将正确选择最适合的Python版本。它将优先于系统范围内的每个用户安装,以及按语言版本而不是使用最近安装的版本的顺序。
3.4.1. Getting started¶
3.4.1.1. From the command-line¶
系统安装的Python 3.3及更高版本会将启动器置于 PATH
上。启动器与所有可用的Python版本兼容,因此安装的版本无关紧要。要检查启动器是否可用,请在命令提示符中执行以下命令:
py
你应该发现你安装的最新版本的Python 2.x已经启动了 - 它可以正常退出,任何指定的命令行参数都将直接发送到Python。
如果您安装了多个版本的Python 2.x(例如,2.6和2.7),您会注意到Python 2.7已经启动 - 要启动Python 2.6,请尝试以下命令:
py -2.6
如果您安装了Python 3.x,请尝试以下命令:
py -3
你应该找到最新版本的Python 3.x启动。
如果您看到以下错误,则说明您没有安装启动器:
'py' is not recognized as an internal or external command,
operable program or batch file.
除非在安装时选择了该选项,否则每个用户安装的Python不会将启动器添加到 PATH
。
3.4.1.2. Virtual environments¶
版本3.5中的新功能。
如果启动器未运行明确的Python版本规范,并且虚拟环境(使用标准库venv
模块或外部virtualenv
工具创建)处于活动状态,则启动器将运行虚拟环境的解释器而不是全局的。要运行全局解释器,请停用虚拟环境,或显式指定全局Python版本。
3.4.1.3. From a script¶
让我们创建一个测试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版本信息。
3.4.1.4. From file associations¶
启动器应该已经与Python文件相关联。.py
,.pyw
,.pyc
文件)。这意味着,当您从Windows资源管理器中双击其中一个文件时,将使用启动器,因此您可以使用上述相同的工具来让脚本指定应使用的版本。
其主要优点是,单个启动器可以同时支持多个Python版本,具体取决于第一行的内容。
3.4.2. Shebang Lines¶
如果脚本文件的第一行以#!
开头,它被称为“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
。这对应于执行 PATH
搜索的Unix env
程序的行为。
3.4.3. Arguments in shebang lines¶
shebang行还可以指定要传递到Python解释器的其他选项。例如,如果你有一个shebang行:
#! /usr/bin/python -v
然后Python将以-v
选项启动
3.4.4. Customization¶
3.4.4.1. Customization via INI files¶
两个.ini文件将由当前用户的“应用程序数据”目录中的启动器 - py.ini
搜索。通过在与启动程序相同的目录中调用具有CSIDL_LOCAL_APPDATA的Windows函数SHGetFolderPath和py.ini
返回的目录)。相同的.ini文件用于启动器的“控制台”版本(即py.exe)和'windows'版本(即。pyw.exe)
在“应用程序目录”中指定的定制将优先于可执行文件旁边的定制,因此可能没有对启动器旁边的.ini文件具有写访问权的用户可以覆盖该全局.ini文件中的命令)
3.4.4.2. Customizing default Python versions¶
在某些情况下,可以在命令中包括版本限定符,以指示命令将使用哪个版本的Python。版本限定符以主版本号开头,可以选择性地后跟句点('。')和次要版本说明符。如果指定了minor限定符,则可以可选地跟随“-32”,以指示使用该版本的32位实现。
例如,#!python
的shebang行没有版本限定符,而#!python3
有一个版本限定符,仅指定主版本。
如果在命令中未找到版本限定符,则可以将环境变量PY_PYTHON
设置为指定默认版本限定符 - 默认值为“2”。请注意,此值可以仅指定主版本(例如“2”)或主要的次要限定符(例如,“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”后缀来更改此行为。
例子:
- 如果没有设置相关选项,命令
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
除了环境变量,可以在启动器使用的.INI文件中配置相同的设置。INI文件中的部分称为[defaults]
,密钥名称将与没有前导PY_
前缀的环境变量相同(注意, INI文件不区分大小写。)环境变量的内容将覆盖INI文件中指定的内容。
例如:
- 设置
PY_PYTHON=3.1
等效于INI文件,其中包含:
[defaults]
python=3.1
- 设置
PY_PYTHON=3
和PY_PYTHON3=3.1
等效于INI文件,其中包含:
[defaults]
python=3
python3=3.1
3.4.5. Diagnostics¶
如果设置了环境变量PYLAUNCH_DEBUG
(到任何值),则启动器将打印诊断信息到stderr。到控制台)。虽然此信息同时具有详细的和,但它应该允许您查看Python的版本,为什么选择特定的版本以及用于执行目标Python的精确命令行。
3.5. Finding modules¶
Python通常将其库(以及您的site-packages文件夹)存储在安装目录中。因此,如果您已将Python安装到C:\Python\
,则默认库将位于C:\Python\Lib\
,第三方模块应存储在C:\Python\Lib\site-packages\
。
这是如何在Windows上填充sys.path
:
- 在开始处添加一个空条目,其对应于当前目录。
- 如果环境变量
PYTHONPATH
存在,如Environment variables中所述,则接下来添加其条目。请注意,在Windows上,此变量中的路径必须用分号分隔,以便与驱动器标识符(C:\
等)中使用的冒号区分开。)。 - 其他“应用程序路径”可以作为
\ SOFTWARE \ Python \ PythonCore \ version \ PythonPath t0>在
以分号分隔的路径字符串作为其默认值的子键将导致每个路径添加到HKEY_CURRENT_USER
和HKEY_LOCAL_MACHINE
蜂箱下。sys.path
。(请注意,所有已知的安装程序仅使用HKLM,因此HKCU通常为空。) - 如果设置了环境变量
PYTHONHOME
,则假定为“Python Home”。否则,主Python可执行文件的路径用于定位“标记文件”(Lib\os.py
)以推导“Python Home”。如果找到Python主目录,添加到sys.path
(Lib
,plat-win
等)的相关子目录基于那个文件夹。否则,核心Python路径是从存储在注册表中的PythonPath构造的。 - 如果无法找到Python Home,则在环境中未指定
PYTHONPATH
,并且未找到注册表项,则使用带有相对条目的默认路径。.\Lib;.\plat-win
等)。
如果在主可执行文件或可执行文件上一级目录中找到pyvenv.cfg
文件,则应用以下变体:
- 如果
home
是绝对路径并且PYTHONHOME
未设置,则使用此路径而不是推导主可执行文件的路径。 - 如果
applocal
设置为true,则home
属性或主可执行文件始终用作主路径,并且将忽略影响路径的所有环境变量或注册表值。未检查地标文件。
这一切的最终结果是:
- 当运行
python.exe
或主Python目录(安装版本或直接从PCbuild目录)中的任何其他.exe时,会推断核心路径,并且注册表中的核心路径被忽略。注册表中的其他“应用程序路径”总是被读取。 - 当Python托管在另一个.exe(不同的目录,通过COM嵌入等),“Python Home”不会被推导出来,所以使用从注册表的核心路径。注册表中的其他“应用程序路径”总是被读取。
- 如果Python找不到它的家,没有注册表值(冻结的.exe,一些非常奇怪的安装设置),你得到一个路径与一些默认,但相对路径。
对于那些想将Python绑定到他们的应用程序或发行版中,以下建议将防止与其他安装的冲突:
- 在包含
applocal = true
的可执行文件中包含pyvenv.cfg
文件。这将确保您自己的目录将用于解析路径,即使您已将标准库包含在ZIP文件中。它还将忽略用户site-packages和注册表中列出的其他路径。 - 如果您在自己的可执行程序中加载
python3.dll
或python35.dll
,请显式调用Py_SetPath()
或(至少)Py_SetProgramName()
之前Py_Initialize()
。 - 在启动
python.exe
之前清除和/或覆盖PYTHONPATH
并设置PYTHONHOME
你的申请。 - 如果您无法使用以前的建议(例如,您是一个允许人们直接运行
python.exe
的分发版),请确保地标文件(Lib\os.py
(请注意,它不会在ZIP文件中检测到。)
这些将确保系统范围安装中的文件不会优先于与您的应用程序捆绑在一起的标准库的副本。否则,您的用户可能会遇到使用您的应用程序的问题。请注意,第一个建议是最好的,因为其他人可能仍然容易受注册表和用户网站包中的非标准路径。
3.6. Additional modules¶
即使Python的目标是在所有平台之间移植,有一些Windows独有的功能。存在两个在标准库和外部模块中的模块,并且存在使用这些特征的片段。
Windows特定标准模块在MS Windows Specific Services中进行了说明。
3.6.1. PyWin32¶
Mark Hammond的PyWin32模块是用于高级Windows特定支持的模块的容器。这包括以下工具:
- 组件对象模型(COM)
- Win32 API调用
- 注册表
- 事件日志
- Microsoft Foundation Classes(MFC)用户界面
PythonWin是PyWin32附带的示例MFC应用程序。它是一个内嵌调试器的嵌入式IDE。
也可以看看
- Win32我如何...?
- 作者:Tim Golden
- Python和COM
- 由大卫和保罗Boddie
3.7. Compiling Python on Windows¶
如果你想自己编译CPython,首先你应该得到源。您可以下载最新版本的来源,也可以直接抓取新的结帐。
源代码树包含Microsoft Visual Studio 2015的构建解决方案和项目文件,这是用于构建官方Python版本的编译器。这些文件位于PCbuild
目录中。
有关构建过程的一般信息,请检查PCbuild/readme.txt
。
有关扩展模块,请参阅Building C and C++ Extensions on Windows。
也可以看看
- Python + Windows + distutils + SWIG + gcc MinGW
- 或者“使用SWIG在C / C ++中创建Python扩展并使用Windows下的MinGW gcc编译Python扩展”或SébastienSauvage,2003年“使用distutils并且不使用Microsoft Visual C ++安装Python扩展”
- MingW - Python扩充功能
- 由Trent Apted等人,2007
3.8. Embedded Distribution¶
版本3.5中的新功能。
嵌入式分发是一个包含最小Python环境的ZIP文件。它旨在作为另一个应用程序的一部分,而不是由最终用户直接访问。
提取时,嵌入式分发与用户系统(几乎)完全隔离,包括环境变量,系统注册表设置和已安装的软件包。标准库是作为ZIP中的预编译和优化的.pyc
文件包括的,以及python3.dll
,python35.dll
,python.exe
和pythonw.exe
。Tcl / tk(包括所有依赖项,如Idle),pip和Python文档不包括在内。
注意
嵌入式发行版不包括Microsoft C Runtime,应用程序安装程序有责任提供此信息。运行时可能已经预先或通过Windows Update自动安装在用户的系统上,并且可以通过在系统目录中找到ucrtbase.dll
来检测。
第三方包应由应用程序安装程序与嵌入式发行版一起安装。使用pip来管理依赖关系,对于普通的Python安装不支持这个分发,虽然有一些小心,可能包括和使用pip自动更新。一般来说,第三方包应被视为应用程序(“装配”)的一部分,以便开发人员在向用户提供更新之前确保与新版本的兼容性。
此分布的两个推荐用例如下所述。
3.8.1. Python Application¶
用Python编写的应用程序不一定要求用户知道这个事实。在这种情况下,嵌入式分发可以在安装包中包括Python的私有版本。根据它应该是多么透明(或相反,它应该显示多么专业),有两个选择。
使用专用可执行文件作为启动器需要一些编码,但为用户提供最透明的体验。使用自定义启动器,没有明显的迹象表明程序正在Python上运行:可以定制图标,可以指定公司和版本信息,并且文件关联正常运行。在大多数情况下,自定义启动器应该只能使用硬编码的命令行调用Py_Main
。
更简单的方法是提供批处理文件或生成的快捷方式,它使用所需的命令行参数直接调用python.exe
或pythonw.exe
。在这种情况下,应用程序将显示为Python,而不是其实际名称,用户可能无法区分它与其他运行的Python进程或文件关联。
使用后一种方法,应该将包作为目录与Python可执行文件一起安装,以确保它们在路径上可用。通过专用启动器,程序包可以位于其他位置,因为在启动应用程序之前有机会指定搜索路径。
3.8.2. Embedding Python¶
以本机代码编写的应用程序通常需要某种形式的脚本语言,嵌入式Python分发版可用于此目的。一般来说,大多数应用程序是本地代码,有些部分将调用python.exe
或直接使用python3.dll
。对于任何一种情况,将嵌入的发布提取到应用程序安装的子目录就足以提供一个可加载的Python解释器。
与应用程序使用一样,程序包可以安装到任何位置,因为有机会在初始化解释器之前指定搜索路径。否则,在使用嵌入式分发和常规安装之间没有根本区别。
3.9. Other resources¶
也可以看看
- Win32的Python编程
- “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分发中。