Uruchamianie programu Jupyter z wieloma ścieżkami Pythona i Ipythona
Chciałbym pracować z notebookami Jupyter, ale miałem problemy z importem podstawowych plików (takich jak import matplotlib). Myślę, że to dlatego, że mam kilka zarządzanych przez użytkownika instalacji Pythona. Na przykład:
> which -a python
/usr/bin/python
/usr/local/bin/python
> which -a ipython
/Library/Frameworks/Python.framework/Versions/3.5/bin/ipython
/usr/local/bin/ipython
> which -a jupyter
/Library/Frameworks/Python.framework/Versions/3.5/bin/jupyter
/usr/local/bin/jupyter
Kiedyś miałem anacondę, ale usunąłem if z katalogu ~ / anaconda. Teraz, kiedy uruchamiam Notatnik Jupyter, dostaję błąd Jądra:
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/subprocess.py",
line 947, in init restore_signals, start_new_session)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/subprocess.py",
line 1551, in _execute_child raise child_exception_type(errno_num, err_msg)
FileNotFoundError: [Errno 2]
No such file or directory: '/Users/npr1/anaconda/envs/py27/bin/python'
Co mam zrobić?! 1 answers
Jest to dość proste do naprawienia, ale wymaga zrozumienia trzech różnych pojęć:]}
- jak Unix / Linux / OSX używa
$PATH
do znajdowania plików wykonywalnych (%PATH%
w systemie Windows) - jak Python instaluje i znajduje Pakiety
- skąd Jupyter wie, jakiego Pythona użyć
Ze względu na kompletność, postaram się zrobić szybki ELI5 na każdym z nich, abyś wiedział, jak rozwiązać ten problem w najlepszy dla Ciebie sposób.
1. Unix / Linux / OSX $PATH
Po wpisaniu dowolnego polecenia w wierszu polecenia (powiedzmy python
), system ma dobrze zdefiniowaną sekwencję miejsc, w których szuka pliku wykonywalnego. Sekwencja ta jest zdefiniowana w zmiennej systemowej o nazwie PATH
, którą użytkownik może określić. Aby zobaczyć PATH
, możesz wpisać echo $PATH
.
Wynikiem jest lista katalogów na twoim komputerze, które będą przeszukiwane w kolejności dla żądanego pliku wykonywalnego. Z powyższego wyjścia zakładam, że zawiera ono:
$ echo $PATH
/usr/bin/:/Library/Frameworks/Python.framework/Versions/3.5/bin/:/usr/local/bin/
W windows echo %path%
Prawdopodobnie przeplatają się też inne ścieżki. Oznacza to, że po wpisaniu python
, system przejdzie do /usr/bin/python
. Gdy wpiszesz ipython
, w tym przykładzie system przejdzie do /Library/Frameworks/Python.framework/Versions/3.5/bin/ipython
, ponieważ w /usr/bin/
nie ma ipython
.
Zawsze ważne jest, aby wiedzieć, jakiego programu wykonywalnego używasz, szczególnie, gdy masz tak wiele instalacji tego samego programu w systemie. Zmiana ścieżki nie jest zbyt skomplikowana; patrz np. jak na stałe ustawić $PATH na Linuksie?.
Windows - Jak ustawić zmienne środowiskowe w Windows 10
2. Jak Python znajduje Pakiety
Kiedy uruchamiasz Pythona i robisz coś podobnego import matplotlib
, Python musi zagrać w podobną grę, aby znaleźć pakiet, który masz na myśli. Podobnie jak $PATH
W Unixie, Python ma sys.path
, który określa te:
$ python
>>> import sys
>>> sys.path
['',
'/Users/jakevdp/anaconda/lib/python3.5',
'/Users/jakevdp/anaconda/lib/python3.5/site-packages',
...]
Kilka ważnych rzeczy: domyślnie pierwszy wpis w sys.path
jest bieżącym katalogiem. Również, chyba że modyfikujesz to (czego nie powinieneś robić, jeśli nie wiesz dokładnie, co robisz) Zwykle znajdziesz coś o nazwie site-packages
w ścieżce: jest to domyślne miejsce, w którym Python umieszcza Pakiety, gdy instalujesz je za pomocą python setup.py install
, pip
, lub conda
, lub podobnych środków.
Ważną rzeczą jest to, że każda instalacja Pythona ma swoje własne pakiety site-packages , gdzie pakiety są instalowane dla tej konkretnej wersji Pythona . Innymi słowy, jeśli zainstalujesz coś dla, np. /usr/bin/python
, wtedy ~/anaconda/bin/python
nie można użyć tego pakietu , ponieważ został on zainstalowany na innym Pythonie! Dlatego w naszej giełdzie na Twitterze polecam skupić się na jednej instalacji Pythona i naprawić $PATH
tak, że używasz tylko tego, którego chcesz użyć.
Jest jeszcze jeden komponent: niektóre pakiety Pythona są dołączone do samodzielnych skryptów, które można uruchamiać z linii poleceń (przykłady to pip
, ipython
, jupyter
, pep8
, itd.) Domyślnie te pliki wykonywalne zostaną umieszczone w tej samej ścieżce katalogów, co Python użyty do ich instalacji, i są zaprojektowane do pracy tylko z tą instalacją Pythona .
Oznacza to, że gdy Twój system jest skonfigurowany, po uruchomieniu python
otrzymujesz /usr/bin/python
, ale gdy uruchomisz ipython
, otrzymujesz /Library/Frameworks/Python.framework/Versions/3.5/bin/ipython
, która jest powiązana z wersją Pythona na /Library/Frameworks/Python.framework/Versions/3.5/bin/python
! Co więcej, oznacza to, że pakiety, które można importować po uruchomieniu python
, są całkowicie oddzielone od pakietów, które można importować po uruchomieniu ipython
lub Jupyter notebook: używasz dwóch całkowicie niezależnych instalacji Pythona.
$PATH
robi to, co chcesz. Prawdopodobnie masz skrypt startowy o nazwie coś w rodzaju ~/.bash_profile
lub ~/.bashrc
, który ustawia tę zmienną $PATH
. W systemie Windows można modyfikować zmienne środowiskowe specyficzne dla użytkownika. Możesz to ręcznie zmodyfikować, jeśli chcesz, aby Twój system wyszukiwał rzeczy w innej kolejności. Przy pierwszej instalacji anaconda / miniconda, tam będzie to opcja, aby zrobić to automatycznie( dodaj Pythona do ścieżki): Powiedz TAK, a następnie python
zawsze wskaże ~/anaconda/python
, co prawdopodobnie jest tym, czego chcesz.
3. Jak Jupyter wie, czego używać w Pythonie
Jeszcze nie wyszliśmy z wody. Wspomniałeś, że w notatniku Jupyter pojawia się błąd jądra: oznacza to, że Jupyter szuka nieistniejącej wersji Pythona.Jupyter jest skonfigurowany tak, aby móc korzystać z szerokiej gamy "jąder", lub silniki wykonawcze dla kodu. Mogą to być Python 2, Python 3, R, Julia, Ruby... istnieje dziesiątki możliwych jąder do użycia. Aby jednak tak się stało, Jupyter musi wiedzieć , gdzie , aby szukać powiązanego pliku wykonywalnego: to znaczy musi wiedzieć, w której ścieżce znajduje się python
.
kernelspec
, a użytkownik może dostosować je do swoich pragnień. Na przykład, oto lista jąder, które mam na moim system:
$ jupyter kernelspec list
Available kernels:
python2.7 /Users/jakevdp/.ipython/kernels/python2.7
python3.3 /Users/jakevdp/.ipython/kernels/python3.3
python3.4 /Users/jakevdp/.ipython/kernels/python3.4
python3.5 /Users/jakevdp/.ipython/kernels/python3.5
python2 /Users/jakevdp/Library/Jupyter/kernels/python2
python3 /Users/jakevdp/Library/Jupyter/kernels/python3
Każdy z nich jest katalogiem zawierającym pewne metadane, które określają nazwę jądra, ścieżkę do pliku wykonywalnego i inne istotne informacje.
Jądra można dostosować ręcznie, edytując metadane wewnątrz katalogów wymienionych powyżej.
Polecenie instalacji jądra może się zmieniać w zależności od jądra. IPython opiera się na pakiecie ipykernel , który zawiera polecenie instalacji jądra Pythona: na przykład
$ python -m ipykernel install
Stworzy kernelspec powiązany z programem wykonywalnym Pythona, którego używasz do uruchomienia tego polecenia. Następnie możesz wybrać to jądro w notatniku Jupyter, aby uruchomić kod z tym Pythonem.
Możesz zobaczyć inne opcje, które oferuje ipykernel za pomocą polecenia help:
$ python -m ipykernel install --help
usage: ipython-kernel-install [-h] [--user] [--name NAME]
[--display-name DISPLAY_NAME] [--prefix PREFIX]
[--sys-prefix]
Install the IPython kernel spec.
optional arguments:
-h, --help show this help message and exit
--user Install for the current user instead of system-wide
--name NAME Specify a name for the kernelspec. This is needed to
have multiple IPython kernels at the same time.
--display-name DISPLAY_NAME
Specify the display name for the kernelspec. This is
helpful when you have multiple IPython kernels.
--prefix PREFIX Specify an install prefix for the kernelspec. This is
needed to install into a non-default location, such as
a conda/virtual-env.
--sys-prefix Install to Python's sys.prefix. Shorthand for
--prefix='/Users/bussonniermatthias/anaconda'. For use
in conda/virtual-envs.
Uwaga: najnowsza wersja anaconda jest dostarczana z rozszerzeniem dla notebooka, które powinno automatycznie wykrywać różne środowiska conda, jeśli zainstalowany jest w nim pakiet ipykernel
.
Podsumowanie: Naprawienie problemu
Więc z tym tłem, twój problem jest dość łatwy do naprawienia:]}Ustaw
PATH
tak, aby żądana wersja Pythona była pierwsza. Na przykład, możesz uruchomićexport PATH="/path/to/python/bin:$PATH"
, aby określić (jeden raz), którego Pythona chcesz użyć. Aby to zrobić na stałe, dodaj tę linię do swojego.bash_profile
/.bashrc
(zauważ, że anaconda może to zrobić automatycznie po zainstalowaniu). Polecam korzystanie z Pythona, który pochodzi z anaconda lub miniconda: to pozwoli ci naconda install
wszystkie narzędzia, których potrzebujesz.Upewnij się, że pakiety, których chcesz użyć, są zainstalowane dla Pythona. Jeśli używasz conda, możesz wpisać np.
conda install jupyter matplotlib scikit-learn
, aby zainstalować te pakiety dlaanaconda/bin/python
.Upewnij się, że twoje jądra Jupyter wskazują wersje Pythona, których chcesz użyć. Kiedy
conda install jupyter
powinien ustawić to dlaanaconda/bin/python
automatycznie. W przeciwnym razie możesz użyć poleceniajupyter kernelspec
lubpython -m ipykernel install
, aby dostosować istniejące jądra lub zainstalować nowe.Aby zainstalować moduły w innych jądrach Pythona Jupyter nie zarządzanych przez Anacondę, należy skopiować ścieżkę do pliku wykonywalnego Pythona dla jądra i uruchomić
/path/to/python -m pip install <package>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-12 20:32:57