Wciąż próbuję zrozumieć ten problem, który mam i przeczytałem mnóstwo postów dotyczących sudo apt-get install python-XXX
vs pip install
, i rozumiem jedną z nich (apt-get to repozytorium pakietów, zarządzane przez całkowicie inną grupę ludzi do pipowania, auto - aktualizuje wraz ze wszystkim innym, gdy dostępna jest aktualizacja, jest ona binarna itp.). Jest jednak kilka szczególnych rzeczy, których nie rozumiem i na które nie mogłem znaleźć odpowiedzi:
Jeśli z jakiegoś powodu najpierw zainstaluję pakiet, np. Numpy, za pomocą
sudo apt-get install numpy
, a następnie zrobię to późniejpip install numpy
. Co się dzieje? czy numpy jest ponownie instalowany w innym miejscu z inną wersją (np. w .local / lib), więc teraz mam dwie niezależne wersje? Który jest używany podczas importu? (jeśli dobrze zrozumiałem, to jest osobne, a apt-get obejmuje cały system, ale widziałem sprzeczne odpowiedzi na to pytanie, np. tutaj )Zauważyłem, że wiele pakietów na apt-get jest dość starych w porównaniu do pip. np. w momencie pisania ipython 2.3.0 vs 4.0.3, numpy 1.10.2 vs 1.10.4, spyder 2.3.5 vs 2.3.8. Czy jest jakaś zaleta, po której
sudo apt-get install
następuje najpierwpip install
? czy to po prostu głupie?Zauważyłem, że mój pip miał 1.5.6 - jeśli to zrobisz, jest to najnowszy najnowszy
sudo apt-get install python-pip
. podczas gdy na pipie to 8.0.2! Myślę, że to sprawia mi problemy, ponieważ w tej starej wersji możesz ciągle instalować ten sam pakiet i to nie ostrzega. I jakoś nie zastępuje starego. Uświadomiłem sobie to, ponieważ mogę nadal odinstalowywać ten sam pakiet (np. Numpy) i zawsze tam jest, kiedy to robiępip show numpy
. I dziwnie, zawsze pokazuje ten sam folder (.local /), ale z różnymi wersjami: S Mam więc dwa pytania z tym związane:za. jaki jest najlepszy sposób na zainstalowanie pipa? Obecnie jestem pochylony w kierunku
sudo apt-get install python-pip
,pip install pip
,sudo apt-get purge python-pip
. Czy to jest mądre? Wydaje mi się to trochę śmieszne.b. teraz, gdy wiem, że wiele moich pakietów jest pomieszanych ze zduplikowanymi instalacjami, prawdopodobnie dlatego, że niektóre zostały zainstalowane przy pomocy apt-get, a następnie wiele razy przy pomocy pip 1.5.6, jaki jest najlepszy sposób na sprawdzenie duplikatów i wyczyszczenie go? Zgaduję, że nie jest bezpiecznie używać skryptu do pipowania odinstaluj wszystko i zainstaluj ponownie?
PS Nie byłem pewien, czy powinienem opublikować to jako nowe pytanie, czy jako odpowiedź na mój pierwotny problem. Ponieważ to pytanie jest o wiele bardziej zwięzłe i ogólne, czułem, że byłoby lepiej osobno. Przepraszam, jeśli się pomyliłem.
źródło
Odpowiedzi:
W przypadku archiwów po wielu próbach i błędach to właśnie znalazłem (z perspektywy czasu niektóre bity mają sens, inne są dość mylące).
Jeśli ty
sudo apt-get install python-xyz
, pakiet pojawi się wpip list
. Oczywiście możesz zaimportować go do Pythona, ale nie pojawia się w pip.get_installed_distribution (). (Oczywiście odwrotność nie jest prawdą, tzn. Jeśli to zrobiszpip install xyz
, nie pojawi się w twoim apt / synaptic)Po
sudo apt-get install python-xyz
wykonaniupip install xyz
tego, co się stanie, zależy od posiadanej wersji pipa.OLD v1.5.6 (aktualna wersja dostarczana na Ubuntu PPA):
Ta wersja pipa (1.5.6) po prostu zainstaluje nową kopię xyz w innym miejscu. W efekcie powstaje wiele kopii, co powoduje ogromny bałagan. na przykład:
Jeśli zrobię to
pip install numpy
jeszcze raz, pobierze go i zainstaluje ponownie. Dzięki temu możesz uzyskać wiele różnych wersji, do których tak naprawdę nie masz dostępu. Mogę zrobićpip install numpy
5 razy, a potem mogę zrobićpip uninstall numpy 5x
czasy! Oczywiście możesz uważać, aby tego nie robić, ale czasami skrypty instalacyjne innego oprogramowania są nieco nieostrożne i mogą zepsuć. To niewiarygodne, że Ubuntu oficjalnie dostarcza tę wersję pipa.NOWA wersja 8.0.2 (aktualna wersja na samym pipie):
nowsze wersje pipa (np. 8.0.2, który jest na pipie) odmówi zainstalowania tego samego pakietu, twierdząc, że wymaganie jest już spełnione. Nie możesz więc zainstalować nowej wersji. To jest dobre zachowanie (więcej na temat pobierania tej wersji pipa później).
W takim przypadku możesz tylko zaktualizować, tzn. Zainstalować z flagą -U.
Jednak podczas próby
pip install -U xyz
zainstalowania pakietu zainstalowanego za pomocą sudo apt-get, pojawi się błąd uprawnień, ponieważ apt-get został zainstalowany w / usr / i potrzebujesz do niego dostępu root.Więc AFAIK, nie masz wyboru i musisz
sudo pip install -U xyz
go zaktualizować. W takim przypadku pip instaluje najnowszy pakiet w tym samym miejscu, w którym napisał go sudo apt-get. np. w moim przypadku /usr/local/lib/python2.7/dist-packages. To jest dobre.Warto również zauważyć, że pakiety na apt są często starsze niż te na pipie (np. Numpy v1.8.2 vs 1.10.4, scipy 0.14.1 vs 0.17.0, ipython 2.3 vs 4.0.3, spyder 2.3.5 vs 2.3.8)
Tak więc moim obecnym zamysłem jest zdobycie wielkich rzeczy
sudo apt-get
, np.sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy pytho
Spyder z nosaa następnie zaktualizuj je (lub przynajmniej niektóre z nich) za pomocą
sudo pip install -U
.Uwaga: Wydaje się, że bardzo ważne jest zdobycie nowego pipa z pipa (bardzo meta)
PS Zdaję sobie sprawę z virtualenv, ale nie potrzebuję go teraz. Potrzebuję tylko jednego środowiska programistycznego.
A oto mały skrypt do zrzucenia listy pakietów, wersji i ścieżki (ale działa tylko na modułach zainstalowanych przez pip, a nie tych z apt-get)
źródło