{"id":49693973,"url":"https://github.com/ngrsoftlab/astra-python-build-utils-image","last_synced_at":"2026-05-07T21:02:13.474Z","repository":{"id":350503152,"uuid":"1033213178","full_name":"NGRsoftlab/Astra-python-build-utils-image","owner":"NGRsoftlab","description":"Проект сборочного образа Python на основе отечественной ОС Astra Linux","archived":false,"fork":false,"pushed_at":"2026-01-29T09:53:19.000Z","size":270,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-04-10T17:37:26.561Z","etag":null,"topics":["astralinux","build","devops","docker","makefile","podman","pre-commit","python","shell"],"latest_commit_sha":null,"homepage":"https://www.ngrsoftlab.ru","language":"Makefile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NGRsoftlab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-08-06T13:19:25.000Z","updated_at":"2026-01-30T07:15:40.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/NGRsoftlab/Astra-python-build-utils-image","commit_stats":null,"previous_names":["ngrsoftlab/astra-python-build-utils-image"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/NGRsoftlab/Astra-python-build-utils-image","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NGRsoftlab%2FAstra-python-build-utils-image","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NGRsoftlab%2FAstra-python-build-utils-image/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NGRsoftlab%2FAstra-python-build-utils-image/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NGRsoftlab%2FAstra-python-build-utils-image/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NGRsoftlab","download_url":"https://codeload.github.com/NGRsoftlab/Astra-python-build-utils-image/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NGRsoftlab%2FAstra-python-build-utils-image/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32755926,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-07T02:14:30.463Z","status":"ssl_error","status_checked_at":"2026-05-07T02:14:29.405Z","response_time":62,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["astralinux","build","devops","docker","makefile","podman","pre-commit","python","shell"],"created_at":"2026-05-07T21:02:12.302Z","updated_at":"2026-05-07T21:02:13.460Z","avatar_url":"https://github.com/NGRsoftlab.png","language":"Makefile","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!-- markdownlint-disable MD033 MD041 --\u003e\n\u003cp\u003e\u003cimg src=\"https://static.tildacdn.com/tild3733-3430-4331-a637-336233396534/logo.svg\" alt=\"NGRSOFTLAB logo\" title=\"NGR\" align=\"right\" height=\"60\" /\u003e\u003c/p\u003e\n\u003c!-- markdownlint-enable MD033 MD041 --\u003e\n\n# Python build utils\n\n\u003c!-- markdownlint-disable MD033 MD041 MD051 --\u003e\n\u003cdiv\u003e\n  \u003ch4 align=\"center\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Dive%20efficiency-99%25-brightgreen.svg?logo=Docker\u0026style=plastic\" alt=\"Dive efficiency\"/\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Made%20with-%E2%9D%A4%EF%B8%8F-9cf?style=plastic\" alt=\"Made with love\"/\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Powered%20by-Docker-blue?logo=Docker\u0026style=plastic\" alt=\"Powered by Docker\"/\u003e\n    \u003cimg src=\"https://shields.io/badge/NGR -Team-yellow?style=plastic\u0026logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjIyLjcgMCA1MS45IDUxLjciPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNzQuNSAwSDYzLjhsMy42IDMuNWMuNy43LjcgMS45IDAgMi43LS43LjctMS45LjctMi42IDBMNTguOSAwSDUzbDE0LjUgMTMuOWMuNy43LjcgMS45IDAgMi43LS43LjctMS45LjctMi42IDBMNDkgMGgtNi44bDI1LjMgMjQuM2MuNy43LjcgMS45IDAgMi43LS43LjctMS45LjctMi42IDBMMzkgMGgtNy43bDM2LjEgMzQuN2MuNy43LjcgMS45IDAgMi42cy0xLjkuNy0yLjYgMEwyOSAwYy0zLjUuNC02LjMgMy40LTYuMyA3djQ0LjdoMTAuNmwtMy42LTMuNGMtLjctLjctLjctMS45IDAtMi42czEuOS0uNyAyLjcgMGw1LjggNmg1LjlMMjkuNyAzNy45Yy0uNy0uNy0uNy0xLjkgMC0yLjcuNy0uNyAxLjktLjcgMi43IDBsMTUuOCAxNi40SDU1TDI5LjggMjcuNGMtLjctLjctLjctMS45IDAtMi43LjctLjcgMS45LS43IDIuNyAwbDI1LjggMjYuOEg2NkwyOS45IDE2LjljLS43LS43LS43LTEuOSAwLTIuNnMxLjktLjcgMi43IDBsMzUuNyAzNy4yYzMuNS0uMyA2LjMtMy4zIDYuMy03VjB6IiBmaWxsPSIjRjhBRDAwIi8+PC9zdmc+\" alt=\"NGR Team\" /\u003e\n  \u003c/h4\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n![Python image](docs/images/logo.svg)\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e \u003csub\u003e Ascii svg art by \u003ca href=\"https://GitHub.com/martinthomson/aasvg\"\u003eaasvg\u003c/a\u003e. \u003c/sub\u003e \u003c/div\u003e\n\n\u003c!-- markdownlint-enable MD033 MD041 MD051 --\u003e\n\n## Description\n\nСреда для сборки контейнера с зависимостями для Python. Основан на [сборочных компонентах Python](https://devguide.python.org/getting-started/setup-building) и таблице соотношения [Debian-Astra](https://wiki.astralinux.ru/pages/viewpage.action?pageId=53646577)\n\nПрисоединяйтесь к нашим социальным сетям:\n\n\u003c!-- markdownlint-disable MD033 --\u003e\n\n\u003cdiv class=\"badges-row-public\"\u003e\n  \u003ch4 align=\"center\"\u003e\n    \u003ca href=\"https://t.me/NGR_Softlab\"\u003e\n      \u003cimg src=\"https://shields.io/badge/ngr-telegram-blue?logo=telegram\u0026style=for-the-badge\" alt=\"NGR Social Telegram\" height=\"40\" /\u003e\n    \u003c/a\u003e\n    \u0026emsp; \u0026emsp; \u0026emsp;\n    \u003ca href=\"https://www.ngrsoftlab.ru/?utm_source=tg\u0026utm_medium=start\" \u003e\n      \u003cimg src=\"https://shields.io/badge/ngr-web--page-yellow?style=for-the-badge\u0026logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjIyLjcgMCA1MS45IDUxLjciPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNzQuNSAwSDYzLjhsMy42IDMuNWMuNy43LjcgMS45IDAgMi43LS43LjctMS45LjctMi42IDBMNTguOSAwSDUzbDE0LjUgMTMuOWMuNy43LjcgMS45IDAgMi43LS43LjctMS45LjctMi42IDBMNDkgMGgtNi44bDI1LjMgMjQuM2MuNy43LjcgMS45IDAgMi43LS43LjctMS45LjctMi42IDBMMzkgMGgtNy43bDM2LjEgMzQuN2MuNy43LjcgMS45IDAgMi42cy0xLjkuNy0yLjYgMEwyOSAwYy0zLjUuNC02LjMgMy40LTYuMyA3djQ0LjdoMTAuNmwtMy42LTMuNGMtLjctLjctLjctMS45IDAtMi42czEuOS0uNyAyLjcgMGw1LjggNmg1LjlMMjkuNyAzNy45Yy0uNy0uNy0uNy0xLjkgMC0yLjcuNy0uNyAxLjktLjcgMi43IDBsMTUuOCAxNi40SDU1TDI5LjggMjcuNGMtLjctLjctLjctMS45IDAtMi43LjctLjcgMS45LS43IDIuNyAwbDI1LjggMjYuOEg2NkwyOS45IDE2LjljLS43LS43LS43LTEuOSAwLTIuNnMxLjktLjcgMi43IDBsMzUuNyAzNy4yYzMuNS0uMyA2LjMtMy4zIDYuMy03VjB6IiBmaWxsPSIjRjhBRDAwIi8+PC9zdmc+\" alt=\"NGR Social Media\" height=\"40\" /\u003e\n    \u003c/a\u003e\n  \u003c/h4\u003e\n\u003c/div\u003e\n\n\u003c!-- markdownlint-enable MD033 --\u003e\n\n## Contents\n\n- [Python build utils](#python-build-utils)\n  - [Description](#description)\n  - [Contents](#contents)\n  - [What it is](#what-it-is)\n  - [How to work with](#how-to-work-with)\n    - [Build variables](#build-variables)\n  - [Assembly concept](#assembly-concept)\n    - [Assembly variables](#assembly-variables)\n    - [How test local](#how-test-local)\n  - [How to install it](#how-to-install-it)\n  - [Miscellaneous](#miscellaneous)\n\n## [What it is](#contents)\n\nDockerfile для сборки Python, на основе отечественной ОС AstraLinux\n\n## [How to work with](#contents)\n\nДля начала работы необходимо установить [pre-commit](https://pre-commit.com/) и хуки\n\n```console\n$ pip install pre-commit\n$ pre-commit --version\n\npre-commit 4.2.0\n\n$ pre-commit install\n\npre-commit installed at .git/hooks/pre-commit\npre-commit installed at .git/hooks/commit-msg\npre-commit installed at .git/hooks/pre-push\n```\n\n\u003e [!warning]\n\u003e Чтобы проверить свои изменения, воспользуйтесь командой `pre-commit run --all-files`.\n\u003e Чтобы проверить конкретную задачу, воспользуетесь командой `pre-commit run \u003ctarget\u003e --all-files`.\n\u003e Если Вы понимаете что творите и хотите пропустить проверку `pre-commit`-ом воспользуйтесь `--no-verify`, пример `git commit -m \"Добавил изменения и не хочу проверки\" --no-verify`\n\nСобрать образ `Astra Linux based`\n\n```shell\n## Export Python build utils version for 1.7.5\nexport ASTRA_VERSION='1.7.5-slim'\nexport PYTHON_BUILD_UTILS_VERSION=\"1.0.0-astra${ASTRA_VERSION}\"\n\n## Python build utils image: 367MB\ndocker build \\\n    --progress=plain \\\n    --no-cache \\\n    -t python-build-utils:\"${PYTHON_BUILD_UTILS_VERSION}\" \\\n    .\n```\n\n### [Build variables](#contents)\n\n| Имя              | Значение по умолчанию |  Тип   |                                                                                    Описание |\n| :--------------- | :-------------------: | :----: | ------------------------------------------------------------------------------------------: |\n| `image_registry` |          ''           | string | Адрес до реестра образа. Например: `--build-arg image_registry=my-container-registry:1111/` |\n| `image_name`     |         astra         | string |                                                                                 Имя образа. |\n| `image_version`  |      1.7.5-slim       | string |                                                                              Версия образа. |\n\n\u003c!-- markdownlint-disable MD033 --\u003e\n\u003cdiv align=\"center\"\u003e \u003csub\u003e Таблица 1. Переопределяемые аргументы для сборки образа. \u003c/sub\u003e \u003c/div\u003e\n\u003cp\u003e\u0026nbsp;\u003c/p\u003e\n\u003c!-- markdownlint-enable MD033 --\u003e\n\n\u003e [!tip]\n\u003e Особенности сборки:\n\u003e вспомогательный [ресурс](https://www.build-python-from-source.com) по сборке\n\n## [Assembly concept](#contents)\n\n- Представление [Makefile-а](init/Makefile.default.mk), который используется в CI-е\n- Представление [Makefile-а](init/Makefile.svace.mk), который используется в анализатором Svace\n\n### [Assembly variables](#contents)\n\nДанные переменные могут использоваться как для локальной сборки, так и для сборки через CI. Данные переменные применимы и оказывают эффект на [скрипт](init/Makefile.default.mk). Данный скрипт работает в следующих режимах:\n\n- Сборка `python` с прохождением всех тестов сборки\n- Сборка `python` без прохождением всех тестов сборки\n\n| Имя                          |        Значение по умолчанию        |    Тип     |                                                                                                                                                                                                                                                                    Описание |\n| :--------------------------- | :---------------------------------: | :--------: | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |\n| `PYTHON_VERSION`             |       `${CI_COMMIT_REF_NAME}`       | stringspec | Ветка/тег собираемого интерпретатора. Если не указно, то использует [предопределенные переменные GitLab-a](https://docs.gitlab.com/ci/variables/predefined_variables). Если предопределенная переменная отсутствует, то используется значение по умолчанию: `test-version`. |\n| `MAKEFILE_INSTALL_DIR`       |             /usr/local              |   string   |                                                                                                                                                                                                  Значение пути, куда будет установлен конечная версия сборки, после сборки. |\n| `MAKEFILE_NUMBER_OF_CPUS`    |                 20                  |  integer   |                                                                                              Количество ядер `CPU`, которое будет использовано по умолчанию. Если значение велико для конкретной сборки, то можно проверить максимум посредством команды `nproc --ignore 1` |\n| `MAKEFILE_PYTHON_DEPLOY_DIR` | [тут](init/Makefile.default.mk#L78) | stringspec |                                                                                                                                                                         Название директории, куда будет экспортирован артефакт для последующего деплоя в реестр артефактов. |\n| `MAKEFILE_SKIP_TEST`         |                FALSE                |   string   |                                                                                                     Включить/Отключить пропуск тестов. По умолчанию тесты включены. Чтобы отключить необходимо экспортировать переменную в режиме `TRUE`: `export MAKEFILE_SKIP_TEST=TRUE`. |\n| `LIBCRYPTO_PATH`             | [тут](init/Makefile.default.mk#L74) | stringspec |                                                                                                                                                                            Путь до общего объекта библиотеки `libcrypto.so*`. В последующем он будет импортирован в сборку. |\n| `LIBSSL_PATH`                | [тут](init/Makefile.default.mk#L75) | stringspec |                                                                                                                                                                               Путь до общего объекта библиотеки `libssl.so*`. В последующем он будет импортирован в сборку. |\n\n\u003c!-- markdownlint-disable MD033 --\u003e\n\u003cdiv align=\"center\"\u003e \u003csub\u003e Таблица 2. Переопределяемые аргументы для сборки в управлении Makefile. \u003c/sub\u003e \u003c/div\u003e\n\u003cp\u003e\u0026nbsp;\u003c/p\u003e\n\u003c!-- markdownlint-enable MD033 --\u003e\n\n### [How test local](#contents)\n\n1. Склонировать репозиторий с компилятором\n2. Войти в интерактивную среду данного образа: `docker run -it --rm -v \"$(pwd):/build\" -w /build python-build-utils:1.0.0-astra1.7.5 bash`\n3. Объявить [необходимые](#assembly-variables) переменные, чтобы сформировать окружение для работы скрипта\n4. Перенести `Makefile` в директорию с компилятором: `cp ./init/Makefile /path/to/python/repo/Makefile-build`\n5. Запустить сборщик: `make -f Makefile-build all`\n\nПример запуска сборщика\n\n```shell\n## Если необходимо пропустить тесты\nexport MAKEFILE_SKIP_TEST=TRUE\nmake -f Makefile-build all\n```\n\n## [How to install it](#contents)\n\n**Шаги по установке продукта**:\n\n1. Скачать необходимый компилятор из реестра артефактов\n2. Удалить старые бинарные файлы и экспортировать новые `tar -C /usr/local --strip-components 1 -xzf python-v3.13.2-linux-amd64.tar.gz`\n3. Экспортировать в переменные среды библиотек новый путь `export LD_LIBRARY_PATH=\"${LD_LIBRARY_PATH}:/usr/local/ssl\"`\n4. Проверить версию установленного бинарного файла `python3 --version`\n\nПример:\n\n```shell\n## Скачиваем артефакт\ncurl --silent \\\n    https://example.registry.com/python/python-v3.13.2-linux-amd64.tar.gz | tar -C \"/usr/local\" --strip-components 1 -zx\n\n## Экспортируем динамических/разделяемых библиотек для линкера\nexport LD_LIBRARY_PATH=\"${LD_LIBRARY_PATH}:/usr/local/ssl\"\n\n## В качестве проверки проверяем версию продукта\npython3 --version\npip3 --version\n\n## Попробуем установить пакет\npip3 install boto3\n\n## Если необходимо очистить Python, то необходимо изучить уровень поставляемой вложенности\ntar --exclude=\"*/*/*/*\" -tf python-v3.13.2-linux-amd64.tar.gz\n\n## Получаем что-то вроде такого\nrm -rfv /usr/local/bin/pydoc3* \\\n        /usr/local/bin/pip3* \\\n        /usr/local/bin/python3* \\\n        /usr/local/bin/idle* \\\n        /usr/local/include/python3.13 \\\n        /usr/local/lib/python3.13 \\\n        /usr/local/lib/pkgconfig/python-* \\\n        /usr/local/lib/pkgconfig/python3* \\\n        /usr/local/lib/libpython3.13.a \\\n        /usr/local/share/man/man1/python3.1 \\\n        /usr/local/share/man/man1/python3.13.2\n\n## Также можно протестировать модули\nNUMBER_OF_CPUS=$(nproc --ignore 1)\npython3 -m test -j \"${NUMBER_OF_CPUS}\"\n\n## Для теста test.test_asyncio.test_base_events test_socket\n## потребуется дополнительно установить пакет:\napt update \u0026\u0026 apt install -y netbase\n\n## Ожидаемый вывод после тестирования\ncat \u003c\u003cEOFTEST\n== Tests result: SUCCESS ==\n\n36 tests skipped:\n    test.test_asyncio.test_windows_events\n    test.test_asyncio.test_windows_utils test.test_gdb.test_backtrace\n    test.test_gdb.test_cfunction test.test_gdb.test_cfunction_full\n    test.test_gdb.test_misc test.test_gdb.test_pretty_print\n    test_android test_apple test_asdl_parser test_clinic test_ctypes\n    test_dbm_gnu test_dbm_ndbm test_dbm_sqlite3 test_devpoll\n    test_free_threading test_generated_cases test_idle test_ioctl\n    test_kqueue test_launcher test_msvcrt test_readline test_sqlite3\n    test_stable_abi_ctypes test_startfile test_tcl test_tkinter\n    test_ttk test_ttk_textonly test_turtle test_winapi\n    test_winconsoleio test_winreg test_wmi\n\n9 tests skipped (resource denied):\n    test_curses test_peg_generator test_pyrepl test_smtpnet\n    test_socketserver test_urllib2net test_urllibnet test_winsound\n    test_zipfile64\n\n435 tests OK.\n\nTotal duration: 3 min 1 sec\nTotal tests: run=42,375 skipped=2,141\nTotal test files: run=471/480 skipped=36 resource_denied=9\nResult: SUCCESS\nEOFTEST\n```\n\n## [Miscellaneous](#contents)\n\nЛого для проекта создано при помощи [`aasvg`](https://github.com/martinthomson/aasvg) проекта. Вы можете создать такое же и/или модифицировать имеющееся. Для этого воспользуйтесь [сайтом](https://patorjk.com/software/taag/#p=display\u0026f=Doom) или установите `figlet`. Если Вы используете способ с установкой `figlet`, то вдобавок необходимо сказать необходимый шрифт, например я использую `Doom`. Далее, необходимо воспользоваться `aasvg` и конвертировать `ascii` арт в `svg`. Обратите внимание - по умолчанию будет svg в красном цвете, чтобы изменить цвет, необходимо изменить его определение [тут](docs/images/logo.svg#L76)\n\n```console\n$ curl 'http://www.figlet.org/fonts/doom.flf' -o /usr/share/figlet/doom.flf\n$ curl 'http://www.figlet.org/fonts/larry3d.flf' -o /usr/share/figlet/larry3d.flf\n$ figlet -f doom 'Python Build Utils'\n\n______      _   _                ______       _ _     _ _   _ _   _ _\n| ___ \\    | | | |               | ___ \\     (_| |   | | | | | | (_| |\n| |_/ _   _| |_| |__   ___  _ __ | |_/ /_   _ _| | __| | | | | |_ _| |___\n|  __| | | | __| '_ \\ / _ \\| '_ \\| ___ | | | | | |/ _` | | | | __| | / __|\n| |  | |_| | |_| | | | (_) | | | | |_/ | |_| | | | (_| | |_| | |_| | \\__ \\\n\\_|   \\__, |\\__|_| |_|\\___/|_| |_\\____/ \\__,_|_|_|\\__,_ \\___/ \\__|_|_|___/\n       __/ |\n      |___/\n\n$ aasvg --source --embed \u003c ./docs/ascii.txt \u003e docs/images/logo.svg\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fngrsoftlab%2Fastra-python-build-utils-image","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fngrsoftlab%2Fastra-python-build-utils-image","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fngrsoftlab%2Fastra-python-build-utils-image/lists"}