Среда для сборки контейнера с зависимостями для Python. Основан на сборочных компонентах Python и таблице соотношения Debian-Astra
Присоединяйтесь к нашим социальным сетям:
Dockerfile для сборки Python, на основе отечественной ОС AstraLinux
Для начала работы необходимо установить pre-commit и хуки
$ pip install pre-commit
$ pre-commit --version
pre-commit 4.2.0
$ pre-commit install
pre-commit installed at .git/hooks/pre-commit
pre-commit installed at .git/hooks/commit-msg
pre-commit installed at .git/hooks/pre-push
Warning
Чтобы проверить свои изменения, воспользуйтесь командой pre-commit run --all-files
.
Чтобы проверить конкретную задачу, воспользуетесь командой pre-commit run <target> --all-files
.
Если Вы понимаете что творите и хотите пропустить проверку pre-commit
-ом воспользуйтесь --no-verify
, пример git commit -m "Добавил изменения и не хочу проверки" --no-verify
Собрать образ Astra Linux based
## Export Python build utils version for 1.7.5
export ASTRA_VERSION='1.7.5-slim'
export PYTHON_BUILD_UTILS_VERSION="1.0.0-astra${ASTRA_VERSION}"
## Python build utils image: 367MB
docker build \
--progress=plain \
--no-cache \
-t python-build-utils:"${PYTHON_BUILD_UTILS_VERSION}" \
.
Имя | Значение по умолчанию | Тип | Описание |
---|---|---|---|
image_registry |
'' | string | Адрес до реестра образа. Например: --build-arg image_registry=my-container-registry:1111/ |
image_name |
astra | string | Имя образа. |
image_version |
1.7.5-slim | string | Версия образа. |
Tip
Особенности сборки: вспомогательный ресурс по сборке
- Представление Makefile-а, который используется в CI-е
- Представление Makefile-а, который используется в анализатором Svace
Данные переменные могут использоваться как для локальной сборки, так и для сборки через CI. Данные переменные применимы и оказывают эффект на скрипт. Данный скрипт работает в следующих режимах:
- Сборка
python
с прохождением всех тестов сборки - Сборка
python
без прохождением всех тестов сборки
Имя | Значение по умолчанию | Тип | Описание |
---|---|---|---|
PYTHON_VERSION |
${CI_COMMIT_REF_NAME} |
stringspec | Ветка/тег собираемого интерпретатора. Если не указно, то использует предопределенные переменные GitLab-a. Если предопределенная переменная отсутствует, то используется значение по умолчанию: test-version . |
MAKEFILE_INSTALL_DIR |
/usr/local | string | Значение пути, куда будет установлен конечная версия сборки, после сборки. |
MAKEFILE_NUMBER_OF_CPUS |
20 | integer | Количество ядер CPU , которое будет использовано по умолчанию. Если значение велико для конкретной сборки, то можно проверить максимум посредством команды nproc --ignore 1 |
MAKEFILE_PYTHON_DEPLOY_DIR |
тут | stringspec | Название директории, куда будет экспортирован артефакт для последующего деплоя в реестр артефактов. |
MAKEFILE_SKIP_TEST |
FALSE | string | Включить/Отключить пропуск тестов. По умолчанию тесты включены. Чтобы отключить необходимо экспортировать переменную в режиме TRUE : export MAKEFILE_SKIP_TEST=TRUE . |
LIBCRYPTO_PATH |
тут | stringspec | Путь до общего объекта библиотеки libcrypto.so* . В последующем он будет импортирован в сборку. |
LIBSSL_PATH |
тут | stringspec | Путь до общего объекта библиотеки libssl.so* . В последующем он будет импортирован в сборку. |
- Склонировать репозиторий с компилятором
- Войти в интерактивную среду данного образа:
docker run -it --rm -v "$(pwd):/build" -w /build python-build-utils:1.0.0-astra1.7.5 bash
- Объявить необходимые переменные, чтобы сформировать окружение для работы скрипта
- Перенести
Makefile
в директорию с компилятором:cp ./init/Makefile /path/to/python/repo/Makefile-build
- Запустить сборщик:
make -f Makefile-build all
Пример запуска сборщика
## Если необходимо пропустить тесты
export MAKEFILE_SKIP_TEST=TRUE
make -f Makefile-build all
Шаги по установке продукта:
- Скачать необходимый компилятор из реестра артефактов
- Удалить старые бинарные файлы и экспортировать новые
tar -C /usr/local --strip-components 1 -xzf python-v3.13.2-linux-amd64.tar.gz
- Экспортировать в переменные среды библиотек новый путь
export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/local/ssl"
- Проверить версию установленного бинарного файла
python3 --version
Пример:
## Скачиваем артефакт
curl --silent \
https://example.registry.com/python/python-v3.13.2-linux-amd64.tar.gz | tar -C "/usr/local" --strip-components 1 -zx
## Экспортируем динамических/разделяемых библиотек для линкера
export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/local/ssl"
## В качестве проверки проверяем версию продукта
python3 --version
pip3 --version
## Попробуем установить пакет
pip3 install boto3
## Если необходимо очистить Python, то необходимо изучить уровень поставляемой вложенности
tar --exclude="*/*/*/*" -tf python-v3.13.2-linux-amd64.tar.gz
## Получаем что-то вроде такого
rm -rfv /usr/local/bin/pydoc3* \
/usr/local/bin/pip3* \
/usr/local/bin/python3* \
/usr/local/bin/idle* \
/usr/local/include/python3.13 \
/usr/local/lib/python3.13 \
/usr/local/lib/pkgconfig/python-* \
/usr/local/lib/pkgconfig/python3* \
/usr/local/lib/libpython3.13.a \
/usr/local/share/man/man1/python3.1 \
/usr/local/share/man/man1/python3.13.2
## Также можно протестировать модули
NUMBER_OF_CPUS=$(nproc --ignore 1)
python3 -m test -j "${NUMBER_OF_CPUS}"
## Для теста test.test_asyncio.test_base_events test_socket
## потребуется дополнительно установить пакет:
apt update && apt install -y netbase
## Ожидаемый вывод после тестирования
cat <<EOFTEST
== Tests result: SUCCESS ==
36 tests skipped:
test.test_asyncio.test_windows_events
test.test_asyncio.test_windows_utils test.test_gdb.test_backtrace
test.test_gdb.test_cfunction test.test_gdb.test_cfunction_full
test.test_gdb.test_misc test.test_gdb.test_pretty_print
test_android test_apple test_asdl_parser test_clinic test_ctypes
test_dbm_gnu test_dbm_ndbm test_dbm_sqlite3 test_devpoll
test_free_threading test_generated_cases test_idle test_ioctl
test_kqueue test_launcher test_msvcrt test_readline test_sqlite3
test_stable_abi_ctypes test_startfile test_tcl test_tkinter
test_ttk test_ttk_textonly test_turtle test_winapi
test_winconsoleio test_winreg test_wmi
9 tests skipped (resource denied):
test_curses test_peg_generator test_pyrepl test_smtpnet
test_socketserver test_urllib2net test_urllibnet test_winsound
test_zipfile64
435 tests OK.
Total duration: 3 min 1 sec
Total tests: run=42,375 skipped=2,141
Total test files: run=471/480 skipped=36 resource_denied=9
Result: SUCCESS
EOFTEST
Лого для проекта создано при помощи aasvg
проекта. Вы можете создать такое же и/или модифицировать имеющееся. Для этого воспользуйтесь сайтом или установите figlet
. Если Вы используете способ с установкой figlet
, то вдобавок необходимо сказать необходимый шрифт, например я использую Doom
. Далее, необходимо воспользоваться aasvg
и конвертировать ascii
арт в svg
. Обратите внимание - по умолчанию будет svg в красном цвете, чтобы изменить цвет, необходимо изменить его определение тут
$ curl 'http://www.figlet.org/fonts/doom.flf' -o /usr/share/figlet/doom.flf
$ curl 'http://www.figlet.org/fonts/larry3d.flf' -o /usr/share/figlet/larry3d.flf
$ figlet -f doom 'Python Build Utils'
______ _ _ ______ _ _ _ _ _ _ _ _
| ___ \ | | | | | ___ \ (_| | | | | | | | (_| |
| |_/ _ _| |_| |__ ___ _ __ | |_/ /_ _ _| | __| | | | | |_ _| |___
| __| | | | __| '_ \ / _ \| '_ \| ___ | | | | | |/ _` | | | | __| | / __|
| | | |_| | |_| | | | (_) | | | | |_/ | |_| | | | (_| | |_| | |_| | \__ \
\_| \__, |\__|_| |_|\___/|_| |_\____/ \__,_|_|_|\__,_ \___/ \__|_|_|___/
__/ |
|___/
$ aasvg --source --embed < ./docs/ascii.txt > docs/images/logo.svg