web-dev-qa-db-fra.com

cahier jupyter exécutant le noyau dans env différent

Je me suis mis dans une sorte de désordre horrible virtuel. Aidez-moi?!

Je gère les environnements avec conda. Jusqu'à récemment, je n'avais qu'un noyau de cahier python2 jupyter, mais j'ai décidé de me glisser dans le culte du 21ème siècle et d'installer un noyau python3. J'oublie comment je l'ai fait. 

Mon principal (anaconda) python par défaut à 2,7. 

Je suis donc en train d'essayer joyeusement d'utiliser une belle soupe à l'intérieur de mon nouveau et brillant noyau python3, et je ne semble pas être capable de faire quoi que ce soit pour accéder à l'environnement dans lequel il trouve les paquets. Viz (tous à partir de notebook): 

from bs4 import BeautifulSoup 

-> ImportError: No module named 'bs4'

Ok, d'accord, je vais l'installer en utilisant Shell Magic. Droite? Droite? 

! 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 non. Pense-t-il que je suis dans une version 2.7 même si j'utilise un noyau python3? Ça ne va pas. 

! 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, je peux arranger ça. L'un d'entre eux est un env. 3.5.

! 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  

concernant... 

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

plus concernant ... 

from bs4 import BeautifulSoup 

-> ImportError: No module named 'bs4'

ARRGH !!! headdesk Est-ce que je vais devoir tuer le noyau pour résoudre ce problème (et relancer un peu de travail)? Tuer le noyau va-t-il même marcher? Comment faire en sorte que mon noyau jupyter sache dans quel environnement il est supposé fonctionner?

merci!

32
Paul Gowder

C'est une partie délicate de ipython/Jupyter. L'ensemble de noyaux disponibles est indépendant de ce que votre virtualenv est lorsque vous démarrez jupyter Notebook. L'astuce consiste à configurer le paquet ipykernel dans l'environnement dans lequel vous souhaitez vous identifier uniquement à jupyter. De docs sur plusieurs ipykernels

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

Si vous ne voulez avoir qu'un seul noyau Python 3, à partir de l'environnement Conda, utilisez simplement python -m ipykernel install --user et le python par défaut sera réinitialisé à celui de virtualenv.

Et oui, vous devrez redémarrer le noyau et réexécuter les étapes précédentes.

Voir aussi Utilisation de Python 2.x et Python 3.x dans IPython Notebook

92
tschundler

La solution de @ tschundler fonctionne parfaitement si votre environnement a déjà été créé.

Si vous souhaitez modifier le noyau par défaut lors de la création de votre environnement virtuel et éviter toute configuration manuelle, il vous suffit d'ajouter jupyter à la fin de la commande conda:

conda create --name ENVNAME python=PYTHONVERSION jupyter

Le bon noyau sera alors utilisé lorsque vous utiliserez ipython ou jupyter notebook.

7
Antoine Dusséaux

Il y a aussi un moyen facile ici 

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

Vous devriez maintenant pouvoir voir votre noyau dans le menu du cahier IPython: Kernel -> Changer le noyau et pouvoir y basculer (vous devrez peut-être actualiser la page avant qu'elle apparaisse dans la liste). IPython se souviendra ensuite du noyau à utiliser pour ce cahier.

Cela a fonctionné pour moi. la source

1
Rakend Dubba

Dans mon cas, jupyter n'a pas réussi à "choisir" le python de l'environnement virtuel. J'ai donc dû éditer le ~/.local/share/jupyter/kernels/{my_env_name}/kernel.json.__ et ajouter le chemin d'accès à l'interprète

dans la clé argv.

0
markroxor