Обновление зависимостей пакета Python из файла require.txt

У меня есть приложение Python с примерно 70 пакетами в файле require.txt.

Все работало нормально, но внезапно snowfalke-connector-python==2.7.3 и schemachange==3.4.2 начали устанавливать numpy==2.0.0, в то время как днем ​​раньше они устанавливали numpy==1.26.4, а с сегодняшнего дня они устанавливают numpy==2.0.0. Это приводит к проблеме совместимости с Pandas, поскольку мое приложение выдает следующие ошибки.

    from pandas._libs.interval import Interval
  File "pandas/_libs/interval.pyx", line 1, in init pandas._libs.interval
ValueError: numpy.dtype size changed, may indicate binary incompatibility. Expected 96 from C header, got 88 from PyObject
  • Если я добавлю pandas== 2.2.2 или другую последнюю версию, возникнут другие проблемы совместимости.

  • На данный момент я запускаю свое приложение, ограничив numpy до 1.26.4.

  • Я хочу понять, почему такое могло произойти, и нормально ли это в питоне?

  • Как лучше всего поступить в такой ситуации.

🤔 А знаете ли вы, что...
Python был создан Гвидо ван Россумом и впервые выпущен в 1991 году.


69
1

Ответ:

Решено

Каждый пакет может указывать свои зависимости. В вашем случае в хронологическом порядке произошло следующее:

  1. snowfalke-connector-python==2.7.3 и schemachange==3.4.2 выпускаются, каждый из которых указывает минимальную версию numpy, поэтому что-то вроде numpy>1.24, последняя версия numpy — 1.26.4, которая также совместима.
  2. numpy выпускает версию 2.0, внося критические изменения в свой API (отсюда, вероятно, и увеличение основной версии)
  3. Вы пытаетесь установить, pip по умолчанию всегда будет пытаться выбрать самую последнюю совместимую версию зависимостей, поэтому он выбирает последнюю версию numpy, которая, однако, несовместима, поскольку требования, сформулированные в шаге 1, на самом деле несовместимы с критическими изменениями в numpy, которые разработчики snowfalke-connector-python и schemachange не знали об этом

Это нормально? Зависит от вашего определения «нормального». Вы можете возразить, что тот, кто пишет пакет, должен убедиться, что все требования гарантированно работают, поэтому также укажите верхний предел версии, но это можно рассматривать как основанное на мнении. Так что это нормально в том смысле, что такое может случиться и произойдет.

Как лучше всего поступить в такой ситуации сообщите об этом соответствующим сопровождающим пакетов, поскольку они должны исправить это в своих требованиях. Если вы не можете дождаться исправления, вы можете сделать то же самое и попытаться найти комбинацию версий пакета, которая работает самостоятельно.