После замены cx-Oracle==8.3.0 на oracledb==3.4.2 в файле require.txt уровень pip install -r require.txt в моем
Dockerfile увеличился с ~48 секунд до ~614 секунд, и вся работа конвейера сократилась с 5 минут 37 секунд до 14 минут 23 секунд.
Из журнала BuildKit ~557 из этих дополнительных секунд приходится на сборку одного колеса:
Код: Выделить всё
#12 21.32 Building wheels for collected packages: pymongo, oracledb
#12 32.37 Building wheel for oracledb (pyproject.toml): started
#12 220.6 Building wheel for oracledb (pyproject.toml): still running...
#12 479.1 Building wheel for oracledb (pyproject.toml): still running...
#12 565.2 Building wheel for oracledb (pyproject.toml): still running...
#12 589.1 Building wheel for oracledb (pyproject.toml): finished with status 'done'
Что я проверял
- В PyPI oracledb поставляет множество колес Linux (glibc) и колес macOS/Windows, но я не вижу для
колеса musllinux_*, поэтому pip возвращается к исходному коду Alpine. - Базовый образ — python:3.13-alpine3.23 (musl libc). На этапе сборки уже установлены gcc, g++, musl-dev, libffi-dev,
openssl-dev, Cargo, python3-dev и т. д., поэтому сборка исходного кода выполняется успешно — просто медленно. - Со старым cx-Oracle это не было проблемой, поскольку он был установлен в отдельный выделенный RUN pip install
--no-build-isolation cx-Oracle==8.3.0, который Docker BuildKit кэшировал отдельно, поэтому он перестраивался только при изменении его
версии. Теперь oracledb добавлен в общий слой pip install -r require.txt, поэтому любое изменение в
requirements.txt повторно запускает 9-минутную компиляцию.
Как лучше всего избежать этой 9-минутной сборки исходного кода при каждом запуске CI?