web-dev-qa-db-de.com

jupyter Notebook mit Kernel in verschiedenen Umgebungen

Ich bin in eine Art schreckliches virtuelles Durcheinander geraten. Hilfe?!

Ich verwalte Umgebungen mit conda. Bis vor kurzem hatte ich nur einen Python2-Jupyter-Notebook-Kernel, aber ich beschloss, mich mit Tritten und Schreien ins 21. Jahrhundert zu ziehen und einen Python3-Kernel zu installieren. Ich vergesse wie ich es gemacht habe. 

Mein Hauptpython (Anakonda) ist standardmäßig auf 2.7 eingestellt. 

Also hier, ich versuche fröhlich, schöne Suppe aus meinem glänzenden neuen Python3-Kernel zu verwenden, und ich kann anscheinend nichts tun, um in die Umgebung zu gelangen, in der es Pakete findet. Viz (alles von Notebook): 

from bs4 import BeautifulSoup 

-> ImportError: No module named 'bs4'

Ok, gut, ich werde es mit Shell-Magie installieren. Recht? Recht? 

! pip install bs4

--> Collecting bs4
  Downloading bs4-0.0.1.tar.gz
Requirement already satisfied (use --upgrade to upgrade): beautifulsoup4 in /Users/[MY-USER]/anaconda/lib/python2.7/site-packages (from bs4)
[...]
Successfully built bs4
Installing collected packages: bs4
Successfully installed bs4-0.0.1

from bs4 import BeautifulSoup 

-> ImportError: No module named 'bs4'

Ach nein. Glaubt es, ich bin in einem 2.7-Env, obwohl ich einen Python3-Kernel betreibe? Das geht nicht. 

! conda info --envs
--> # conda environments:
#
flaskenv                 /Users/[MY-USER]/anaconda/envs/flaskenv
mesa                     /Users/[MY-USER]/anaconda/envs/mesa
py35                     /Users/[MY-USER]/anaconda/envs/py35
root                  *  /Users/[MY-USER]/anaconda

Ok, ich kann das reparieren. Eines davon ist ein 3,5 env.

! source activate py35
--> prepending /Users/[MY-USER]/anaconda/envs/py35/bin to PATH

! conda install beautifulsoup4
--> Fetching package metadata .......
Solving package specifications: ..........

# All requested packages already installed.
# packages in environment at /Users/[MY-USER]/anaconda:
#
beautifulsoup4            4.4.1                    py27_0  

über... 

! pip install bs4
--> Requirement already satisfied (use --upgrade to upgrade): bs4 in /Users/[MY-USER]/anaconda/lib/python2.7/site-packages

mehr über ... 

from bs4 import BeautifulSoup 

-> ImportError: No module named 'bs4'

ARRGH !!! headdesk Muss ich den Kernel töten, um das zu beheben (und ein bisschen Arbeit wiederholen)? Wird das Töten des Kernels überhaupt funktionieren? Wie kann ich meinen Jupyter-Kernel wissen lassen, unter welcher Umgebung er laufen soll?

vielen Dank!

32
Paul Gowder

Dies ist ein schwieriger Teil von ipython/Jupyter. Die Menge der verfügbaren Kernel ist unabhängig davon, was Sie beim Starten von Jupyter Notebook von Ihrer virtuellen Umgebung aus tun. Der Trick besteht darin, das ipykernel-Paket in der Umgebung einzurichten, die Sie eindeutig für jupyter identifizieren möchten. Von docs auf mehreren ipykernels

source activate ENVNAME
pip install ipykernel
python -m ipykernel install --user --name ENVNAME --display-name "Python (whatever you want to call it)"

Wenn Sie nur einen einzigen Python 3-Kernel haben möchten, verwenden Sie in der Conda-Umgebung einfach python -m ipykernel install --user und der Standard-Python wird auf denjenigen in der virtuellen Umgebung zurückgesetzt.

Und ja, Sie müssen den Kernel neu starten und die vorherigen Schritte erneut ausführen.

Siehe auch Verwenden von Python 2.x und Python 3.x in IPython Notebook

92
tschundler

Die Lösung von @ tschundler funktioniert einwandfrei, wenn Ihre Umgebung bereits erstellt wurde.

Wenn Sie den Standardkernel bei der Erstellung Ihrer virtuellen Umgebung ändern möchten und keine manuelle Konfiguration benötigen, müssen Sie am Ende des Befehls conda nur jupyter hinzufügen:

conda create --name ENVNAME python=PYTHONVERSION jupyter

Der richtige Kernel wird dann verwendet, wenn Sie ein Ipython- oder Jupyter-Notebook verwenden.

7

Es gibt auch einen einfachen Weg hier 

workon my-virtualenv-name  # activate your virtualenv, if you haven't already
pip install tornado==4.5.3
pip install ipykernel==4.8.2

Sie sollten jetzt in der Lage sein, Ihren Kernel im IPython-Notizbuchmenü zu sehen: Kernel -> Kernel ändern und in der Lage sein, darauf zu wechseln (möglicherweise müssen Sie die Seite aktualisieren, bevor sie in der Liste angezeigt wird). IPython merkt sich dann, welcher Kernel für dieses Notebook verwendet werden soll.

Das hat bei mir funktioniert. Quelle

1
Rakend Dubba
pip install --user ipykernel
python -m ipykernel install --user --name=myenv

Output
Installed kernelspec myenv in /home/user/.local/share/jupyter/kernels/myenv

und gehe in obiges Verzeichnis, öffne kernel.json

{
 "argv": [
  "/home/user/anaconda3/envs/myenv/bin/python", # path to your virtual environment python
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}"
 ],
 "display_name": "myenv",
 "language": "python"
}
0
vishal

In meinem Fall konnte Jupyter irgendwie nicht den Python der virtuellen Umgebung auswählen. Also musste ich ~/.local/share/jupyter/kernels/{my_env_name}/kernel.json Bearbeiten und dem Interpreter den Pfad hinzufügen

in der argv-Taste.

0
markroxor