Niedawno wpadł problem przy korzystaniu pip
„s -I
flagę że chciałem gdzieś dokumentu:
-I
będzie nie odinstalować istniejący pakiet przed postępowaniem; po prostu zainstaluje go na starym. Oznacza to, że wszystkie pliki, które powinny zostać usunięte między wersjami, pozostaną na miejscu. Może to powodować dziwne zachowanie, jeśli pliki te mają wspólne nazwy z innymi zainstalowanymi modułami.
Załóżmy na przykład, że istnieje pakiet o nazwie package
. W jednym z package
plików używają import datetime
. Teraz, w package@2.0.0
, wskazuje to na standardowy datetime
moduł biblioteki , ale w package@3.0.0
dodali lokalny datetime.py
jako zamiennik standardowej wersji biblioteki (z dowolnego powodu).
Powiedzmy teraz, że uruchamiam pip install package==3.0.0
, ale potem zdaję sobie sprawę, że naprawdę chciałem wersji 2.0.0
. Jeśli teraz uruchomię pip install -I package==2.0.0
, stary datetime.py
plik nie zostanie usunięty, więc wszelkie wywołania do import datetime
zaimportują niewłaściwy moduł.
W moim przypadku objawiało się to dziwnymi błędami składniowymi, ponieważ nowsza wersja pakietu dodała plik, który był zgodny tylko z Python 3, a kiedy obniżyłem wersje pakietów do obsługi Python 2, kontynuowałem importowanie modułu tylko do Python-3.
Na tej podstawie argumentowałbym, że odinstalowanie starego pakietu jest zawsze lepsze niż -I
podczas aktualizacji zainstalowanych wersji pakietu.
pip install MySQL_python==1.8.9