Перейти до основного вмісту

Артефакт Python

Портативний самодостатній дистрибутив CPython — еталонної реалізації мови програмування Python, зібраний із проєкту python-build-standalone (підтримується Astral). Цей репозиторій використовується Embedbits Platform Artifact Handler для пошуку, завантаження, перевірки та налаштування інтерпретатора Python в подальших embedded-інструментах збірки (скрипти збірки, генератори коду, утиліти прошивання/тестування та подібні завдання, яким потрібен Python без залежності від того, що встановлено на хост-машині).

Кожна гілка в цьому репозиторії відіграє окрему роль, що забезпечує точний контроль версій і відтворювані збірки в різних проєктах.


Вміст репозиторію​

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

Роль у платформі​

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 у подальших проєктах посилається на цей репозиторій як на Git submodule. Під час конфігурації CMake він зчитує ArtifactConfig.cmake, щоб визначити, який реліз завантажувати, а потім завантажує та перевіряє відповідний бінарний архів із ресурсів GitHub Release цього тега.


Як публікуються бінарні файли​

Сама гілка Bin завжди містить лише порожні коміти — по одному на кожну опубліковану версію — які використовуються виключно як якорі для тегів. Власне бінарні файли не комітяться як відстежувані файли в дереві гілки. Натомість кожен тег Bin/<version>-<platform> вказує на GitHub Release, а справжній архів разом із файлом хешу SHA-256 додається до цього релізу як ресурси релізу:

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

Сам протокол Artifact Handler не прив'язаний саме до GitHub Releases — він також підтримує бінарні файли, закомічені безпосередньо як відстежувані файли в Bin (з тегами за версією/платформою), для Git-хостингів без еквівалентного Releases API. Цей репозиторій використовує режим ресурсів GitHub Release.


⚠️ Клонуйте лише потрібну гілку​

Цей репозиторій може містити метадані релізів для багатьох версій. Завжди отримуйте ресурси конкретної версії через її GitHub Release, а не клонуючи всю історію гілки Bin.

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

Підтримувані платформи​

Код платформиЦільTriple python-build-standalone
UnixLinux x86_64 (glibc)x86_64-unknown-linux-gnu
WinWindows x86_64x86_64-pc-windows-msvc
DarwinARMmacOS arm64aarch64-apple-darwin

Кожна збірка — це варіант install_only: самодостатній портативний дистрибутив CPython з повною стандартною бібліотекою (включно з pip) і без додаткових runtime-залежностей, окрім тих, що потрібні самій стандартній бібліотеці.


Складові​

КомпонентОпис
python/python.exeОсновний виконуваний файл інтерпретатора CPython
pipПопередньо встановлений, готовий до використання одразу
Стандартна бібліотекаПовне дерево Lib/, як постачається python-build-standalone

Використання​

Артефакт встановлюється автоматично на етапі налаштування артефактів за допомогою:

cmake -P Artifacts/Python/ArtifactConfig.cmake

Скрипт забезпечує наявність інтерпретатора CPython, за потреби розпаковує архів і додає його до системного PATH для наступних кроків збірки.

Допоміжний API CMake​

Python_ArtifactInit(${ARTIFACT_BIN_PATH})
Python_GetArtifactVersion(PYTHON_VERSION)

Python_ArtifactInit визначає шлях до інтерпретатора для поточної хост-платформи та надає його як Python_EXECUTABLE. Python_GetArtifactVersion повертає рядок версії CPython (x.y.z), налаштованої на цей момент для проєкту.


Версіонування​

Версії артефакту безпосередньо відповідають версіям релізів CPython:

3.10.21, 3.11.9, 3.12.8, 3.13.5, ...

Нові версії публікує Python_Importer.sh у репозиторії GithubArtifactsHandler, який відстежує релізи python-build-standalone, завантажує збірки install_only для кожної підтримуваної платформи, перепаковує їх в архіви .zip із перевіркою SHA-256 і публікує як GitHub Releases з тегами за версією та платформою.

Оскільки python-build-standalone у кожному своєму релізі (за датою) повторно публікує збірки для всіх наразі підтримуваних гілок CPython, та сама версія CPython може з'являтися в кількох оригінальних релізах — імпортується лише найновіша збірка.


Примітки​

  • Встановлення не потрібне — збірка портативна й самодостатня; системний Python не потрібен і не зачіпається.
  • Офлайн-використання підтримується після локального кешування артефакту.
  • У pipelines Azure DevOps для скорочення часу збірки рекомендовано кешувати теку артефакту.

Ліцензія​

CPython розповсюджується за ліцензією Python Software Foundation (PSF License). Докладніше: https://docs.python.org/3/license.html

Проєкт python-build-standalone містить додаткові сторонні компоненти (OpenSSL, SQLite, libffi, ncurses, readline та інші), кожен зі своєю ліцензією — повний список дивіться в документації python-build-standalone.


Автори​

Запрошуємо до співпраці! Будь ласка, відкрийте pull request.