(怎么样)我可以运行python 2.7& 3.4笔记本在jupyter(ipython)中并排?

时间:2015-08-27 19:51:51

标签: python python-2.7 python-3.x ipython-notebook jupyter

我想配置jupyter以允许我在两个不同的笔记本中同时并行运行python 2.7和3.4内核(或者甚至可以在一个笔记本中从一个切换到另一个)。

(1)这可能吗?

我问,因为在Using both Python 2.x and Python 3.x in IPython Notebook中有人建议这样做是可能的,但没有提供详细的答案,说明这将如何运作。

你也可以在https://try.jupyter.org中看到它看起来非常可行(你甚至可以从一个python 2内核切换到python 3内核)。所以我觉得有理由认为它确实可行(但如果我错了请纠正我)。

(2)这是怎么做的?

以前的答案(例如在Open IPython Notebook 2.7 and 3.4 in Parallel中)建议在两个不同的端口启动两个不同的 ipython笔记本服务器。当然,这是完全合乎逻辑且可能的,但回答我的问题。

我设法安装了ipython for 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}"
 ]
}

问题是,当我从python 2环境(定义了jupyter)启动$PYTHONPATH时,我只能运行一个python 2内核(另一个内核会在打开相应的笔记本时崩溃) 。同样,当我从python 3环境(定义{{​​1}})启动jupyter时。这通常对我有意义,但我想知道如何启动或配置$PYTHONPATH以允许两个内核从同一个jupyter实例运行,并仍指定我自己的特定jupyter我可以加载我的包裹。

我认为这是我的实际问题 - 在我开始$PYTHONPATH之前预先定义$PYTHONPATH。所以我打电话给:

jupyter

我现在确实可以从单个unset PYTHONPATH ipython notebook 实例运行两个内核(py2& 3),但是我无法从特定的本地目录加载python包。我想我可以在笔记本中手动执行此操作:

jupyter

但这真的是我应该这样做的方式吗?或者我可以配置我通常写在import sys sys.path.append("/some/path/lib/python2.7/site-packages") 其他地方的其他目录(例如$PYTHONPATH个文件吗?

PS:请不要问为什么我需要这个 - 不,我不真的需要它 - 但我仍然想知道这是否以及如何可能是可能的。

[编辑]

请注意,我不习惯安装一些python管理实用程序(如Anaconda)来完成所有这些工作(除非这是唯一的方法)。

1 个答案:

答案 0 :(得分:1)

我在Anaconda中安装了Python 2和3,其中3是主要安装,2是在主安装后完成的环境安装。默认情况下,在运行'ipython notebook'时,它只在启动它的shell中运行python的版本。在Python2处于活动状态时运行'ipython kernelspec install-self'并在Python3处于活动状态时再次运行,两者的内核都可以在IPython Notebook中使用,无论哪个版本的Python在启动它的shell中都处于活动状态。

鉴于'python2'是我的Python2环境的名称,'activate env'是用于激活名为'env'的环境的anaconda命令,'deactivate'是用于停用当前活动环境(如果有)的命令,我用来启用此配置的命令是:

activate python2
ipython kernelspec install-self
deactivate
ipython kernelspec install-self
IPhthon中的

sys.path根据当前运行的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:\ Users \ tn \ Documents \ python包含在两个版本的Python的sys.path中。

为了根据IPython Notebook的Python版本自定义sys.path,可以使用环境变量PYTHONSTARTUP(Python2)(另请参阅PYTHONSTARTUP(Python3))。此变量应包含可在交互模式启动期间执行的可读Python脚本。要与Python 2和3一起使用,它必须可由两者兼容。例如,在C:\ Users \ tn \ Documents \ python中,我创建了以下名为“start”的脚本,该脚本确定执行它的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。