У меня есть приложение 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 году.
Каждый пакет может указывать свои зависимости. В вашем случае в хронологическом порядке произошло следующее:
snowfalke-connector-python==2.7.3
и schemachange==3.4.2
выпускаются, каждый из которых указывает минимальную версию numpy
, поэтому что-то вроде numpy>1.24
, последняя версия numpy — 1.26.4, которая также совместима.pip
по умолчанию всегда будет пытаться выбрать самую последнюю совместимую версию зависимостей, поэтому он выбирает последнюю версию numpy, которая, однако, несовместима, поскольку требования, сформулированные в шаге 1, на самом деле несовместимы с критическими изменениями в numpy, которые разработчики snowfalke-connector-python
и schemachange
не знали об этомЭто нормально? Зависит от вашего определения «нормального». Вы можете возразить, что тот, кто пишет пакет, должен убедиться, что все требования гарантированно работают, поэтому также укажите верхний предел версии, но это можно рассматривать как основанное на мнении. Так что это нормально в том смысле, что такое может случиться и произойдет.
Как лучше всего поступить в такой ситуации сообщите об этом соответствующим сопровождающим пакетов, поскольку они должны исправить это в своих требованиях. Если вы не можете дождаться исправления, вы можете сделать то же самое и попытаться найти комбинацию версий пакета, которая работает самостоятельно.