2016-06-17 59 views
17

Mi sono messo in una sorta di pasticcio di virtualenv orribile. Aiuto?!jupyter notebook in esecuzione kernel in env diverso

Gestisco ambienti con conda. Fino a poco tempo fa, avevo solo un kernel per notebook jupyter python2, ma ho deciso di trascinarmi a calci e urla nel 21 ° secolo e ho installato un kernel python3; Ho dimenticato come l'ho fatto.

Il mio python principale (anaconda) è impostato su 2.7.

Quindi eccomi, sto cercando allegramente di usare una bella zuppa all'interno del mio nuovo e brillante kernel python3, e non riesco a fare nulla per ottenere in qualsiasi ambiente in cui trovi i pacchetti. Viz (tutto dal notebook):

from bs4 import BeautifulSoup 

-> ImportError: No module named 'bs4' 

Ok, bene, lo installerò utilizzando la shell magic. Destra? Destra?

! 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 no. Pensa che io sia in un ambiente env 2.7 anche se sto usando un kernel python3? Questo non lo farà.

! 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, posso aggiustarlo. Uno di questi è un 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 

riguardante ...

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

più preoccupante ...

from bs4 import BeautifulSoup 

-> ImportError: No module named 'bs4' 

Arrgh !!! headdesk Devo uccidere il kernel per risolvere questo problema (e rieseguire un po 'di lavoro)? Sta uccidendo il kernel andando anche a lavorare? Come faccio a ottenere il mio kernel jupyter per sapere quale ambiente deve essere in esecuzione?

grazie!

risposta

53

Questa è una parte difficile di ipython/Jupyter. Il set di kernel disponibili è indipendente da ciò che è il tuo virtualenv quando avvii jupyter Notebook. Il trucco sta nel configurare il pacchetto ipykernel nell'ambiente in cui vuoi identificarti in modo univoco con jupyter. Da 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)" 

Se si vuole solo per avere un singolo kernel Python 3, dall'ambiente Conda, basta usare python -m ipykernel install --user e si ripristinerà il pitone di default a quella del virtualenv.

E sì, sarà necessario riavviare il kernel ed eseguire nuovamente i passaggi precedenti.

Vedere anche Using both Python 2.x and Python 3.x in IPython Notebook

+0

Grazie! Ha funzionato come un fascino. –

+0

Grazie mille, hai salvato la mia giornata !! –

1

@ soluzione tschundler funziona perfettamente se l'ambiente è già stato creato.

Se si desidera modificare il kernel di default alla creazione del vostro ambiente virtuale ed evitare qualsiasi configurazione manuale, è sufficiente aggiungere jupyter alla fine del comando Conda:

conda create --name ENVNAME python=PYTHONVERSION jupyter

la correttezza il kernel verrà quindi utilizzato quando si utilizza un notebook ipython o jupyter.