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!