Я недавно столкнулся с проблемой при использовании pip
'-I
флага, который я хотел где-то документировать:
-I
будет не удалить существующий пакет перед продолжением; он просто установит его поверх старого. Это означает, что любые файлы, которые должны быть удалены между версиями, будут оставаться на месте. Это может вызвать странное поведение, если эти файлы имеют общие имена с другими установленными модулями.
Например, допустим, есть пакет с именем package
. В одном из файлов package
они используют 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
при обновлении версий установленных пакетов.