Короткий ответ
Единственного правильного решения нет: воспроизводимость окружения можно обеспечить через фиксацию версий в requirements/lock-файле, через контейнеризацию (Docker) или через более лёгкие практики вроде записи версий ключевых библиотек в сам отчёт — выбор зависит от критичности результата и ресурсов команды на поддержку инфраструктуры.
Как это работает подробнее
разные версии pandas/numpy могут менять поведение операций (например, copy-on-write, обработка пропусков в groupby, порядок сортировки) даже без изменений в коде проекта; фиксация версий (requirements.txt с точными версиями или lock-файл) гарантирует, что окружение, в котором код тестировался, воспроизводимо на другой машине или через время.
Пример кода
Пример на Python
import pandas as pd
import numpy as np
import random
SEED = 42
random.seed(SEED)
np.random.seed(SEED)
print('pandas:', pd.__version__)
print('numpy:', np.__version__)Что использовать на практике
- На практике. для разовых исследовательских расчётов может быть достаточно явно зафиксировать seed и записать версии библиотек в начале отчёта (pd.__version__, np.__version__); для регулярных продакшен-отчётов и моделей, влияющих на решения, обычно оправдано использовать контейнеризацию или строгий lock-файл с автоматической проверкой при каждом запуске.
- Проверка. сравнение зафиксированных в отчёте версий библиотек с версиями в окружении, где отчёт воспроизводится повторно (например, через полгода), помогает быстро выявить расхождение как источник отличий в результате, прежде чем подозревать ошибку в логике расчёта.
Подводные камни
- Частые ошибки. фиксируют только seed случайности, игнорируя, что сама логика операций pandas/numpy может незаметно измениться между минорными версиями; тратят непропорционально много времени на выстраивание полной инфраструктуры воспроизводимости для разового исследовательского анализа, который не будет переиспользоваться.