RFC-0129:Fuchsia 中的 Python 支援

RFC-0129:Fchsia 中的 Python 支援
狀態已接受
領域
  • 管理事宜
說明

定義 Fuchsia 專案中 Python 來源的版本管理和指令碼需求。

問題
毛皮變化
作者
審查人員
提交日期 (年-月-日)2021-06-15
審查日期 (年-月-日)2021-09-24

摘要

此 RFC 定義了 Python 的 Python 版本管理和指令碼需求 Fuchsia 專案中的資源來源。

提振精神

主機上,並非所有 Python 指令碼都會在確定性下執行 。有些指令碼以供應商預先建構的口譯服務,有些則 安裝於系統中的 Python此外, 或 Python 等支援語言

缺少確定性的 Python 環境會導致指令碼偶爾 破壞時 (例如移除 /usr/bin/python 符號連結)。這需要使用者還原本機檔案 環境為預期狀態,或在本機修改指令碼 才能與環境相容

最後,自 2020 年 1 月 1 日起,Python 2.x 已正式上線 日落時刻 python.org

設計

這項設計會將使用者的本機主機環境替換為供應商預先建構的主機環境 所有 Fuchsia Project Python 來源的 Python 解譯器。這個供應商提供的 Python 則必須使用支援的 Python 語言修訂版本。

目前供應商的 Python 版本「必須」保留在現行版本中 python.org 支援視窗。Python 版本 我們會提供合理的轉換期,讓資料來源能夠 並與新版本相容

對於 Fuchsia Project Python 來源,此 RFC 會終止對 Python 的支援 3.8 版之前的語言版本

  • 因此 Python 2.7 已淘汰。
  • 不需要 3.8 之前的回溯相容性。

Python 來源做為指令碼

Python 來源檔案可透過 (例如) 叫用 或提供引數,做為叫用 Python 的 翻譯。指令碼會以其模組的執行階段環境表示 已設定「__name__ 等於 "__main__"

必須提供可執行的 Python 來源,才能延遲給供應商的 Python 您可使用不同的方式完成此操作:

  • 透過說明文件指示使用者直接叫用供應商提供的 提供候選指令碼做為解譯器引數的解譯器。
  • 使用包裝指令碼或其他機制,推斷供應商提供的 Python 包含足以叫用翻譯器的邏輯 (例如使用 //scripts/hermetic-env)。
  • 假設指令碼解譯器來源指令 (例如 Shebang) 會導致系統使用廠商提供的翻譯模式執行指令碼。

Python 雪邦

用於直接叫用的 Python 指令碼「必須」包含 最後參照供應商的 Python適合使用的剪刀線 為:

#!/usr/bin/env fuchsia-vendored-python

由於使用 Shebang 表示需要主機環境的依附元件 她特選為達成以下隱密目標,而獲選為她:

  • 不太可能與使用者現有工具、別名或巨集衝突 主機環境。
  • 不受使用者新增 //.jiri_root/bin 的順序影響 他們的 $PATH

密封的 Python 環境

工具,例如 venvvpython 來組合暫時且密封的 Python 環境。套裝行程 安裝在這些隱密環境中的本機,不會影響本機 系統安裝數系統允許您使用密封的 Python 工具 但簡單明瞭的是,它們來自供應商的 Python。

Python VirtualEnv (venv)

您可以透過使用 -m venv my_venv 的引數。這會在本機目錄中組裝 venv my_venv。接著,可根據一般通氣孔啟動通風口,並與消費者互動 。系統允許安裝 venv-local 套件。

Chromium 版 Python

vpython 公用程式是另一種形式的密封 Python 環境管理工具。這項服務 以 $PATH 擷取其解譯器,並假設第一個翻譯端 --version 與輸入 vpython.Spec protobuf 相容。使用條件 vpython,請確認廠商的 Python 目前是在 $PATH 中設定 就會叫用 vpython此外,vpython.Spec protobuf 必須反映 目前支援的語言版本。允許 遵守目前支援的語言版本。

實作

Fuchsia Project 存放區中的所有 Python 來源都將更新為語言 3.8 版。提供直接了當的資訊來源 系統會根據 語意如下所示。

如要協助廠商將 Python 解譯器做為主要目標,請執行以下程式碼: 將修改:

  1. //.jiri_root/bin,將會新增 fuchsia-vendored-python 符號連結 與 //scripts/fuchsia-vendored-python 連結。
  2. 對於 //scripts,系統會新增 fuchsia-vendored-python 符號連結, 連結至 //scripts/fuchsia-vendored-python3.8
  3. fuchsia-vendored-python3.8 指令碼會新增至 //scripts, 實作成:
#!/bin/bash
hermetic-env python3.8 "$@"

假設 //.jiri_root/bin 是主機環境的 PATH 之一 (假設 環境設定),這個值會分派至預先建構的解譯器 。

如果 //.jiri_root/bin 不是主機環境路徑的一部分,系統會 必須將 //.jiri_root/bin/fuchsia-vendored-python 符號連結至 適當位置 (例如 ~/bin 或類似位置)。

最好偶爾需要推出新的 Python 版本 透過 //integration。實作程序相當簡單:

  1. 透過 //integration,下載並安裝預先建構的二進位檔 適當的位置。
  2. 將新的開機載入指令碼 (例如 fuchsia-vendored-python3.9) 新增至 //scripts
  3. //scripts/fuchsia-vendored-python 符號連結移至新的 啟動程序指令碼。
  4. (選用) 刪除舊的開機載入指令碼。

成效

人體工學

以人為方式開發確定性 Python 語言版本,並由供應商預先建構 更順暢的翻譯體驗使用者不會 因依賴主機而造成的問題類別,導致當機率下降 環境。

回溯相容性

不再需要 Python 語言 2.x 版的回溯相容性, 此 RFC 即終止對 Python 語言 2.x 的支援模型的用意是 這個 RFC 是為了消除 Python 2 之間的維護負擔 相容性。

安全性考量

python.org 停止服務並終止 Python 2.x 包括安全性修正在內Fuchsia 專案已不再 支援 Python 語言 2.x 版

遷移至負責維護的 Python 發布版本 (版本:版本) 來提升安全性 3.8+),而位元組與字元陣列之間所輸入的輸入內容更為嚴格 是否有幾種類型。

此外,他們以預先建構的確切版本,而非任意版本 安裝主機系統可以減少維護負擔和開發人員 也因為版本偏差和本機安裝變更而造成的困擾。

隱私權注意事項

測試

說明文件

您必須更新下列文件,以反映此處的政策:

  • //docs/development/build/build_system/policies.md
  • //docs/development/languages/python/python_style.md
  • //docs/get-started/get_fuchsia_source.md

缺點、替代方案和未知

以回溯不相容的方式停用程式設計語言修訂版本 可能會發生問題並非所有使用者都預期會有這項異動。 有些本身可能尚未從 Python 2.x 遷移

然而,業界已經注意到需要從 2.7 版遷移至 Python 3.x 已經好幾年,此變更應該不及預期。

既有藝術品和參考資料