3. 在Windows上使用 Python?

本文檔旨在概述在 Microsoft Windows 上使用 Python 時應了解的特定于 Windows 的行為。

與大多數UNIX系統和服務不同,Windows系統沒有預安裝Python。為了使Python可用,很多年來CPython 團隊已經編譯了每一個 release 的Windows安裝程序(MSI 包)。這些安裝程序主要用于每個用戶單獨安裝Python時,添加核心解釋器和庫。安裝程序還可以為一臺機器的所有用戶安裝,并且可以為應用程序本地分發提供單獨的zip文件。

PEP 11 中所述,Python 僅支持微軟產品支持生命周期內的Windows 版本。這意味著 Python 3.7 支持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.7 安裝程序可供下載 - 32位和64位版本的各有兩個。 web installer (網絡安裝包)是一個小的初始化工具,它將在安裝過程中,根據需要自動下載所需的組件。 offline installer (離線安裝包)內含默認安裝所需的組件,可選擇功能仍需要Internet連接下載。請參閱 免下載安裝 以了解在安裝過程中避免下載的其他方法。

啟動安裝程序后,可以選擇以下兩個選項之一:

../_images/win_installer.png

如果選擇“Install Now(立即安裝)”:

  • 需要成為管理員(除非需要對C運行庫進行系統更新,或者為所有用戶安裝 適用于Windows的Python啟動器

  • Python將安裝到您的用戶目錄中

  • 適用于Windows的Python啟動器 將根據第一頁底部的選項安裝

  • 將安裝標準庫,測試套件,啟動器和pip

  • 如果選擇將安裝目錄將添加到 PATH

  • 快捷方式僅對當前用戶可見

選擇“自定義安裝”將允許您選擇:要安裝的功能、安裝位置、其他選項或安裝后的操作。如果要安裝調試符號或二進制文件,您需要使用此選項。

如要為全部用戶安裝,應選擇“自定義安裝”。在這種情況下:

  • 您可能需要提供管理憑據或批準

  • Python 將安裝到Program Files目錄中

  • 適用于Windows的Python啟動器 將安裝到Windows目錄中

  • 安裝期間可以選擇可選功能

  • 標準庫可以預編譯為字節碼

  • 如果選中,安裝目錄將添加到系統 PATH

  • 快捷方式所有用戶可用

3.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中啟用了對長路徑的支持。

3.1.3. 無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

僅為我安裝的默認安裝目錄

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

DefaultCustomTargetDir

UI中顯示的默認自定義安裝目錄

(空)

AssociateFiles

如果還安裝了啟動器,則創建文件關聯。

1

CompileAll

將所有 .py 文件編譯為 .pyc

0

PrependPath

將install和Scripts目錄添加到 PATH 以及將 .PY 添加到 PATHEXT

0

Shortcuts

如果已安裝,為解釋器,文檔和IDLE創建快捷方式

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和setuptools

1

Include_symbols

安裝調試符號(*.pdb)

0

Include_tcltk

安裝Tcl/Tk 支持和IDLE

1

Include_test

安裝標準庫測試套件

1

Include_tools

安裝實用程序腳本

1

LauncherOnly

僅安裝啟動器。這將覆蓋大多數其他選項。

0

SimpleInstall

禁用大多數安裝UI

0

SimpleInstallDescription

使用簡化安裝UI時顯示的自定義消息。

(空)

例如,要以靜默方式全局安裝默認的Python,您可以(在命令提示符>)使用以下命令:

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

要允許用戶在沒有測試套件的情況下輕松安裝Python的個人副本,可以使用以下命令提供快捷方式。這將顯示一個簡化的初始頁面,不允許自定義:

python-3.7.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.7.0.exe 替換安裝程序的實際名稱,并在自己的目錄中創建布局以避免具有相同名稱的文件之間發生沖突。

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

您也可以指定 /quiet 選項來隱藏進度顯示。

3.1.5. 修改安裝?

安裝Python后,您可以通過Windows中的“程序和功能”工具添加或刪除功能。選擇Python條目并選擇“卸載/更改”以在維護模式下打開安裝程序。

“修改” 允許您通過修改復選框來添加或刪除功能 - 未更改的復選框將不會安裝或刪除任何內容。在此模式下無法更改某些選項,例如安裝目錄;要修改這些,您需要完全刪除然后重新安裝Python。

“修復” 將使用當前設置驗證應安裝的所有文件,并替換已刪除或修改的任何文件

“卸載” 將完全刪除Python,但 適用于Windows的Python啟動器 除外,它在“程序和功能”中有自己的條目。

3.2. Microsoft Store包?

3.7.2 新版功能.

注解

Microsoft Store包當前被認為是不穩定的,同時評估了它與其他工具和其他Python副本的交互。雖然Python本身是穩定的,但這種安裝方法可能會在Python 3.7版本中改變其行為和功能。

Microsoft Store 包是一個易于安裝的 Python 解釋器,主要針對在交互模式下使用,例如用于教學。

要安裝軟件包,請確保您擁有最新的Windows 10更新,并在Microsoft Store應用程序中搜索 "Python 3.7" 。確保您選擇的應用程序由Python Software Foundation發布并安裝。

警告

Python將始終在Microsoft Store上免費提供。如果要求您付款,則表示您沒有選擇正確的包。

安裝完成后,可以在開始菜單中找到它來啟動 Python。或者可以在命令提示符或 PowerShell 會話中輸入 python 來啟動。此外可以輸入 pipidle 來使用 pip 和 IDLE。IDLE 也在開始菜單中。

所有這三個命令也可以使用版本號后綴,例如, python3.exepython3.x.exe 以及 python.exe (其中 3.x 是您要啟動的特定版本,例如 3.7 )

可以使用 python -m venv 創建虛擬環境并激活并正常使用。

如果你已經安裝了另一個版本的Python并將它添加到你的 PATH 變量中,那么它將作為 python.exe 而不是來自Microsoft Store的那個。要訪問新安裝,請使用 python3.exepython3.x.exe

要刪除Python,請打開“設置”并使用“應用程序和功能”,或者在“開始”中找到Python,然后右鍵單擊以選擇“卸載”。卸載將刪除該已安裝Python程序中的所有軟件包,但不會刪除任何虛擬環境

3.2.1. 已知的問題?

目前, py.exe 啟動程序在從Microsoft Store安裝時不能用于啟動Python。

由于Microsoft Store應用程序的限制,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 選項,則此名稱將包含已安裝的特定版本。子目錄里面是一個包含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位版本。

3.4. 可嵌入的包?

3.5 新版功能.

嵌入式發行版是一個包含最小Python環境的ZIP文件。它旨在作為另一個應用程序的一部分,而不是由最終用戶直接訪問。

解壓縮后,嵌入式發行版(幾乎)與用戶系統完全隔離,包括環境變量、系統注冊表設置和已安裝的軟件包。標準庫作為預先編譯和優化的 .pyc 文件包含在ZIP中,并提供了 python3.dllpython37.dllpython.exepythonw.exe 文件。不包括Tcl/tk(包括所有依賴項,如Idle),pip和Python文檔。

注解

嵌入式發行版不包括 Microsoft C Runtime ,應用程序安裝程序負責提供此功能。運行時可能已經預先安裝在用戶的系統上或通過Windows Update自動安裝,并且可以通過在系統目錄中找到 ucrtbase.dll 來檢測

第三方軟件包應該由應用程序與嵌入式發行版一起安裝。這個發行版不支持像常規Python安裝那樣使用pip來管理依賴關系,不過可以小心地將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中更改一些默認環境變量。雖然安裝程序提供了為您配置PATH和PATHEXT變量的選項,但這僅適用于單版本、全局安裝。如果您經常使用多個版本的Python,請考慮使用 適用于Windows的Python啟動器

3.6.1. 附錄:設置環境變量?

Windows允許在用戶級別和系統級別永久配置環境變量,或臨時在命令提示符中配置環境變量。

要臨時設置環境變量,請打開命令提示符并使用 set 命令:

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

這些環境變量的更改將應用??于在該控制臺中執行的任何其他命令,并且,由該控制臺啟動的任何應用程序都繼承設這些設置。

在百分號中包含的變量名將被現有值替換,允許在開始或結束時添加新值。通過將包含 python.exe 的目錄添加到開頭來修改 PATH 是確保啟動正確版本的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

設置環境變量(For Windows 2000/NT),Louis J. Farrugia

3.6.2. 查找Python可執行文件?

在 3.5 版更改.

除了使用自動創建的Python解釋器的開始菜單項之外,您可能還想在命令提示符下啟動Python。安裝程序有一個選項可以為您設置。

在安裝程序的第一頁上,可以選擇標記為“將Python添加到環境變量”的選項,以使安裝程序將安裝位置添加到 PATH 。還添加了 Scripts\ 文件夾的位置。這允許你輸入 python 來運行解釋器,并且 pip 用于包安裝程序。因此,您還可以使用命令行選項執行腳本,請參閱 命令行 文檔。

如果在安裝時未啟用此選項,則始終可以重新運行安裝程序,選擇“修改”并啟用它。或者,您可以使用 附錄:設置環境變量 的方法手動修改 PATH 。您需要將Python安裝目錄添加到 PATH 環境變量中,該內容與其他條目用分號分隔。示例變量可能如下所示(假設前兩個條目已經存在):

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

3.7. UTF-8 模式?

3.7 新版功能.

Windows 仍然使用傳統編碼格式作為系統的編碼格式(ANSI 代碼頁)。 Python 使用它作為文本文件默認的編碼格式 (即 locale.getpreferredencoding())。

這可能會造成問題,因為因特網和大多數 Unix 系統包括 WSL (Windows Subsystem for Linux) 廣泛使用 UTF-8。

你可以使用 UTF-8 模式將默認的文本編碼格式改為 UTF-8。 要啟用 UTF-8 模式可以通過 -X utf8 命令行選項,或者 PYTHONUTF8=1 環境變量。 請參見 PYTHONUTF8 了解如何啟用 UTF-8 模式,并參見 附錄:設置環境變量 了解如何修改環境變量。

當 UTF-8 模式被啟用時:

  • locale.getpreferredencoding() 將返回 'UTF-8' 而不是系統的編碼格式。 此函數可用來在許多場合下獲取默認的文本編碼格式,包括 open(), Popen, Path.read_text() 等等。

  • sys.stdin, sys.stdoutsys.stderr 都將使用 UTF-8 作為其文本編碼格式。

  • 你仍然可以通過 "mbcs" 編解碼器來使用系統的編碼格式。

請注意添加 PYTHONUTF8=1 到默認環境變量將會影響你的系統中的所有 Python 3.7+ 應用。 如果你有任何 Python 3.7+ 應用仍然依賴于傳統的系統編碼格式,則推薦設置臨時環境變量或使用 -X utf8 命令行選項。

注解

即使在不啟用 UTF-8 模式時,Windows 版的 Python 也會在以下情況中默認使用 UTF-8:

  • 控制臺 I/O 包括標準 I/O (詳情見 PEP 528)。

  • 文件系統編碼格式 (詳情見 PEP 529)。

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.7 ),您會注意到Python 3.7 啟動 - 如果要啟動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 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。因為在Unix上編寫的許多Python腳本已經有了這一行,你應該發現這些腳本可以由啟動器使用而無需修改。如果您在Windows上編寫一個新腳本,希望在Unix上有用,那么您應該使用以 /usr 開頭的一個shebang行。

任何上述虛擬命令都可以顯式指定版本(可以僅為主要版本,也可以為主要版本加次要版本)作為后綴。 此外,可以通過在次要版本之后添加 “-32” 來請求 32 位版本。 例如 /usr/bin/python2.7-32 將請求使用 32 位 python 2.7。

3.7 新版功能: 從python啟動程序3.7開始,可以通過“-64”后綴調用64位版本。此外,可以指定沒有次要的主要和架構(即 /usr/bin/python3-64 )。

shebang line的 /usr/bin/env 形式還有一個特殊屬性。在尋找已安裝的Python解釋器之前,此表單將搜索可執行文件 PATH 以獲取Python可執行文件。這對應于Unix中 env 程序的行為,該程序將在 PATH 執行搜索。

3.8.3. shebang lines 的參數?

shebang lines 還可以指定要傳遞給Python解釋器的其他選項。例如,如果你有一個shebang lines :

#! /usr/bin/python -v

然后Python將以 -v 選項啟動

3.8.4. 自定義?

3.8.4.1. 通過INI文件自定義?

啟動程序將搜索兩個.ini文件 - 在當前用戶的 "application data" 目錄中搜索 py.ini (即通過使用 CSIDL_LOCAL_APPDATA 調用Windows函數 SHGetFolderPath 返回的目錄)以及與啟動器位于同一目錄中的 py.ini 。相同的.ini文件既用于啟動器的“控制臺”版本(即 py.exe),也用于“windows”版本(即pyw.exe)

“應用程序目錄”中指定的自定義優先于可執行文件旁邊.ini文件的自定義,因此對啟動程序旁邊的.ini文件不具有寫訪問權限的用戶可以覆蓋該全局.ini文件中的命令。

3.8.4.2. 自定義默認的Python版本?

在某些情況下,可以在命令中包含版本限定符,以指示命令將使用哪個版本的Python。版本限定符以主版本號開頭,可以選擇后跟句點 ('.') 和次版本說明符。此外,可以通過添加“-32”或“-64”來指定是否應該調用32位或64位實現。

例如,一個shebang line 的 #!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”后綴來更改此行為。

示例:

  • 如果沒有設置相關選項,命令 pythonpython2 將使用安裝的最新Python 2.x版本,命令 python3 將使用最新安裝的Python 3.x.

  • 命令 python3.1python2.7 根本不會查閱任何選項,因為版本已完全指定。

  • 如果 PY_PYTHON=3 ,命令``python`` 和 python3 都將使用最新安裝的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(即:控制臺)。雖然這些信息同時具有冗長 簡潔性,但它應該允許您查看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 時, .pth 文件(沒有前導下劃線)將由 site 模塊正常處理。

當找不到 ._pth 文件時, sys.path 是如何在Windows上填充的:

  • 在開始時,添加一個空條目,該條目對應于當前目錄。

  • 如果環境變量 PYTHONPATH 存在,如 環境變量 中所述,則接下來添加其條目。請注意,在Windows上,此變量中的路徑必須用分號分隔,以區別于驅動器標識符中使用的冒號( C:\ 等)。

  • 額外的 "應用程序路徑" 可以作為子鍵被同時添加到注冊表 HKEY_CURRENT_USERHKEY_LOCAL_MACHINE 分支下的 \SOFTWARE\Python\PythonCore{version}\PythonPath 中。 以分號分隔的路徑字符串作為默認值的子鍵將導致每個路徑都被添加到 sys.path 中。 (請注意所有已知的安裝程序都只使用 HKLM,因此 HKCU 通常為空。)

  • 如果設置了環境變量 PYTHONHOME ,則將其假定為 “Python 主目錄” 。否則,主Python可執行文件的路徑用于定位 “landmark 文件” ( Lib\os.pypythonXY.zip )以推斷 ”Python 主目錄“ 。如果找到了Python主目錄,則基于該文件夾將相關的子目錄添加到 sys.pathLib , 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.dllpython37.dll ,在 Py_Initialize() 之前,要顯式調用 Py_SetPath() 或(至少) Py_SetProgramName()

  • 清除 和/或 覆蓋 PYTHONPATH 并在啟動來自應用程序的 python.exe 之前設置 PYTHONHOME

  • 如果您不能使用前面的建議(例如,您是一個允許人們直接運行 python.exe 的分發版),請確保安裝目錄中存在 landmark 文件 (Lib\os.py)。 (請注意,在 ZIP 文件中不會檢測到該文件,但會檢測到正確命名的 ZIP 文件。)

這些將確保系統范圍安裝中的文件不會優先于與應用程序捆綁在一起的標準庫的副本。否則,用戶可能會在使用您的應用程序時遇到問題請注意,第一個建議是最好的,因為其他建議可能仍然容易受到注冊表和用戶站點包中的非標準路徑的影響。

在 3.6 版更改:
  • 添加 ._pth 文件支持并從 pyvenv.cfg 中刪除 applocal 選項

  • 當直接與可執行文件相鄰時,添加 pythonXX.zip 作為潛在的 landmark 。

3.6 版后已移除:

Modules (不是 PythonPath )下的注冊表中指定的模塊可以通過以下方式導入 importlib.machinery.WindowsRegistryFinder 。在Windows上,此查找程序在3.6.0及更早版本的可用,但可能需要在將來顯式添加到 sys.meta_path

3.10. 附加模塊?

盡管Python的目標是在所有平臺中都可移植,但是Windows有一些獨特的特性。在標準庫和外部都有一些模塊和代碼片段在使用這些特性。

特定于Windows的標準模塊記錄在 Windows系統相關模塊 中。

3.10.1. PyWin32?

Mark Hammond 的?PyWin32 模塊是一組用于高級Windows特定支持的模塊。這包括以下實用程序:

PythonWin 是PyWin32附帶的一個示例MFC應用程序。它是一個內置調試器的可嵌入IDE。

參見

Win32 How Do I...?

by Tim Golden

Python and COM

by David and Paul Boddie

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 是Turbo-C的 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

或 "Creating Python extensions in C/C++ with SWIG and compiling them with MinGW gcc under Windows" 或 "Installing Python extension with distutils and without Microsoft Visual C++" by Sébastien Sauvage, 2003

MingW -- Python 擴展

3.12. 其他平臺?

隨著Python的不斷發展,不再支持以前曾經支持的一些平臺(由于缺少用戶或開發人員)。檢查 PEP 11 了解所有不支持的平臺的詳細信息。

有關具有預編譯安裝程序平臺的詳細信息,請參閱 Python for Windows