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

255

J'utilise des blocs-notes IPython et j'aimerais pouvoir choisir de créer un bloc-notes python 2.x ou 3.x dans IPython.

J'ai d'abord eu Anaconda. Avec Anaconda, une variable d'environnement global a dû être modifiée pour sélectionner la version de python souhaitée, puis IPython pourrait être démarré. Ce n'est pas ce que je cherchais, j'ai donc désinstallé Anaconda et j'ai maintenant configuré ma propre installation en utilisant MacPorts et PiP. Il semble que je dois encore utiliser

port select --set python <python version> 

pour basculer entre python 2.x et 3.x. ce qui n'est pas mieux que la solution anaconda.

Existe-t-il un moyen de sélectionner la version de python que vous souhaitez utiliser après avoir démarré un bloc-notes IPython, de préférence avec ma version actuelle de MacPorts?

deltap
la source

Réponses:

337

L'idée ici est d'installer plusieurs ipythonnoyaux. Voici les instructions pour anaconda. Si vous n'utilisez pas anaconda, j'ai récemment ajouté des instructions utilisant pure virtualenvs.

Anaconda> = 4.1.0

Depuis la version 4.1.0, anaconda inclut un package spécial nb_conda_kernelsqui détecte les environnements conda avec des noyaux de notebook et les enregistre automatiquement. Cela rend l'utilisation d'une nouvelle version de python aussi simple que la création de nouveaux environnements conda:

conda create -n py27 python=2.7 ipykernel
conda create -n py36 python=3.6 ipykernel

Après un redémarrage du cahier jupyter, les nouveaux noyaux sont disponibles via l'interface graphique. Veuillez noter que les nouveaux packages doivent être explicitement installés dans les nouveaux environnements. La section Gestion des environnements dans les documents de conda fournit de plus amples informations.

Enregistrement manuel des noyaux

Les utilisateurs qui ne souhaitent pas utiliser nb_conda_kernelsou utilisent toujours des versions plus anciennes d'anaconda peuvent utiliser les étapes suivantes pour enregistrer manuellement les noyaux ipython.

configurer l' python2.7environnement:

conda create -n py27 python=2.7
conda activate py27
conda install notebook ipykernel
ipython kernel install --user

configurer l' python3.6environnement:

conda create -n py36 python=3.6
conda activate py36
conda install notebook ipykernel
ipython kernel install --user

Après cela, vous devriez pouvoir choisir entre python2
et python3lors de la création d'un nouveau bloc-notes dans l'interface.

De plus, vous pouvez transmettre les options --nameet --display-nameà ipython kernel installsi vous souhaitez modifier les noms de vos noyaux. Voir ipython kernel install --helppour plus d'informations.

cel
la source
Votre solution ressemble beaucoup à la solution que j'ai finalement utilisée et, en principe, je m'attendrais à ce qu'elle fonctionne. Comme j'ai déjà désinstallé anaconda et que cela fonctionne, je ne pourrai pas le vérifier.
deltap
9
Si vous souhaitez configurer les kernelspecs sans avoir besoin de root, vous pouvez les ipython kernelspec install-self --userinstaller pour l'utilisateur actuel.
Thomas K
1
Je l'ai compris! Votre réponse a aidé! dropbox.com/s/6ayqf55ctkv2xgk/…
Programmeur intelligent
7
L'élément clé est que vous devez INSTALLER nb_conda_kernels il n'est pas venu avec mon Anaconda initial! Merci!
dartdog
1
@cel, en effet, l'environnement dans lequel je démarre jupyter n'a pas le package nb_conda_kernels installé par défaut. Je n'ai pas pris le temps de lire tous les commentaires: vous pourriez peut-être éditer votre réponse et inclure le remak de dartdog.
Antoine Gautier
276

Si vous exécutez Jupyter sur Python 3, vous pouvez configurer un noyau Python 2 comme ceci:

python2 -m pip install ipykernel

python2 -m ipykernel install --user

http://ipython.readthedocs.io/en/stable/install/kernel_install.html

Ish
la source
52
Changez le «2» pour «3» si vous avez déjà configuré python2 et avez besoin de python3. Je ne comprends pas pourquoi ce n'est pas la meilleure réponse, il gagne définitivement avec le rasoir d'Occam et cela a fonctionné pour moi.
wordsforhewise
6
Fonctionne parfaitement. Ça devrait être la première réponse.
JSmyth
2
La commande python2 est incluse dans python lui-même? Veuillez donner une explication détaillée de cette réponse. :)
verystrongjoe
3
cela fonctionne, mais il n'est pas lié à mon système python 2 avec des packages supplémentaires. Existe-t-il un moyen de créer un lien vers un binaire / exécutable python existant?
Rutger Hofste
1
Fonctionne parfaitement dans win10, il suffit de le remplacer python2par your\path\to\python(2).exe.
Lucien
42

Ces instructions expliquent comment installer un noyau python2 et python3 dans des environnements virtuels distincts pour les utilisateurs non anaconda. Si vous utilisez anaconda, veuillez trouver mon autre réponse pour une solution directement adaptée à anaconda.

Je suppose que vous avez déjà jupyter notebookinstallé.


Assurez-vous d'abord d'avoir python2un python3interprète et un pipdisponible.

Sur ubuntu, vous les installeriez en:

sudo apt-get install python-dev python3-dev python-pip python3-pip

Ensuite, préparez et enregistrez les environnements du noyau

python -m pip install virtualenv --user

# configure python2 kernel
python -m virtualenv -p python2 ~/py2_kernel
source ~/py2_kernel/bin/activate
python -m pip install ipykernel
ipython kernel install --name py2 --user
deactivate

# configure python3 kernel
python -m virtualenv -p python3 ~/py3_kernel
source ~/py3_kernel/bin/activate
python -m pip install ipykernel
ipython kernel install --name py3 --user
deactivate

Pour vous faciliter la tâche, vous pouvez ajouter des alias shell pour la commande d'activation à votre fichier de configuration shell. Selon le système et le shell que vous utilisez, cela peut être par exemple ~/.bashrc, ~/.bash_profileou~/.zshrc

alias kernel2='source ~/py2_kernel/bin/activate'
alias kernel3='source ~/py3_kernel/bin/activate'

Après avoir redémarré votre shell, vous pouvez désormais installer de nouveaux packages après avoir activé l'environnement que vous souhaitez utiliser.

kernel2
python -m pip install <pkg-name>
deactivate

ou

kernel3
python -m pip install <pkg-name>
deactivate
cel
la source
suivi cela jusqu'au point, installé des pandas, démarré jupyter, basculé vers le noyau py3: l'importation des pandas a échoué avec une erreur 'not found'. Ça me
rend
1
@ user1255933, cela est probablement dû à une installation avec la mauvaise version de pip. Cela peut se produire si l'activation de l'environnement cible a échoué ou s'il ne contient pas de version pip. Vous pourriez trouver ma réponse intéressante ici: stackoverflow.com/questions/32680081/… .
CDDE
Merci pour les instructions sur l'utilisation du moyen non anaconda pour installer le noyau
mdivk
37

Avec une version actuelle de Notebook / Jupyter, vous pouvez créer un noyau Python3 . Après avoir démarré une nouvelle application de bloc-notes à partir de la ligne de commande avec Python 2, vous devriez voir une entrée «Python 3» dans le menu déroulant «Nouveau». Cela vous donne un bloc-notes qui utilise Python 3. Vous pouvez donc avoir deux blocs-notes côte à côte avec différentes versions de Python.

Les détails

  1. Créez ce répertoire: mkdir -p ~/.ipython/kernels/python3
  2. Créez ce fichier ~/.ipython/kernels/python3/kernel.jsonavec ce contenu:

    {
        "display_name": "IPython (Python 3)", 
        "language": "python", 
        "argv": [
            "python3", 
            "-c", "from IPython.kernel.zmq.kernelapp import main; main()", 
            "-f", "{connection_file}"
        ], 
        "codemirror_mode": {
            "version": 2, 
            "name": "ipython"
        }
    }
  3. Redémarrez le serveur portable.

  4. Sélectionnez «Python 3» dans le menu déroulant «Nouveau»
  5. Travailler avec un bloc-notes Python 3
  6. Sélectionnez «Python 2» dans le menu déroulant «Nouveau»
  7. Travailler avec un ordinateur portable Python 2
Mike Müller
la source
C'est très bien et j'essaie de faire fonctionner cela, mais pourriez-vous spécifier comment vous commencez jupyterdans ce scénario (je dois soit exécuter ipython notebookou ipython3 notebook). À l'heure actuelle, je ne peux exécuter que l'un ou l'autre (avec leurs environnements respectifs, mais je vois les deux noyaux répertoriés à l'intérieur jupyter. Pourriez-vous développer votre réponse pour inclure comment démarrer jupyterafin de pouvoir exécuter python2et python3côte à côte? Merci!
Chris
1
Ok, je pense que je l'ai compris - j'ai dû ajuster le kernel.jsonfichier à l'intérieur ~/Library/Jupyter/kernels/python3/(sur OS X) et ajouter les arguments mentionnés dans le fichier lié.
Chris
@Chris Oui, alors que la description derrière le lien est donnée dans un bloc-notes IPython, cela pourrait être fait dans un éditeur. Il suffit de créer ou de modifier un fichier avec un certain nom à un chemin donné et au contenu affiché. Heureux que vous ayez résolu votre problème.
Mike Müller
Je recommanderais de modifier votre réponse pour inclure les détails de ce lien. Les réponses ne doivent pas garder la partie la plus importante cachée "derrière" un lien.
Chris
1
@Chris Ajouté les détails du lien.
Mike Müller
22

Une solution est disponible qui me permet de conserver mon installation MacPorts en configurant le kernelspec Ipython.

Exigences:

  • MacPorts est installé dans le répertoire habituel / opt
  • python 2.7 est installé via macports
  • python 3.4 est installé via macports
  • Ipython est installé pour python 2.7
  • Ipython est installé pour python 3.4

Pour python 2.x:

$ cd /opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin
$ sudo ./ipython kernelspec install-self

Pour python 3.x:

$ cd /opt/local/Library/Frameworks/Python.framework/Versions/3.4/bin
$ sudo ./ipython kernelspec install-self

Vous pouvez maintenant ouvrir un bloc-notes Ipython, puis choisir un bloc-notes python 2.x ou python 3.x.

Choisissez votre python!

deltap
la source
Pouvez - vous confirmer que vous pouvez exécuter python2et python3noyau notebooks côte à côte dans la même jupyterinstance? Dans ce cas, comment commencez-vous exactement à ne jupyterpas avoir de chemins conflictuels? Je ne peux actuellement exécuter python2ou python3coder qu'en configurant au $PATH $PYTHONPATHpréalable l'environnement approprié . Puis-je éviter cela d'une manière ou d'une autre?
Chris
Je peux exécuter des blocs-notes du noyau python2 ou python3.
deltap
Comment démarrer jupyter(étant donné qu'il est installé pour python 2.7et pour python 3.4) Avez-vous défini $ PYTHONPATH ou obtenu un environnement virtuel? Tu appelles juste ipython notebook? Si oui, à quoi cela ipythonfait-il référence - celui installé pour 2.7 ou 3.4?
Chris
J'appelle juste python notebook. which ipythonmontre qu'il pointe/opt/local/Library/Frameworks/Python.framework/Versions/3.4/bin/ipython
deltap
D'accord, j'ai compris mon problème et cela avait à voir avec un prédéfini $PYTHONPATH, ce qui rend difficile le changement de noyaux. Je devais le faire unset PYTHONPATHavant de commencer ipythonet maintenant ça marche.
Chris
18

Depuis mon installation Linux, j'ai fait:

sudo ipython2 kernelspec install-self

Et maintenant, mon python 2 est de retour sur la liste.

Référence:

http://ipython.readthedocs.org/en/latest/install/kernel_install.html


METTRE À JOUR:

La méthode ci-dessus est désormais obsolète et sera supprimée à l'avenir. La nouvelle méthode devrait être:

sudo ipython2 kernel install

mimoralea
la source
2
Je déteste coller des commandes au hasard dans mon installation Ubuntu, mais cela a fonctionné pour moi.
Joseph
1
Doit être la réponse choisie.
e9t le
1
Bref et au point, j'ai appliqué cette solution sur Mac OS X, fonctionne sans problème.
Konrad
1
J'ai essayé toutes les réponses. Mais cela a fonctionné pour moi. Essayez-le si vous êtes sur Ubuntu.
sinsuren
1
Et où est-ce que j'obtiens ipython2?
sudo
5

Voici les étapes pour ajouter le noyau python2 au cahier jupyter:

ouvrez un terminal et créez un nouvel environnement python 2: conda create -n py27 python=2.7

activer l'environnement: Linux source activate py27ou windowsactivate py27

installez le noyau dans l'env: conda install notebook ipykernel

installez le noyau pour l'extérieur de l'env: ipython kernel install --user

fermer l'env: source deactivate

Bien qu'une réponse tardive espère que quelqu'un la trouve utile: p

Akash Chandra
la source
Cela n'ajoute rien au-delà de ce qui était déjà clairement indiqué dans la réponse de @ cel .
merv
3

À utiliser sudo pip3 install jupyterpour installer jupyter pour python3 et sudo pip install jupyterpour installer jupyter notebook pour python2. Ensuite, vous pouvez appeler la ipython kernel installcommande pour permettre aux deux types de cahier de choisir dans le cahier jupyter.

sv_jan5
la source
1

J'ai regardé cette excellente information et je me suis ensuite demandé , puisque

  1. j'ai python2, python3 et IPython tous installés,
  2. j'ai PyCharm installé,
  3. PyCharm utilise IPython pour sa console Python,

si PyCharm utiliserait

  1. IPython-py2 lorsque Menu> Fichier> Paramètres> Projet> Interprète de projet == py2 ET
  2. IPython-py3 lorsque Menu> Fichier> Paramètres> Projet> Interprète de projet == py3

RÉPONSE: Oui!

PS J'ai également Python Launcher pour Windows installé.

Amour et paix - Joe Codeswell
la source
0

Sous Windows 7, j'avais anaconda et anaconda3 installés. Je suis entré \Users\me\anaconda\Scriptset exécuté

sudo .\ipython kernelspec install-self

puis je suis entré \Users\me\anaconda3\Scriptset exécuté

sudo .\ipython kernel install

(J'ai eu jupyter kernelspec install-self is DEPRECATED as of 4.0. You probably want 'ipython kernel install' to install the IPython kernelspec.)

Après avoir démarré jupyter notebook(dans anaconda3), j'ai obtenu un menu déroulant soigné dans le coin supérieur droit sous "Nouveau" me permettant de choisir entre les noyaux Python 2 ou Python 3.

Krischu
la source
0
  • Si vous exécutez anaconda dans un environnement virtuel.
  • Et lorsque vous créez un nouveau bloc-notes mais que je ne montre pas pour sélectionner le noyau de l'environnement virtuel.
  • Ensuite, vous devez le définir dans le ipykernel en utilisant la commande suivante
$ pip install --user ipykernel
$ python -m ipykernel install --user --name=test2
Rahul Verma
la source