2015-08-27 86 views
6

我想配置jupyter允許我在兩個不同的筆記本中同時運行python 2.7和3.4內核(或者甚至可以在一個筆記本中從一個筆記本轉換到另一個筆記本)。(How)我可以在jupyter(ipython)中並排運行python 2.7和3.4筆記本嗎?

(1)這可能嗎?

我在問,因爲在Using both Python 2.x and Python 3.x in IPython Notebook中建議這樣做是可能的,但沒有提供詳細的答案,說明這個方法的工作原理。

你也可以在看到它看起來非常可行(甚至可以從一個python 2內核切換到python 3內核)。所以我認爲有理由認爲這確實是可能的(但如果我錯了,請糾正我)。

(2)這是如何完成的?

以前的答案(例如,在Open IPython Notebook 2.7 and 3.4 in Parallel)建議在兩個不同端口開始2 不同 IPython的筆記本服務器。這當然是完全合乎邏輯和可能的,但是不是回答我的問題。

我設法安裝ipython爲Python 2 & 3.然後,我通過調用每個相應的Python環境下得到了兩個內核中jupyter露面:

ipython kernelspec install-self

這創造kernel.json文件對我來說我現在可以選擇其中任何一個在jupyter中創建一個新筆記本。爲Python 2的kernel.json例如:

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

的問題是,當我開始jupyter從蟒2環境(具有限定$PYTHONPATH),I只能運行蟒2內核(打開時,另一個將崩潰相應的筆記本)。同樣,當我從python 3環境($PYTHONPATH定義)開始jupyter。這通常對我有意義,但我想知道如何啓動或配置jupyter以允許兩個內核從相同的jupyter實例運行,並仍指定我自己的特定$PYTHONPATH s以能夠加載我的包。

我想這是我的實際問題 - 在我開始jupyter之前預定義$PYTHONPATH。於是我就打電話:

unset PYTHONPATH 
ipython notebook 

我現在確實是從一個單一的jupyter實例同時運行的內核(PY2 & 3),但我不能從特定的本地目錄中加載Python包。我想我可以在筆記本電腦中手動做到這一點:

import sys 
sys.path.append("/some/path/lib/python2.7/site-packages") 

但這是真的,我應該這樣做嗎?或者我可以配置額外的目錄,我通常在其他地方寫入$PYTHONPATH(例如那個kernel.json文件?

PS:請不要問爲什麼需要這個 - 不,我不真的需要它 - 但我仍想知道是否和如何這是可能的。

[編輯]

請注意,我會不舒服安裝一些Python管理實用程序(如蟒蛇)來完成這一切,(除非它是唯一的方法)。

+0

好的,我一路回答了一些最初的問題,但請讓我知道你是否可以幫助'$ PYTHONPATH'部分:)謝謝! – Chris

回答

1

我有安裝在Anaconda中的Python 2和3,其中3是主安裝,2是主安裝後完成的環境安裝。默認情況下,運行'ipython notebook'時,它只運行啓動的shell的python active版本。在Python2處於活動狀態時運行'ipython kernelspec install-self'後,當Python3處於活動狀態時再次運行時,兩者的內核都可以在IPython Notebook中使用,而不管在啓動它的shell中哪個版本的Python處於活動狀態。

鑑於'python2'是我的Python2環境的名稱,'activate env'是用於激活名爲'env'的環境的anaconda命令,'deactivate'是停用當前活動環境的命令(如果有的話) ,我用來啓用該配置命令是:

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

sys.path中在IPython的筆記本改變動態地和適當地取決於Python的版本,它目前運行。當它運行時Python2所述的sys.path是:

['', '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'] 

切換內核Python3後,sys.path中變爲:

['', '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:\用戶\ TN \文件\蟒被包括在兩個版本的Python的sys.path中。

爲了根據Python版本爲IPython Notebook定製sys.path,可以使用環境變量PYTHONSTARTUP(Python2)(也可參見PYTHONSTARTUP(Python3))。這個變量應該包含一個可讀的Python腳本,它將在交互模式啓動時執行。爲了與Python 2和Python 3一起使用,它必須是可執行的。例如,在C:\用戶\ TN \文檔\ python的我創建了一個名爲「開始」下面的腳本來確定的Python的主要版本執行,並追加在到sys.path中結束的路徑:

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

現在,在重新啓動IPython Notebook時,使用Python 2 sys.path [-1]是C:\ Users \ tn \ Documents \ python \ 2,而對於Python 3,它是C:\ Users \ tn \ Documents \ python \ 3。

+0

謝謝,我會看看'PYTHONSTARTUP',但是我應該提到我不是(也不想)使用anaconda。 – Chris

相關問題