【问题标题】:(How) Can I run python 2.7 & 3.4 notebooks side-by-side in jupyter (ipython)? [duplicate](如何)我可以在 jupyter(ipython)中并排运行 python 2.7 和 3.4 笔记本吗? [复制]
【发布时间】:2015-11-22 08:40:21
【问题描述】:

我想配置 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 notebook 服务器。这当然是完全合乎逻辑和可能的,但是回答了我的问题。

我设法为 python 2 和 3 安装了ipython。然后我通过在每个相应的 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 环境(定义了 $PYTHONPATH)启动 jupyter 时。这对我来说通常很有意义,但我想知道如何启动或配置 jupyter 以允许两个内核从同一个 jupyter 实例运行,并且仍然指定我自己的特定 $PYTHONPATHs 以便能够加载我的包裹。

我认为这是我的实际问题 - 在开始 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 管理实用程序(例如 Anaconda)来完成所有这些工作,(除非它是唯一的方法)。

【问题讨论】:

  • 好的,我已经回答了我最初的一些问题,但是如果你能帮忙解决 $PYTHONPATH 部分,请告诉我 :) 谢谢!

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


【解决方案1】:

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

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

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

IPython Notebook 中的 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.

【讨论】:

  • 谢谢,我会看看PYTHONSTARTUP,但我应该提到我没有(也不想)使用anaconda。
猜你喜欢
  • 2018-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-28
  • 2016-05-30
  • 2015-03-12
  • 1970-01-01
相关资源
最近更新 更多