2016-06-17 15 views
17

Ich habe mich in eine Art von schrecklichen virtualenv Chaos. Hilfe?!jupyter notebook läuft kernel in verschiedenen env

Ich verwalte Umgebungen mit conda. Bis vor kurzem hatte ich nur einen Python2-Jupyter-Notebook-Kernel, aber ich entschied mich, mich ins 21. Jahrhundert zu stürzen und zu schießen und installierte einen python3-Kernel; Ich vergesse, wie ich es gemacht habe.

Mein Haupt (Anaconda) Python ist standardmäßig auf 2,7 eingestellt.

Also hier bin ich, fröhlich zu versuchen, schöne Suppe aus meinem glänzenden neuen Python3 Kernel zu verwenden, und ich scheint nicht in der Lage zu sein, in jeder Umgebung zu tun, in denen es Pakete findet. Viz (alle aus dem Notebook):

Ok, gut, ich werde es mit Shell Magic 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' 

Oh nein. Glaubt es, ich bin in einem 2.7 env, obwohl ich einen Python3-Kernel verwende? Das wird nicht reichen.

! 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 beheben. Einer 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 Besorgnis erregend ...

from bs4 import BeautifulSoup 

-> ImportError: No module named 'bs4' 

ARRGH !!! headdesk Muss ich den Kernel töten, um dies zu beheben (und ein wenig Arbeit zu wiederholen)? Wird der Kernel sogar zum Laufen gebracht? Wie bekomme ich meinen Jupyter-Kernel um zu wissen, in welcher Umgebung er laufen soll?

danke!

Antwort

53

Dies ist ein kniffliger Teil von ipython/Jupyter. Die verfügbaren Kernel sind unabhängig davon, was Ihr virtualenv ist, wenn Sie jupyter Notebook starten. Der Trick besteht darin, das ipykernel-Paket in der Umgebung einzurichten, in der Sie sich eindeutig als Jupyter identifizieren möchten. Von docs on multiply 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, von der Conda Umgebung, nur python -m ipykernel install --user verwenden und es wird den Standard-Python zu dem in der virtualenv zurückgesetzt.

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

Siehe Using both Python 2.x and Python 3.x in IPython Notebook

+0

Vielen Dank! Lief wie am Schnürchen. –

+0

Vielen Dank, du hast meinen Tag gerettet !! –

1
Auch

@ tschundler-Lösung hat funktioniert perfekt, wenn Ihre Umgebung bereits erstellt.

Wenn Sie den Standard-Kernel bei der Erstellung Ihrer virtuellen Umgebung und vermeiden Sie jegliche manuelle Konfiguration ändern möchten, müssen Sie nur jupyter am Ende des Conda Befehl hinzuzufügen:

conda create --name ENVNAME python=PYTHONVERSION jupyter

Die richtige Kernel wird dann verwendet, wenn Sie Ipython oder Jupyter Notebook verwenden.