Артефакт 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 |
|---|---|---|
Unix | Linux x86_64 (glibc) | x86_64-unknown-linux-gnu |
Win | Windows x86_64 | x86_64-pc-windows-msvc |
DarwinARM | macOS arm64 | aarch64-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.
Автори
- Mr.Nobody — embedbits.com
Запрошуємо до співпраці! Будь ласка, відкрийте pull request.