Это происходит потому, что у вас есть два канала (conda-forge и defaults), каждый из которых содержит NumPy (и его зависимости), но, возможно, с разными номерами версий / сборок.
Например, допустим, вы хотите установить SciPy (зависит от NumPy), а состояние мира:
- conda-forge: NumPy v1.14 и SciPy v1.0
- по умолчанию: NumPy v1.15 и SciPy v1.0
И у вас есть conda-forge выше значений по умолчанию в вашем порядке каналов. Если вы скажете conda install scipy
, то Conda получит SciPy из conda-forge (потому что это самый большой номер версии). При сканировании зависимостей SciPy он заметит, что по умолчанию доступна более новая версия NumPy. Считая, что это полезно, Conda установит более новую версию NumPy по умолчанию, даже если она уже была установлена из conda-forge. Если есть пакеты, от которых зависит NumPy, то их необходимо понизить, чтобы это работало, пусть будет так.
Говоря вместо этого, conda install scipy numpy
или conda config --add pinned_packages conda-forge::numpy
вы пропускаете поиск зависимостей для этой части графика, что затем заставляет решатель Conda переходить на другой канал.
Это сравнительно простой пример, и он определенно не охватывает все странные крайние случаи, которые возникают ежедневно.
Тем не менее, Conda v4.6 (которая еще не вышла) добавит понятие "строгий приоритет канала". Это будет гарантировать, что решатель ищет пакеты в порядке канала, указанном первым, и только переходит к другому каналу, если зависимость не может быть найдена.
Это решит многие из этих безудержных проблем с обновлением / понижением, с которыми мы все жили.