Jaki jest najlepszy sposób instalacji pakietów Python?

41

Jaki jest najlepszy sposób instalacji pakietów Python w Ubuntu 11? Jestem niedawnym przejściem na Ubuntu i chcę poznać najlepsze praktyki.

W kontekście chcę zainstalować pakiet tweeststream, ale nie widziałem go w moim menedżerze pakietów Synaptic. Ponadto jestem nowy w programowaniu, ale zwykle mogę śledzić przykłady kodu.

Btibert3
źródło

Odpowiedzi:

30

Myślę, że najlepszym sposobem dla ciebie byłoby zainstalowanie systemu pakowania Python, takiego jak „python-pip”. Możesz zainstalować go za pomocą Synaptic lub Ubuntu Software Center.

Pip pozwoli ci na łatwą instalację i deinstalację pakietów Pythona, tak jak pip install package. W twoim przypadku byłoby to coś takiego z terminala:

sudo pip install tweeststream
zetah
źródło
3
Jest to dobre w przypadku prostych pakietów, ale nie tak dobre w przypadku większych pakietów, np. Numpy
hayd 25.10.13
@hd: dlaczego? Czy to ma związek z askubuntu.com/questions/595366/…
naught101 11.03.15
2
@ naught101 Myślę, że prawdopodobnie miałem na myśli scipy, nie jestem pewien, czy jest to powiązane ... wygląda na to, że pip jest za późno na ścieżce pytona. Zdecydowanie polecam użycie anakondy / conda, jest znacznie lepsza od pip IMO.
hayd
2
Używanie IMHO sudo pip <anything>powinno być stosowane bardzo ostrożnie. Ponieważ tweetstreamnie ma go w Centrum oprogramowania Ubuntu , polecam korzystanie z virtualenv . tweetstream użytkownikasetup.py wymaga anyjsonktóry jest Pakiet Ubuntu . Brak instalacji tweetstream w a virtualenvmoże spowodować awarię innych aplikacji Ubuntu anyjson. Rozwiąż trudne problemy.
Mark Mikofski
9
Powtórz: nie używaj sudo pipna Ubuntu. @MarkMikofski: nie potrzebujesz virtualenv (chyba że chcesz go z jakiegoś konkretnego powodu). python -mpip install --user package-namemoże zainstalować pakiet packafe-namedla bieżącego użytkownika. Jeśli istnieją złożone (duże rozszerzenia C) zależności; można je zainstalować przy użyciu apt-get, aby uniknąć instalowania zależności kompilacji, chyba że jest to konieczne.
jfs
37

zaktualizowano: 2019-05-11: W tym poście głównie wspomniano virtualenv, ale zgodnie z dokumentacją Pythona dotyczącą instalacji modułu , ponieważ Python 3.5 „użycie venvjest teraz zalecane do tworzenia środowisk wirtualnych”, podczas gdy virtualenvjest alternatywą dla wersji Pythona wcześniejszych niż 3.4 .

aktualizacja: 2018-08-17: od Conda-4.4.0 użytku condado activateanakonda na wszystkich platformach

aktualizacja: 27.03.2017: PEP 513 - manylinuxpliki binarne dla PyPI

zaktualizowano: 19.08.2016: Opcja Continuum Anaconda

Jest to w pewnym sensie duplikat easy_install / pip lub apt-get .

W przypadku globalnych pakietów Python użyj Centrum Ubuntu, apt, apt-get lub synaptic

Ubuntu używa Pythona do wielu ważnych funkcji, dlatego zakłócanie działania Pythona może uszkodzić system operacyjny. To jest główny powód, nigdy nie używać pipw moim systemie Ubuntu, ale zamiast używać zarówno Centrum Oprogramowania Ubuntu, Synaptic , apt-getlub po prostu nowsza apt, które domyślnie instalować pakiety z repozytorium Ubuntu . Te pakiety są testowane, zwykle wstępnie skompilowane, więc instalują się szybciej i ostatecznie są zaprojektowane dla Ubuntu. Ponadto instalowane są również wszystkie wymagane zależności i prowadzony jest dziennik instalacji, aby można je było przywrócić. Myślę, że większość pakietów ma odpowiadające repozytoria Launchpad, więc możesz zgłaszać problemy.

Innym powodem korzystania z jednego z pakietów Ubuntu jest to, że czasami te pakiety Python mają różne nazwy w zależności od tego, skąd je pobrałeś. Python-chardet to przykład pakietu, który kiedyś został nazwany jedną rzeczą w PyPI i inną rzeczą w repozytorium Ubuntu. Dlatego robienie czegoś podobnego pip install requestsnie uświadomi sobie, że chardet jest już zainstalowany w twoim systemie, ponieważ wersja Ubuntu ma inną nazwę, a zatem instaluje nową wersję, która uszkodzi twój system w nieznaczny, nieznaczący sposób, ale nadal dlaczego to zrobiłeś.

Ogólnie rzecz biorąc, chcesz zainstalować tylko zaufany kod w swoim systemie operacyjnym. Tak powinno być nerwowy o wpisywanie $ sudo pip <anything-could-be-very-bad>.

Wreszcie niektóre rzeczy są po prostu łatwiejsze do zainstalowania przy użyciu jednego z pakietów Ubuntu. Na przykład, jeśli spróbujesz pip install numpyzainstalować numpy & scipy, chyba że zainstalowałeś już gfortran, atlas-dev, blas-dev i lapack-dev, zobaczysz niekończący się strumień błędów kompilacji. Jednak instalacja numpy & scipy za pośrednictwem repozytorium Ubuntu jest tak prosta, jak ...

$ sudo apt-get install python-numpy python-scipy

Masz szczęście, ponieważ używasz Ubuntu, jednej z najczęściej obsługiwanych i często aktualizowanych istniejących dystrybucji. Najprawdopodobniej każdy potrzebny pakiet Pythona znajduje się w repozytorium Ubuntu i prawdopodobnie jest już zainstalowany na twoim komputerze. Co 6 miesięcy ukaże się nowy cykl pakietów z najnowszą dystrybucją Ubuntu.

Jeśli masz 100% pewności, że pakiet nie będzie w żaden sposób kolidował z systemem Ubuntu, możesz zainstalować go za pomocą pipa, a Ubuntu jest na tyle fajne, aby oddzielić te pakiety od pakietów dystrybucyjnych, umieszczając pakiety dystrybucyjne w folderze o nazwie dist-packages/. Repozytorium Ubuntu zawiera zarówno pip, virtualenv, jak i setuptools. Opieram się jednak na sugestii Wojciecha, by użyć virtualenv.

Do osobistych projektów Pythona używaj pip i wheel w virtualenv

Jeśli potrzebujesz najnowszej wersji lub modułu nie ma w repozytorium Ubuntu, uruchom virtualenv i użyj pipa, aby zainstalować pakiet. Mimo że pip i setuptools się połączyły, IMO pip jest lepszy niż łatwy w instalacji lub distutils, ponieważ zawsze będzie czekał, aż pakiet zostanie całkowicie pobrany i zbudowany, zanim skopiuje go do systemu plików, i sprawia, że ​​aktualizacja lub odinstalowanie jest dziecinnie proste. Pod wieloma względami jest podobny do apt-get, ponieważ ogólnie dobrze radzi sobie z zależnościami. Jednak być może będziesz musiał poradzić sobie z niektórymi zależnościami, ale odkąd PEP 513 został przyjęty, teraz w Pythonie Package Index (PyPI) istnieją pliki binarne dla popularnych dystrybucji Linuksa, takich jak Ubuntu i Fedora .manylinuxna przykład, jak wspomniano powyżej dla NumPy i SciPy, upewnij się, że zainstalowałeś gfortran, atlas-dev, blas-dev i lapack-dev z repozytorium Ubuntu Na przykład, zarówno NumPy , jak i SciPy są teraz domyślnie dystrybuowane dla Ubuntu jako manylinuxkoła za pomocą OpenBLAS zamiast ATLAS. Nadal możesz je budować ze źródła, używając opcji pip --no-use-wheellub--no-binary <format control> .

~$ sudo apt-get install gfortran libblas-dev liblapack-dev libatlas-dev python-virtualenv
~$ mkdir ~/.venvs
~$ virtualenv ~/.venvs/my_py_proj
~$ source ~/.venvs/my_py_proj/bin/activate
~(my_py_proj)$ pip install --no-use-wheel numpy scipy

Zobacz następną sekcję „Nie jesteś w sudoers” poniżej, aby zainstalować zaktualizowane wersje pipa, setuptools, virtualenv lub kół do swojego profilu osobistego przy użyciu --userschematu instalacji z pipem. Możesz użyć tego do aktualizacji pipa na własny użytek, jak JF Sebastian wskazał w swoim komentarzu do innej odpowiedzi . UWAGA: -mtak naprawdę jest to konieczne tylko w MS Windows podczas aktualizacji pip .

python -m pip install --user pip setuptools wheel virtualenv

Nowsze wersje pipa automatycznie buforują koła, więc poniższe informacje są przydatne tylko dla starszych wersji pip. Ponieważ może się to zdarzyć instalować wiele razy, rozważ użycie koła z pipem do stworzenia sterówki. Koło jest już zawarte w wersji virtualenv13.0.0, dlatego jeśli twoja wersja virtualenvjest za stara, być może trzeba najpierw zainstalować koło.

~(my_py_proj)$ pip install wheel  # only for virtualenv < v13.0.0
~(my_py_proj)$ pip wheel --no-use-wheel numpy scipy

Spowoduje to utworzenie plików binarnych koła <cwd>/wheelhouse, użyj -ddo określenia innego katalogu. Teraz, jeśli uruchomisz kolejną wirtualną wersję i potrzebujesz tych samych pakietów, które już zbudowałeś, możesz zainstalować je ze sterówkipip install --find-links=<fullpath>/wheelhouse

Przeczytaj Instalowanie modułów Python w dokumentacji Python i Instalowanie pakietów na stronie głównej indeksu pakietów Python . Również pip , venv , virtualenv i koło .

Jeśli nie jesteś w sudoersi virtualenvnie jest zainstalowany.

Inna opcja korzystania ze środowiska wirtualnego lub jeśli używasz udziału Linux bez uprawnień roota, to użycie schematów instalacyjnych --userlub --home=<wherever-you-want>Python z Pythonem distutilszainstaluje pakiety do wartości site.USERBASElub do dowolnego miejsca. Nowsze wersje pipa mają również --useropcję. Nie używaj sudo!

pip install --user virtualenv

Jeśli wersja Linux PIP jest zbyt stary, potem można przekazać za pomocą opcji konfiguracji --install-option, który jest przydatny do przekazywania niestandardowe opcje do pewnych setup.pyskryptów dla niektórych pakietów rozszerzeń budować, takie jak ustawienie PREFIX. Może być konieczne wyodrębnienie dystrybucji i użycie jej distutilsdo zainstalowania pakietu w oldschoolowy sposób, pisząc python setup install [options]. Pomocne może się okazać przeczytanie dokumentacji instalacyjnej i distutilsdokumentacji .

Python jest wystarczająco miły, aby dodawać site.USERBASEdo twojej PYTHONPATHprzewagi nad czymkolwiek innym, więc zmiany wpłyną tylko na ciebie. Popularną lokalizacją --homejest ~/.local. Zobacz instrukcję instalacji modułu Python , aby uzyskać dokładną strukturę plików i miejsce, w którym znajdują się pakiety witryny. Uwaga : w przypadku korzystania z --homeprogramu instalacyjnego, a następnie może być konieczne, aby dodać go do PYTHONPATHzmiennej środowiskowej stosując exportw swojej .bashrc, .bash_profilelub w powłoce dla lokalnych pakietów będzie dostępna w Pythonie.

Używaj Continuum Anaconda Python do matematyki, nauki, danych lub projektów osobistych

Jeśli używasz Pythona do matematyki, nauki lub danych, IMO naprawdę dobrą opcją jest Anaconda-Python Distribution lub bardziej podstawowa dystrybucja miniconda wydana przez Anaconda, Inc. (wcześniej znana jako Continuum Analytics ) . Chociaż każdy może skorzystać z Anacondy do osobistych projektów, domyślna instalacja zawiera ponad 500 pakietów matematycznych i naukowych, takich jak NumPy, SciPy, Pandas i Matplotlib , podczas gdy miniconda instaluje tylko Anaconda-Python i menedżera środowiska conda. Anaconda instaluje się tylko w twoim osobistym profilu, tj .: /home/<user>/ i zmienia twoją ~/.bashrclub ~/.bash_profileprzedłuża ścieżkę Anacondy do twoich osobistych $PATH rekomendacji pozyskiwaniaconda.shw twoim, ~/.bashrcktóry pozwala ci użyć conda activate <env|default is base>do uruchomienia anakondy - dotyczy to tylko ciebie - twoja ścieżka systemowa pozostaje niezmieniona . W związku z tym zrobisz nie potrzebują dostępu korzeń lub sudokorzystać Anaconda! Jeśli już dodałeś Anaconda-Python, miniconda lub conda do swojej osobistej ścieżki, powinieneś usunąć PATHeksport ze swojej ~/.bashrci zaktualizować do nowej rekomendacji , aby Python systemowy był ponownie pierwszy.

Jest to nieco podobne do --useropcji, którą wyjaśniłem w ostatniej sekcji, z tą różnicą, że dotyczy Pythona jako całości, a nie tylko pakietów. Dlatego Anaconda jest całkowicie oddzielna od twojego systemowego Pythona , nie będzie zakłócać twojego systemowego Pythona i tylko Ty możesz go używać lub zmieniać. Ponieważ instaluje nową wersję Pythona i wszystkich jego bibliotek, potrzebujesz co najmniej 200 MB miejsca, ale jest bardzo sprytny w buforowaniu bibliotek i zarządzaniu nimi, co jest ważne dla niektórych fajnych rzeczy, które możesz zrobić z Anacondą.

Anaconda organizuje zbiór plików binarnych i bibliotek Pythona wymaganych przez zależności w repozytorium online (wcześniej nazywanym binstar ) , a także hostuje pakiety użytkowników jako różne „kanały”. Menedżer pakietów używany przez Anacondę condadomyślnie instaluje pakiety z Anacondy, ale możesz zasygnalizować inny „kanał” używając tej -copcji.

Instalować pakiety z condajak pip:

$ conda install -c pvlib pvlib  # install pvlib pkg from pvlib channel

Ale condamoże zrobić o wiele więcej! Może także tworzyć i zarządzać wirtualnymi środowiskami tak jak virtualenv. Dlatego, ponieważ Anaconda tworzy środowiska wirtualne, pipmenedżera pakietów można użyć do zainstalowania pakietów z PyPI w środowisku Anaconda bez rootowania lub sudo. Czy nie korzystać sudoz Anaconda! Ostrzeżenie! Czy być ostrożny podczas mieszania pipi condaw środowisku Anaconda, b / c trzeba będzie bardziej ostrożnie zarządzać zależnościami pakietów. Inną opcją pipw środowisku conda jest użycie kanału conda-forge, ale najlepiej też zrobić to w świeżym środowisku conda z domyślnym kanałem conda-forge. W ostateczności, jeśli nie możesz znaleźć pakietu nigdzie poza PyPI, rozważ użycie, --no-depsa następnie ręcznie zainstaluj pozostałe zależności conda.

Anaconda jest również pod pewnymi względami podobna do Ruby RVM, jeśli znasz to narzędzie. Anaconda condapozwala także tworzyć środowiska wirtualne z różnymi wersjami Pythona . np . : conda create -n py35sci python==3.5.2 numpy scipy matplotlib pandas statsmodels seabornutworzy stos danych naukowych / naukowych przy użyciu języka Python-3.5 w nowym środowisku o nazwie py35sci. Możesz przełączać środowiska za pomocą conda. Od Conda-4.4.0, jest teraz inna na virtualenvktóry używa source venv/bin/activate, ale poprzedni do Conda-4.4.0 te condapolecenia były takie same , jak virtualenvi również używane source:

# AFTER conda-4.4 
~/Projects/myproj $ conda activate py35sci

# BEFORE conda-4.4 
~/Projects/myproj $ source activate py35sci

Ale czekaj, jest więcej! Anaconda może także instalować różne języki, takie jak R do programowania statystycznego z kanału Anacondar . Możesz nawet skonfigurować własny kanał do przesyłania dystrybucji pakietów zbudowanych dla conda . Jak wspomniano, conda-forge utrzymuje zautomatyzowane kompilacje wielu pakietów na PyPI na kanale Anaconda conda-forge .

Epilog

Istnieje wiele opcji utrzymania projektów Python w systemie Linux w zależności od osobistych potrzeb i dostępu. Jeśli jednak jest jedna rzecz, mam nadzieję, że odejmiesz od tej odpowiedzi, to prawie nigdy nie powinieneś używać sudodo instalowania pakietów Pythona . Korzystanie z sudopowinno być dla ciebie zapachem , że coś jest nie tak. Zostałeś ostrzeżony.

Powodzenia i szczęśliwego kodowania!

Mark Mikofski
źródło
Chciałbym czytałem to zanim zniszczony rozkład Pythona mojego systemu poprzez sudoing wokół z pip. Świetne napisanie, dziękuję za tę informację.
slhck
pip install numpypowinien zainstalować wszystkie zależności
Timo
@Timo, jak wspomniałem w aktualizacji 2017-03-27, ponieważ PEP 513 został zaimplementowany przez wiele plików binarnych numpyux są dostępne na PyPI, które są zbudowane z OpenBLAS, tj . : mają wymagane zależności. Jednak z reguły pip install <package>instalowane będą tylko zależności pakietu Pythona wymienione w install_requiressekcji setup.py. Na przykład: zainstalowanie Jupyter nie zainstaluje pandoc biblioteki Haskell w celu wyeksportowania notatników Jupyter jako LaTeX itp.
Mark Mikofski
W przeciwieństwie do tego conda install <package>prawdopodobnie zainstaluje wszystkie zależności, w tym C / C ++, FORTRAN itp., Nawet biblioteki Haskell, ponieważ conda nie tylko zarządza pakietami Python, takimi jak pip, ale zarządza środowiskami. Więc jeśli miałeś Anacondę lub Minicondę, to conda install Jupyterinstaluje wszystko w pliku przepisumeta.yml , w tym bibliotekę pandoc Haskell . Aby uzyskać więcej informacji, zobacz PyPA
Mark Mikofski
10

Oprócz dodania Novarchibald, ogólnie dobrym pomysłem jest stworzenie środowiska wirtualnego dla twojego projektu Python i zainstalowanie w nim zależności. Pozwala to na lepszą kontrolę nad zależnościami i ich wersjami. Aby skonfigurować środowisko wirtualne, wprowadź:

virtualenv --no-site-packages --distribute my_python_project

Następnie aktywuj go za pomocą:

cd my_python_project
source bin/activate

W tym momencie wszystko, co zainstalujesz za pomocą pip, będzie przechowywane w tym środowisku wirtualnym. Jeśli chcesz zainstalować coś globalnie, powinieneś najpierw wyjść z virtualenv za pomocą:

deactivate

Możesz dowiedzieć się więcej o virtualenv tutaj .

Voitek Zylinski
źródło
1
Alternatywnie: używając pip z katalogu bin virtualenv (tutaj my_python_project / bin / pip) utrzymujesz to środowisko, bez potrzeby jego „aktywowania”. Następnie - za pomocą dowolnego skryptu zainstalowanego w koszu używa danego virutalenv. „Activate” jest przydatne tylko do wywoływania „Pythona”, „Easy_install” i „Pipa” przy użyciu określonego wirtualnego bin.
Jan Vlcinsky
Dokumenty instalacyjne Pythona mówią o używaniu „pyvenv” do tworzenia wirtualnych środowisk specyficznych dla projektu; ale virtualenv jest rezerwą dla projektów korzystających ze starszej wersji Pythona, docs.python.org/3/installing/index.html?highlight=pip .
pbhj
2
Pamiętaj, że virtualenvopcje --no-site-packagesi --distributesą obecnie przestarzałe i nie mają już żadnego efektu.
Pasza
4

Oprócz odpowiedzi Zetah'a, polecenie instalacji python-pip z terminala to:

sudo apt-get install python-pip
Novarchibald
źródło
1

Wypróbuj to środowisko GUI dla PIP opracowane przy użyciu PyQt4

Struktura GUI dla PIP opracowana przy użyciu PyQt4

Ekran startowy

wprowadź opis zdjęcia tutaj

Ekran startowy zawiera opcje umożliwiające użytkownikowi wybranie procesu, który chce zostać przeprowadzony.

Można również określić wersję Pythona, na której chce się wykonywać operacje.

Menu pliku ma opcję „Wyjdź” (skrót: Ctrl + Q) i „Odśwież listy”, która odświeża pliki zasobów zawierające dane pakietu.

Ekran instalacyjny

wprowadź opis zdjęcia tutaj

Na ekranie instalacji znajduje się pasek wyszukiwania, za pomocą którego użytkownik może wyszukiwać i instalować żądane pakiety.

Ekran aktualizacji

wprowadź opis zdjęcia tutaj

Ekran aktualizacji wyświetla listę pakietów, które są nieaktualne i można je zaktualizować.

Odinstaluj Screem

wprowadź opis zdjęcia tutaj

Na ekranie odinstalowywania wyświetlana jest lista pakietów, które są zainstalowane w systemie użytkownika i można je odinstalować.

Okno postępu

wprowadź opis zdjęcia tutaj

Okno postępu to wbudowany widget terminala dla PIP-GUI, który wyświetla procesy uruchomione podczas wykonywania operacji.

gavisic
źródło
1
Witamy w Ask Ubuntu! Chociaż teoretycznie może to odpowiedzieć na pytanie, lepiej byłoby zawrzeć tutaj istotne części odpowiedzi i podać odnośnik.
Kevin Bowen