У меня большая библиотека со множеством докторов. Все тесты проходят на моем компьютере. Когда я отправляю изменения в GitHub, GitHub Actions запускает те же тесты в Python 3.8, 3.9, 3.10 и 3.11. Все тесты выполняются корректно на на Python 3.8; однако в Python 3.9, 3.10 и 3.11 я получаю много ошибок следующего типа:
Expected:
[13.0, 12.0, 7.0]
Got:
[np.float64(13.0), np.float64(12.0), np.float64(7.0)]
То есть результаты правильные, но почему-то отображаются внутри «np.float64».
В своем коде я вообще не использую np.float64, поэтому не знаю, почему так происходит. Кроме того, поскольку тесты проходят на моем компьютере, я не знаю, как отладить ошибку, и мне сложно создать минимальный рабочий пример. Есть ли способ снова пройти тесты, не меняя каждый отдельный тест?
🤔 А знаете ли вы, что...
Python имеет множество фреймворков для веб-разработки, такие как Django и Flask.
Это связано с изменением способа печати скаляров в numpy 2:
число 1.х.х:
>>> repr(np.array([1.0])[0])
'1.0'
число 2.х.х:
>>> repr(np.array([1.0])[0])
'np.float64(1.0)'
Вам следует ограничить версию numpy до 1.x.x в вашем файле требований, чтобы убедиться, что вы не установите numpy 2.x.x:
numpy ~> 1.26
(то же, что numpy >= 1.26, == 1.*
, см. этот ответ)
или обновите свой код для работы с numpy 2 и измените его на numpy ~> 2.0
.
Это связано с numpy 2, как упомянул @Dogbert. Вы можете указать формат печати, чтобы избавиться от np.float64
:
array = [np.float64(13.0), np.float64(12.0), np.float64(7.0)]
str_array = [f"{x:.2f}" for x in array]
print(f"[{', '.join(str_array)}]")
numpy позволяет вам контролировать это без понижения версии:
np.set_printoptions(legacy='1.25')
Подробности см. в numpy.set_printoptions.
Об этом также говорится здесь: Изменено представление скаляров NumPy - Примечания к выпуску NumPy 2.0.0