2015-08-27 6 views
6

Ich möchte Jupyter konfigurieren, damit ich Python 2.7 und 3.4 Kernel gleichzeitig nebeneinander in zwei verschiedenen Notebooks ausführen kann (oder sogar von einem zum anderen in einem einzigen Notebook wechseln kann).(Wie) Kann ich Python 2.7 & 3.4 Notebooks nebeneinander in jupyter (ipython) ausführen?

(1) Ist das möglich?

Ich frage seit es in Using both Python 2.x and Python 3.x in IPython Notebook vorgeschlagen wurde, dass dies möglich wäre, aber keine ausführliche Antwort wurde zur Verfügung gestellt, wie genau das funktionieren würde.

Sie können auch in https://try.jupyter.org sehen, dass es irgendwie sehr machbar scheint (und Sie können sogar von einem Python 2-Kernel zu einem Python 3-Kernel wechseln). Ich finde es also vernünftig anzunehmen, dass es tatsächlich möglich ist (aber bitte korrigieren Sie mich, wenn ich falsch liege).

(2) Wie wird das gemacht?

Vorherige Antworten (beispielsweise in Open IPython Notebook 2.7 and 3.4 in Parallel) empfehlen bei zwei verschiedenen Ports zwei verschiedene ipython Notebook-Server zu starten. Dies ist natürlich völlig logisch und möglich, aber beantwortet meine Frage NICHT.

ipython kernelspec install-self

Diese erstellt kernel.json Dateien für mich: in jupyter zu zeigen, indem Sie den folgenden in der jeweiligen Python-Umgebung aufrufen

schaffte ich ipython für Python zu installieren 2 & 3. ich beide Kerne dann bekam und ich könnte jetzt eine davon auswählen, um ein neues Notizbuch in jupyter zu erstellen. Beispiel für kernel.json für Python 2:

{ 
"display_name": "Python 2", 
"language": "python", 
"argv": [ 
    "/usr/local/opt/python/bin/python2.7", 
    "-m", 
    "ipykernel", 
    "-f", 
    "{connection_file}" 
] 
} 

Das Problem ist, wenn ich jupyter aus einem Python-2-Umgebung (mit $PYTHONPATH definiert) beginnen, kann ich nur ein Python-2-Kernel (der andere wird abstürzen, wenn die Öffnung entsprechendes Notizbuch). Das gleiche, wenn ich jupyter von einer Python 3-Umgebung starte (mit $PYTHONPATH definiert). Dies macht im Allgemeinen Sinn für mich, aber ich würde gerne wissen, wie jupyterjupyter zu starten, damit beide Kernel von der gleichen jupyter Instanz ausgeführt werden können, und noch meine eigene spezifische $PYTHONPATH s angeben, um meine Pakete laden zu können.

Ich dachte, das ist mein aktuelles Problem - $PYTHONPATH vor dem Start jupyter vorgeben. Also rief ich:

unset PYTHONPATH 
ipython notebook 

Ich kann jetzt in die Tat beiden Kerne läuft (py2 & 3) aus einer einzigen jupyter Instanz, aber ich kann nicht Python-Pakete von bestimmten lokalen Verzeichnissen laden. Ich denke, ich könnte dies manuell im Inneren des Notebooks mit:

tun, aber ist das wirklich die Art, wie ich es tun sollte? oder kann ich zusätzliche Verzeichnisse konfigurieren, die ich normalerweise in $PYTHONPATH woanders schreibe (z. B. die kernel.json Datei?

PS: Bitte nicht fragen, warum Ich brauche das - nein, ich weiß nicht wirklich es braucht - aber ich würde trotzdem gerne wissen, ob und wie dies möglich sein könnte.

[EDIT]

Bitte beachten Sie, dass ich nicht bequem sein würde einige Python-Management-Programm (wie Anaconda) Installation all dies zu erreichen, (es sei denn, es ist der einzige Weg).

+0

OK, ich habe einige meiner ersten Fragen auf dem Weg beantwortet, aber lass es mich wissen, wenn du mit dem '$ PYTHONPATH' Teil helfen kannst :) Danke! – Chris

Antwort

1

Ich habe Python 2 und 3 in Anaconda installiert, wobei 3 die Hauptinstallation und 2 eine Umgebungsinstallation nach der Hauptinstallation ist. Standardmäßig wird beim Ausführen von 'ipython notebook' nur die Version von python ausgeführt, die in der Shell aktiv ist, in der es gestartet wurde. Nach dem Ausführen von 'ipython kernelspec install-self' bei aktivem Python2 und erneutem aktivem Python3 sind Kernel für beide in IPython Notebook verfügbar, unabhängig davon, welche Version von Python in der Shell aktiv war, von der es gestartet wurde.

Da 'python2' der Name meiner Python2-Umgebung ist, 'activate env' ist der anaconda-Befehl zum Aktivieren einer Umgebung namens 'env' und 'deaktivieren' ist der Befehl zum Deaktivieren der derzeit aktiven Umgebung (falls vorhanden) die Befehle, die ich verwendet diese Konfiguration zu ermöglichen, waren:

activate python2 
ipython kernelspec install-self 
deactivate 
ipython kernelspec install-self 

sys.path in IPython Notebook ändert sich dynamisch und in geeigneter Weise auf die Version von Python abhängig, dass es zur Zeit läuft. Wenn es läuft Python2 die sys.path ist:

['', 'C:\\Users\\tn\\Documents\\python', 'C:\\Anaconda3\\envs\\python2\\python27.zip', 'C:\\Anaconda3\\envs\\python2\\DLLs', 'C:\\Anaconda3\\envs\\python2\\lib', 'C:\\Anaconda3\\envs\\python2\\lib\\plat-win', 'C:\\Anaconda3\\envs\\python2\\lib\\lib-tk', 'C:\\Anaconda3\\envs\\python2', 'C:\\Users\\tn\\AppData\\Roaming\\Python\\Python27\\site-packages', 'C:\\Anaconda3\\envs\\python2\\lib\\site-packages', 'C:\\Anaconda3\\envs\\python2\\lib\\site-packages\\Sphinx-1.3.1-py2.7.egg', 'C:\\Anaconda3\\envs\\python2\\lib\\site-packages\\cryptography-0.9.1-py2.7-win-amd64.egg', 'C:\\Anaconda3\\envs\\python2\\lib\\site-packages\\win32', 'C:\\Anaconda3\\envs\\python2\\lib\\site-packages\\win32\\lib', 'C:\\Anaconda3\\envs\\python2\\lib\\site-packages\\Pythonwin', 'C:\\Anaconda3\\envs\\python2\\lib\\site-packages\\setuptools-18.1-py2.7.egg', 'C:\\Anaconda3\\envs\\python2\\lib\\site-packages\\IPython\\extensions'] 

Nachdem der Kernel zu Python3 Makeln, sys.path wird:

['', 'C:\\Users\\tn\\Documents\\python', 'C:\\Anaconda3\\python34.zip', 'C:\\Anaconda3\\DLLs', 'C:\\Anaconda3\\lib', 'C:\\Anaconda3', 'C:\\Anaconda3\\lib\\site-packages', 'C:\\Anaconda3\\lib\\site-packages\\Sphinx-1.3.1-py3.4.egg', 'C:\\Anaconda3\\lib\\site-packages\\cryptography-0.9.1-py3.4-win-amd64.egg', 'C:\\Anaconda3\\lib\\site-packages\\win32', 'C:\\Anaconda3\\lib\\site-packages\\win32\\lib', 'C:\\Anaconda3\\lib\\site-packages\\Pythonwin', 'C:\\Anaconda3\\lib\\site-packages\\setuptools-18.1-py3.4.egg', 'C:\\Anaconda3\\lib\\site-packages\\IPython\\extensions'] 

PYTHONPATH = C: \ Users \ tn \ Documents \ Python enthalten ist in sys.path für beide Versionen von Python.

Um sys.path je nach Python-Version für IPython Notebook anzupassen, kann die Umgebungsvariable PYTHONSTARTUP (Python2) (siehe auch PYTHONSTARTUP (Python3)) verwendet werden. Diese Variable sollte ein lesbares Python-Skript enthalten, das beim Start des interaktiven Modus ausgeführt wird. Zur Verwendung mit Python 2 und 3 muss es von beiden ausführbar sein. Zum Beispiel in C: \ Benutzer \ tn \ Dokumente \ Python ich das folgende Skript erstellt mit dem Namen ‚Start‘, das die Hauptversion von Python Ausführung bestimmt sie und fügt einen Pfad in das zu sys.path endet:

import sys 
v = sys.version_info[0] 
if v == 2 or v == 3: 
    sys.path.append(r'C:\Users\tn\Documents\python' + '\\' + str(v)) 

Nach dem Neustart von IPython Notebook ist nun mit Python 2 sys.path [-1] C: \ Benutzer \ tn \ Dokumente \ python \ 2, während es in Python 3 C: \ Benutzer \ tn \ Dokumente \ python \ 3 ist.

+0

Danke, ich schaue mir 'PYTHONSTARTUP' an, aber ich hätte wahrscheinlich erwähnen sollen, dass ich Anakonda nicht benutze (und will). – Chris

Verwandte Themen