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