Jestem trochę zdezorientowany przypadkami, w których powyższe polecenia muszą być użyte podczas pobierania pakietów pytona. Próbowałem pobrać pakiet o nazwie pyudev zgodnie z odpowiedzią na to pytanie . Wykonałem to polecenie:
sudo pip install python-pyudev
ale otrzymał następujący komunikat:
Downloading/unpacking python-pyudev
Could not find any downloads that satisfy the requirement python-pyudev
Cleaning up...
No distributions at all found for python-pyudev
Storing complete log in /home/vineet/.pip/pip.log
Jednak następujące działały dobrze:
sudo apt-get install python-pyudev
Kiedy apt-get
należy instalować pakiety, a kiedy python-pip
używać?
apt
software-installation
python
pip
Vineet Kaushik
źródło
źródło
pip
służy do instalowania tylko pakietów Pythona, aleapt-get
służy do instalowania wszystkich pakietów.Odpowiedzi:
PyPI to indeks pakietu Python - repozytorium modułów python.
pip
służy do pobierania i instalowania pakietów bezpośrednio z PyPI. PyPI jest hostowany przez Python Software Foundation . Jest to specjalistyczny menedżer pakietów, który zajmuje się tylko pakietami python.apt-get
służy do pobierania i instalowania pakietów z repozytoriów Ubuntu obsługiwanych przez Canonical.Niektóre różnice między instalowaniem pakietów Pythona
apt-get
ipip
są następujące:Canonical zapewnia tylko pakiety dla wybranych modułów Pythona. Natomiast PyPI obsługuje znacznie szerszą gamę modułów python. Istnieje więc wiele modułów Pythona, których nie będziesz mógł zainstalować
apt-get
.Canonical obsługuje tylko jedną wersję dowolnego pakietu (zazwyczaj najnowszą lub najnowszą wydaną w przeszłości). Tak więc,
apt-get
nie możemy zdecydować, którą wersję pakietu python chcemy.pip
pomaga nam w tej sytuacji. Możemy zainstalować dowolną wersję pakietu, która została wcześniej przesłana do PyPI. Jest to niezwykle pomocne w przypadku konfliktu zależności.apt-get
instaluje moduły python w lokalizacji ogólnosystemowej. Nie możemy po prostu instalować modułów w naszym projekcie virtualenv .pip
rozwiązuje ten problem dla nas. Jeśli używamypip
po aktywacji virtualenv, jest wystarczająco inteligentny, aby zainstalować moduły tylko w naszym projekcie virtualenv. Jak wspomniano w poprzednim punkcie, jeśli istnieje wersja konkretnego pakietu python już zainstalowana w lokalizacji ogólnosystemowej, a jeden z naszych projektów wymaga starszej wersji tego samego pakietu python, w takich sytuacjach możemy użyć virtualenv i pip do instalacji ta starsza wersja pakietu python bez żadnych konfliktów.Jak @Radu Rădeanu wskazał w tej odpowiedzi , nie byłoby generalnie różnica w nazwach pakietów, jak również. Canonical zwykle nazywa pakiety Python 2 jako,
python-<package_name>
a pakiety Python 3 jakopython3-<package_name>
. Podczas gdy napip
ogół musimy po prostu używać<package_name>
zarówno dla pakietów Python 2, jak i Python3.Którego powinieneś użyć:
Zarówno
apt-get
ipip
są dojrzałe menedżery pakietów, który automatycznie zainstalować dowolną inną zależność pakietów podczas instalacji. Możesz użyć dowolnej osoby. Jeśli jednak musisz zainstalować określoną wersję pakietu python lub zainstalować pakiet w virtualenv lub zainstalować pakiet, który jest hostowany tylko w PyPI; tylkopip
pomoże ci rozwiązać ten problem. W przeciwnym razie, jeśli nie masz nic przeciwko instalowaniu pakietów w lokalizacji ogólnosystemowej, tak naprawdę nie ma znaczenia, czy używaszapt-get
czypip
.źródło
pip
iapt-get
simutaneously.apt-get
. Ponieważ używanie obu tych elementówapt-get
ipip
może powodować konflikty, czy powinno się zawsze używaćpip
pakietów obsługiwanych przezpip
?sudo pip
bez,virtualenv
ponieważ większość twoich projektów potrzebowała tego samego środowiska (ale bardziej rozbudowanego niż to, co zapewnia czysta instalacja Ubuntu). Wtedy, kiedy zrobić upgrade systemu i Ubuntu postanawia Python uaktualnić do nowej wersji (jak zzesty
doartful
- Python 3.5 do 3.6), wszystkich pakietów zainstalowanych w PIP-/usr
pozostają w tyle ipip.get_installed_distributions()
tworzy pustą listę.Jak powiedział @AvinashRaj w swoim komentarzu ,
pip
służy jedynie do instalowania pakietów Pythona, aleapt-get
służy do instalowania pakietów utworzonych w dowolnym języku programowania.Twoim głównym problemem jest znalezienie odpowiedniej nazwy pakietu w obu przypadkach:
poda właściwą nazwę pakietu, którego chcesz zainstalować
pip install
, aspoda prawidłową nazwę pakietu, który chcesz zainstalować, używając
apt-get install
:Tak więc, w conlusion, korespondent
sudo apt-get install python-pyudev
jestsudo pip install pyudev
, niesudo pip install python-pyudev
.Teraz zależy od Ciebie, co chcesz wybrać, kiedy chcesz zainstalować pakiet python:
pip
lubapt-get
. Zobacz na przykład niniejsze pytania i odpowiedzi dotyczące różnicy w instalowaniu pakietu przy użyciupip
iapt-get
.źródło
Moim preferowanym sposobem jest zawsze używać
apt
i tylko w przypadku, gdy moduł nie jest jeszcze dostępny w repozytorium Debian / Ubuntu do użyciapip
, ale tylko w kontekście użytkownika ---user
flaga. Korzystając zpip
jednego z nich, musisz zainstalować wszystkie zależności kompilacji z, powiedzmy, repozytorium Ubuntu lub zapewnić je same, co może być żmudnym zadaniem.apt-get
instaluj pakiety binarne podczaspip
kompilacji po pobraniu. Nie należy używać pip do instalowania modułów w lokalizacjach systemu. To jest po prostu źle. Zawsze używaj--user
flagi, aby zainstalować moduł w lokalizacji domowej. Prawidłowo skonfigurowana PYTHONPATH pozwala pythonowi najpierw pobrać moduły z HOME, a następnie zainstalować moduły systemoweapt-get
.źródło