Přeskočit na hlavní obsah

Artefakt Python

Přenosná, soběstačná distribuce CPythonu, referenční implementace programovacího jazyka Python, sestavená z projektu python-build-standalone (udržovaného společností Astral). Tento repozitář využívá Artifact Handler platformy Embedbits k vyhledání, stažení, ověření a konfiguraci interpretu Pythonu v navazujících embedded build nástrojích (build skripty, generátory kódu, nástroje pro flashování/testování a podobné úlohy, které potřebují Python bez závislosti na tom, co je nainstalováno na hostitelském stroji).

Každá větev v tomto repozitáři plní odlišnou roli, což umožňuje přesnou správu verzí a reprodukovatelné buildy napříč projekty.


Obsah repozitáře​

python/
├── main branch
│ ├── README.md ← this file
│ └── ArtifactConfig.cmake ← Artifact metadata template
│
├── Core branch
│ ├── ArtifactConfig.cmake ← Artifact metadata (name, version constraints, asset naming)
│ └── CMakePythonDefaults.cmake ← Python integration logic (interpreter path setup, invocation helpers)
│
└── Bin branch ← anchor branch, empty commits only (see "How binaries are published" below)
tags: Bin/<version>-<platform>, e.g. Bin/3.12.8-Unix

Role v platformě​

GitHub (Embedbits)
──────────────────────────────────────────────────────────
Artifact-python
main branch → README, ArtifactConfig.cmake template
Core branch → CMake handler scripts
Bin branch → anchor branch + per-version/platform tags
Bin/3.11.9-Unix → GitHub Release: CPython 3.11.9, Linux x86_64
Bin/3.12.8-Win → GitHub Release: CPython 3.12.8, Windows x86_64
Bin/3.13.5-DarwinARM → GitHub Release: CPython 3.13.5, macOS arm64
...

Platform Artifact Handler v navazujících projektech odkazuje na tento repozitář jako na Git submodul. Při konfiguraci CMake přečte ArtifactConfig.cmake, aby zjistil, které vydání stáhnout, a poté stáhne a ověří příslušný binární archiv z assetů GitHub Release u daného tagu.


Jak se binárky publikují​

Samotná větev Bin obsahuje vždy pouze prázdné commity — jeden pro každou publikovanou verzi — které slouží výhradně jako kotvy pro tagy. Skutečné binárky nejsou commitnuty jako sledované soubory ve stromu větve. Místo toho každý tag Bin/<version>-<platform> ukazuje na GitHub Release a skutečný archiv spolu se souborem s hashem SHA-256 je k vydání připojen jako asset vydání:

Bin/3.12.8-Unix (tag + GitHub Release)
├── python-3.12.8-Unix.zip
└── python-3.12.8-Unix.zip.hash

Samotný protokol Artifact Handleru není vázán konkrétně na GitHub Releases — pro Git hostingy bez ekvivalentního Releases API podporuje také binárky commitnuté přímo jako sledované soubory ve větvi Bin (označené tagem podle verze/platformy). Tento repozitář používá režim assetů GitHub Release.


⚠️ Klonujte jen větev, kterou potřebujete​

Tento repozitář může obsahovat metadata vydání napříč mnoha verzemi. Assety konkrétní verze vždy stahujte přes její GitHub Release, místo klonování celé historie větve Bin.

gh release download Bin/3.12.8-Unix --repo Embedbits/Artifact-python --pattern '*.zip'

Podporované platformy​

Kód platformyCílTriple python-build-standalone
UnixLinux x86_64 (glibc)x86_64-unknown-linux-gnu
WinWindows x86_64x86_64-pc-windows-msvc
DarwinARMmacOS arm64aarch64-apple-darwin

Každý build je varianta install_only: soběstačná, přenosná distribuce CPythonu s kompletní standardní knihovnou (včetně pip) a bez dalších runtime závislostí nad rámec toho, co potřebuje samotná standardní knihovna.


Zahrnuté komponenty​

KomponentaPopis
python/python.exeHlavní spustitelný soubor interpretu CPython
pipPředinstalovaný, připravený k okamžitému použití
Standardní knihovnaKompletní strom Lib/, tak jak ho dodává python-build-standalone

Použití​

Artefakt se instaluje automaticky během fáze nastavení artefaktů pomocí:

cmake -P Artifacts/Python/ArtifactConfig.cmake

Skript zajistí, že je interpret CPython dostupný, v případě potřeby rozbalí archiv a přidá jej do systémové proměnné PATH pro následující kroky buildu.

Pomocné API pro CMake​

Python_ArtifactInit(${ARTIFACT_BIN_PATH})
Python_GetArtifactVersion(PYTHON_VERSION)

Python_ArtifactInit určí cestu k interpretu pro aktuální hostitelskou platformu a zpřístupní ji jako Python_EXECUTABLE. Python_GetArtifactVersion vrací řetězec s verzí CPythonu (x.y.z), která je aktuálně pro projekt nakonfigurována.


Verzování​

Verze artefaktů přímo odpovídají verzím vydání CPythonu:

3.10.21, 3.11.9, 3.12.8, 3.13.5, ...

Nové verze publikuje Python_Importer.sh v repozitáři GithubArtifactsHandler, který sleduje vydání python-build-standalone, stahuje buildy install_only pro každou podporovanou platformu, přebaluje je do archivů .zip s ověřením SHA-256 a publikuje je jako GitHub Releases označené tagem podle verze a platformy.

Protože python-build-standalone při každém svém (datovaném) vydání znovu publikuje buildy pro všechny aktuálně podporované větve CPythonu, může se stejná verze CPythonu objevit v několika upstream vydáních — importuje se pouze nejnovější build.


Poznámky​

  • Není nutná instalace — build je přenosný a soběstačný; systémový Python není potřeba ani není ovlivněn.
  • Offline použití je podporováno, jakmile je artefakt lokálně v cache.
  • V pipelines Azure DevOps se doporučuje cachovat složku artefaktu, aby se zkrátila doba buildu.

Licence​

CPython je distribuován pod licencí Python Software Foundation License (PSF License). Podrobnosti: https://docs.python.org/3/license.html

Projekt python-build-standalone obsahuje další komponenty třetích stran (OpenSSL, SQLite, libffi, ncurses, readline a další), každou pod její vlastní licencí — úplný seznam najdete v dokumentaci python-build-standalone.


Autoři​

Příspěvky jsou vítány! Otevřete prosím pull request.