我想配置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)来完成所有这些工作(除非这是唯一的方法)。
答案 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。