Нещодавно я зіткнувся з проблемою при використанні 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