Jestem nowy w Ubuntu, więc proszę o wyrozumiałość. Zainstalowałem pip
poleceniem: sudo apt-get -y install python-pip
. Potem zainstalowałem NLTK używając polecenia na swojej stronie internetowej, która była: sudo pip install -U nltk
. Ale potem natknąłem się na to pytanie, które mówi, że wszystko, co zrobiłem, było „złamaną praktyką”. Linia, która mnie najbardziej uderzyła, była taka, że używanie sudo pip
jest z natury niewłaściwe i że pip
zbyt duża siła może uszkodzić pliki systemu operacyjnego. Czy ktoś może potwierdzić to roszczenie?
Uwaga - użyłem tylko sudo
dlatego, że kiedy wypróbowałem polecenie apt-get -y install python-pip
, dało mi 2 błędy:
E: Could not open lock file /var/lib/dpkg/lock - open (13: Permission denied)
E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?
package-management
permissions
python
pip
co co co
źródło
źródło
sudo pip install
są z natury błędne. - z stackoverflow.com/a/33004920/95735sudo pip install
jest tak zły, jakcurl "some-url" | sudo bash
instaluje. Podobnie mieliśmy kilka razy, gdy jakiś programistasudo pip install
instalował pewną zależność na swojej stacji roboczej, a następnie sprawdzał uszkodzony kod w repozytorium, ponieważ w plikurequirements.txt
lubsetup.py
brakowało tego, co zainstalowano, i wszyscy inni mogli dowiedzieć się, jaka zależność była potrzebna kiedy facet był na wakacjach.Odpowiedzi:
Zarówno
sudo pip install
i jego wariant drugi wspólnysudo -H pip install
powinien nie należy zachęcać, ponieważ jest to zagrożenie bezpieczeństwa przywilejów użycie korzeniowych użyćpip
do zainstalowania pakietów Pythona z PyPI (Python Package Index).Od https://stackoverflow.com/a/21056000/486919 (moje podkreślenie):
Jak wspomniano na https://security.stackexchange.com/a/79327/8761 , należy pamiętać, że każdy może przesyłać pakiety Pythona, w tym złośliwe, do PyPI.
W skrócie, zgodnie z zasadą najmniejszych przywilejów , nie korzystaj
sudo
zpip
instalacji pakietów Pythona z PyPI chyba że absolutnie konieczne. Zamiast tego rozważ użyciepip install --user
(zauważ, żepip install
bez żadnychsudo
dodatkowych flag / opcji domyślniepip install --user
w Ubuntu obecnie) lub środowisk wirtualnych (takich jakvirtualenv
). Jeśli zobaczysz osoby polecającesudo pip
lubsudo -H pip
, powiedz im, żeby tego nie robiły.źródło
sudo pip install
może odinstalować „stare” zainstalowane przez system pakiety Pythona, co może utrudnić aktualizację lub odinstalowanie tych pakietów OS.sudo pip uninstall
nie pomaga tutaj, ponieważ usuwa nowy pakiet, ale nie przywraca plików ze starego. (Mój kolega R. Zagar szczegółowo omawia inną odpowiedź.)Musisz użyć
sudo
do zainstalowania pip za pomocą apt (sudo apt install python-pip
), ale jak stwierdzono w odpowiedzi edwinksl, nie powinieneś używaćsudo
do instalowania pakietów za pomocą pip , powinieneś używaćpip install --user <package>
do instalowania tylko dla swojego użytkownika lub użyj virtualenv, aby jeszcze bardziej ograniczyć zakres pakietu .Apt instaluje pakiety z repozytoriów Ubuntu, podczas gdy pip instaluje pakiety przesłane przez użytkownika z PyPi, które mogą być złośliwe.
źródło
I dla bardziej temperamentnej odpowiedzi:
sudo apt-get install ...
, właśnie tak zaprojektowano narzędzie do pracy.sudo [-H]
zpip install
jest zarówno możliwe, jak i opcjonalne, w zależności od tego, co dokładnie chcesz zrobić (a zatem „kontrowersje”).Jednym z motto Pythona jest: „Powinien istnieć jeden - a najlepiej tylko jeden - oczywisty sposób”. I jak większość motorów, jest rozbity sardoniczną radością pozornie przy każdej możliwej okazji. (Właśnie dlatego istnieją motta.) Niestety, w mojej najbardziej skromnej opinii, ekosystem Pythona składa się z wielu sprzecznych „twardych i szybkich” zasad, których nigdy nie należy łamać ... z wyjątkiem sytuacji, gdy „yada yada yada” (diabeł, szczegóły itp.). W prawie wszystkich przypadkach jest to spowodowane historyczną ewolucją języka i narzędzi (i kto chce / potrzebuje lekcji historii, gdy chcą po prostu zacząć swoją pracę) - ale może również wynikać z różnic w Mac / Win / * Platformy Nix (np. Unix / Linux ma podobną mentalność,weźcie tych wszystkich „zepsutych praktyk” i „z natury niewłaściwych” kultystów ładunku z ogromną szczyptą soli. Niektóre faktycznie mają dobre intencje. (Inni są po prostu, no cóż, złośliwi).
Przede wszystkim, zamiast podstawowych „instalacji na użytkownika”, prawie zawsze wolisz virtualenv, ponieważ tak naprawdę prawdopodobnie tego właśnie będziesz potrzebować. Więc równie dobrze możesz zacząć już teraz. Jak to się robi, dokładnie „zależy” (patrz motto Pythona powyżej). Jeśli używasz Conda (głównie dla komputerów Mac i Windows), zostanie ona skonfigurowana przy użyciu Conda . Jeśli używasz „czystego” Pythona [sic] , zależy to od wersji i użytego Pythona, ale virtualenvwrapper jest bardzo przydatny.
Po drugie, podobnie jak w przypadku zasady „nigdy sudo”, możesz preferować
sudo -H pip install -U numpy
, co jest całkowicie w porządku, a nawet korzystne, ponieważ pozwala uniknąć pobierania / ponownej instalacji / utrzymywania dużych bibliotek, gdzie tylko chcesz / potrzebuję jednej wersji na każdą wirtualną osobno. Duże, popularne frameworki, takie jak scikit-learn, NumPy, matplotlib, SciPy, pandy itp., Mogą zostać zainstalowane raz i wykonane i ponownie użyte w różnych środowiskach . Ponadto lokalny przyjazny administrator systemu może być w stanie zainstalować je dla każdego użytkownika w systemie - i oczywiściesudo
robiliby to również za pośrednictwem np. Bardziej skomplikowanych instalacji, takich jak TensorFlow.I na koniec, jeśli instalujesz jakąś losową bibliotekę innej firmy, która robi takie a takie (API Twittera, munging tekstu, formatowanie kodu itp.), To całkowicie się zgadzam - nie instaluj go jako root za pośrednictwem sudo. Jasne, zainstaluj go jako bieżącego użytkownika. Pamiętaj jednak, że na Twoim koncie użytkownika znajdują się wszystkie naprawdę ważne rzeczy .
źródło
malloc
tam, gdzie nie musisz.--user
Flag co robi PO prosił o i nie wymaga specjalnych uprawnień. Podważasz swoje dobre strony na temat virtualenv w tym procesie ... nic z „kultystów ładunków” o tym wszystkim.Używanie „sudo pip install” może i nadpisze zawartość pythonową dostarczoną przez twojego dostawcę systemu operacyjnego. Gdy tak się stanie, wszelkie pakiety dostawców, których to dotyczy, nie przejdą „rpm --verify”, a Twoje pakiety będą wyglądać na uszkodzone.
Czy chcesz korzystać z narzędzi do administrowania systemem, które przetestował Twój sprzedawca systemu operacyjnego , czy też możesz używać nieprzetestowanych składników pobranych z Internetu?
Kiedy nie, jeśli złośliwy pakiet zostanie przesłany do PyPI ... ludzie, którzy używają „sudo pip install”, będą uruchamiać ten złośliwy ładunek z pełnymi uprawnieniami systemowymi. Chcesz tego? (#principleofleastprivilege)
Jeśli to tylko twój laptop, a ryzykujesz tylko kilka zdjęć kotów, to ryzyko jest prawdopodobnie niskie ... ale jeśli jest to system dla wielu użytkowników, ryzyko jest teraz mnożone przez N. Jeśli masz dane na system, który ma wartość, dostępność systemu lub niezawodność mają wartość, wówczas ryzyko również rośnie.
Wybierz własną przygodę, ale uzyskaj świadomą zgodę innych użytkowników, na których wybór może mieć wpływ. Mogą nie być wygodne z takim samym poziomem ryzyka jak Ty.
źródło
Aby dodać do tych odpowiedzi: Nie wiem o Ubuntu, ale w Fedorze mogę użyć
sudo dnf install python3-numpy
formatu, aby zainstalować WIELE użytecznych dla mnie pakietów. Nie ma to wady polegającej na tym, że jest niepewny (opiekun repo repo sprawdził pakiety), ale umożliwia także instalację w całym systemie. Jedyną wadą jest to, że wersje dystrybucyjne mogą nieco opóźniać pakiety w PyPI.źródło
Nie, to prawda. Nie mogę potwierdzić tego roszczenia. Zawsze używam
sudo -H
zpip
.pip
może uszkodzić tylko pliki systemu operacyjnego w takim stopniu, jakapt
. Tylko nie używaćsudo
zepip
gdy chcesz zainstalować tylko dla tego użytkownika.źródło
pip
system? Jeśli jesteś administratorem systemu, może to inna historia.