Нещодавно я зіткнувся з проблемою при використанні pip«s -Iпрапор , який я хотів де - небудь документ:
-Iне буде видаляти наявний пакет перед тим, як продовжити; він просто встановить його поверх старої. Це означає, що будь-які файли, які слід видалити між версіями, замість цього залишаться на місці. Це може спричинити дивну поведінку, якщо ці файли діляться іменами з іншими встановленими модулями.
Наприклад, скажімо, що існує пакет з іменем package. В одному з packageфайлів s вони використовують import datetime. Тепер package@2.0.0це вказує на стандартний datetimeмодуль бібліотеки , але в package@3.0.0, вони додали локальну datetime.pyяк заміну для стандартної версії бібліотеки (з будь-якої причини).
Тепер скажемо, що я бігаю pip install package==3.0.0, але потім зрозумію, що дійсно хотів версії 2.0.0. Якщо я зараз запущу pip install -I package==2.0.0, старий datetime.pyфайл не буде видалений, тому будь-які дзвінки до import datetimeімпортуватимуть неправильний модуль.
У моєму випадку це виявилося дивними синтаксичними помилками, оскільки до нової версії пакету додано файл, сумісний лише з Python 3, і коли я знизив версії пакета для підтримки Python 2, я продовжував імпортувати модуль, єдиний у Python-3.
Виходячи з цього, я б стверджував, що видалення старого пакету завжди бажано використовувати -Iпід час оновлення встановлених версій пакета.
pip install MySQL_python==1.8.9