Маловероятно, что это предупреждение об устаревании вызывает проблему.По умолчанию все предупреждения просто распечатывают сообщение и затем продолжают.Предупреждения можно рассматривать как исключения, но тогда вместо текста предупреждения вы увидите трассировку стека.Предупреждения об устаревании предназначены для разработчиков, чтобы сообщить им, что их библиотека сломается для будущих выпусков Python.Они не предназначены для конечных пользователей, так как код все еще отлично работает.В данном случае, согласно предупреждению, from collections import Mapping, defaultdict
все еще работает в вашей версии python (3.7), но не работает в python 3.8.
Таким образом, это предупреждение вряд ли будет источникомпроблема.Это происходит потому, что sklearn изменяет фильтры предупреждений по умолчанию, чтобы пользователи могли видеть предупреждения об устаревании, выданные sklearn.Предупреждения не изменяют поток выполнения, если они не будут рассматриваться как ошибки.Чтобы убедиться, что предупреждение не является проблемой, попробуйте запустить программу в этом жгуте.Это довольно странно, но необходимо остановить sklearn, переопределяя фильтры предупреждений по умолчанию.Поиграв со значениями фильтра предупреждений, вы сможете увидеть, что предупреждение об устаревании не является источником вашей проблемы.
import warnings
from warnings import (
filterwarnings as original_filterwarnings,
simplefilter as original_simplefilter
)
def ignore_filterwarnings(*args, **kwargs):
pass
def ignore_simplefilter(*args, **kwargs):
pass
warnings.filterwarnings = ignore_filterwarnings
warnings.simplefilter = ignore_simplefilter
# no imports of sklearn should occur before the previous two lines (otherwise sklearn
# will get to use the original functions).
with warnings.catch_warnings():
original_simplefilter("ignore") # or "error" to see the difference
from my_main_module import main
main()