在IPython Notebook中同时使用Python 2.x和Python 3.x

267

我使用IPython笔记本,并希望能够选择在IPython中创建2.x或3.x Python笔记本。

一开始我使用的是Anaconda。使用Anaconda需要更改全局环境变量以选择所需的Python版本,然后才能启动IPython。这不是我想要的,所以我卸载了Anaconda,现在使用MacPorts和PiP安装自己的Python环境。看来我仍然需要使用

port select --set python <python version> 

如何在IPython笔记本启动后选择要使用的Python版本,最好使用当前的MacPorts构建,这比anaconda解决方案更好。


2
相关内容:https://dev59.com/fV4b5IYBdhLWcg3wqDSj - cel
...和https://dev59.com/_FMH5IYBdhLWcg3w1Dn0#58068850 - Jason S
11个回答

353

这里的想法是安装多个 ipython 内核。以下是适用于 Anaconda 的说明。如果您没有使用 Anaconda,我最近添加了使用纯虚拟环境的说明

Anaconda >= 4.1.0

自版本 4.1.0 起,Anaconda 包含一个特殊的包 nb_conda_kernels,它可以检测带有笔记本内核的 conda 环境并自动注册它们。这使得使用新的 Python 版本与创建新的 conda 环境一样容易:

conda create -n py27 python=2.7 ipykernel
conda create -n py36 python=3.6 ipykernel

在重启jupyter notebook后,可以通过图形界面使用新的内核。请注意,新的软件包必须明确安装到新环境中。conda文档中的“管理环境”一节提供了进一步的信息。

手动注册内核

不想使用nb_conda_kernels或仍使用旧版本anaconda的用户可以使用以下步骤手动注册ipython内核。

配置python2.7环境:

conda create -n py27 python=2.7
conda activate py27
conda install notebook ipykernel
ipython kernel install --user

配置Python3.6环境:

conda create -n py36 python=3.6
conda activate py36
conda install notebook ipykernel
ipython kernel install --user

之后,您应该能够在界面中创建新笔记本时选择 python2python3

如果您想更改内核的名称,还可以通过传递 --name--display-name 选项给 ipython kernel install。有关更多信息,请参见 ipython kernel install --help


@deltap,是的,我们的解决方案非常相似。唯一的区别在于你的解决方案需要 root 访问权限,因为它不使用 virtualenv。我个人更喜欢 virtualenvs,但这只是一种口味问题吧。如果它能正常运行,那就没问题了 :) - cel
9
如果你想在不需要管理员权限的情况下设置内核规范,可以运行命令 ipython kernelspec install-self --user 以为当前用户安装内核规范。 - Thomas K
1
我已经搞定了!你的答案帮了大忙! https://www.dropbox.com/s/6ayqf55ctkv2xgk/Screenshot%202015-08-25%2005.41.41.png?dl=0 - Clever Programmer
7
重点是你必须安装nb_conda_kernels,它没有随我的初始Anaconda一起安装!谢谢! - dartdog
1
@cel,实际上我从jupyter启动的环境默认没有安装nb_conda_kernels包。我没有花时间阅读所有评论:也许你可以编辑你的答案并包括dartdog的评论。 - Antoine Gautier
显示剩余33条评论

299

56
如果你已经安装好了Python 2,需要Python 3的话,请将“2”替换为“3”。我不明白为什么这不是最佳答案,它完全符合奥卡姆剃刀原理,并且对我有效。 - wordsforthewise
6
完美运作,确实应该是第一个答案。 - JSmyth
2
Python2命令是否包含在Python本身中?请详细解释一下这个答案。 :) - verystrongjoe
3
可以使用这种方法,但它与我的系统Python 2及其附加包没有关联。有没有一种方法可以链接到现有的Python二进制可执行文件? - Rutger Hofste
1
在Win10中完美运行,只需将python2替换为your\path\to\python(2).exe - Lucien
显示剩余6条评论

45

这些说明解释了如何为非Anaconda用户在单独的虚拟环境中安装Python2和Python3内核。如果您使用的是Anaconda,请查找我其他答案,该答案直接针对Anaconda进行了定制。

我假设您已经安装了jupyter notebook


首先确保您有一个可用 pippython2python3 解释器。

在Ubuntu上,你可以通过以下方式安装:

sudo apt-get install python-dev python3-dev python-pip python3-pip

接下来,准备并注册内核环境。

python -m pip install virtualenv --user

# configure python2 kernel
python -m virtualenv -p python2 ~/py2_kernel
source ~/py2_kernel/bin/activate
python -m pip install ipykernel
ipython kernel install --name py2 --user
deactivate

# configure python3 kernel
python -m virtualenv -p python3 ~/py3_kernel
source ~/py3_kernel/bin/activate
python -m pip install ipykernel
ipython kernel install --name py3 --user
deactivate

为了方便起见,您可能希望将激活命令的shell别名添加到您的Shell配置文件中。根据您使用的系统和Shell,这可以是例如 ~/.bashrc~/.bash_profile~/.zshrc

alias kernel2='source ~/py2_kernel/bin/activate'
alias kernel3='source ~/py3_kernel/bin/activate'

重启你的 shell 后,激活你想要使用的环境后,你现在可以安装新的包。

kernel2
python -m pip install <pkg-name>
deactivate

或者
kernel3
python -m pip install <pkg-name>
deactivate

我完全按照这个步骤操作,安装了pandas,启动了jupyter,并切换到py3内核:但是导入pandas时出现了“未找到”的错误,这让我感到非常烦恼。 - user1255933
1
@user1255933,这很可能是由于使用错误的pip版本进行安装。如果激活目标环境失败或者它不包含pip版本,则会发生这种情况。您可能会发现我的答案在这里很有趣:https://dev59.com/HVwY5IYBdhLWcg3wYm8B#32680082。 - cel
感谢您提供的有关使用非Anaconda方式安装内核的指导。 - mdivk

40

使用当前版本的Notebook/Jupyter,您可以创建一个Python3内核。在使用Python 2从命令行启动新的笔记本应用程序后,您应该在“New”下拉菜单中看到一个条目“Python 3”。这将为您提供一个使用Python 3的笔记本。因此,您可以同时拥有两个具有不同Python版本的笔记本。

详细信息

  1. Create this directory: mkdir -p ~/.ipython/kernels/python3
  2. Create this file ~/.ipython/kernels/python3/kernel.json with this content:

    {
        "display_name": "IPython (Python 3)", 
        "language": "python", 
        "argv": [
            "python3", 
            "-c", "from IPython.kernel.zmq.kernelapp import main; main()", 
            "-f", "{connection_file}"
        ], 
        "codemirror_mode": {
            "version": 2, 
            "name": "ipython"
        }
    }
    
  3. Restart the notebook server.

  4. Select „Python 3“ from the dropdown menu „New“
  5. Work with a Python 3 Notebook
  6. Select „Python 2“ from the dropdown menu „New“
  7. Work with a Python 2 Notebook

这很棒,我正在尝试让它工作,但您能否指定在这种情况下如何启动jupyter(我必须运行ipython notebookipython3 notebook)。现在我只能运行其中一个(具有各自的环境,但我确实在jupyter中看到两个内核都列出)。您可以扩展您的答案以包括如何启动jupyter,以便我可以并排运行python2python3吗?谢谢! - Chris
1
好的,我想我弄清楚了 - 我必须调整~/Library/Jupyter/kernels/python3/(在OS X上)内的kernel.json文件,并添加链接文件中提到的参数。 - Chris
@Chris 是的,虽然链接后面的描述是在IPython笔记本中给出的,但它也可以在编辑器中完成。只需在给定路径下创建或修改一个特定名称的文件,并显示所示内容即可。很高兴你解决了你的问题。 - Mike Müller
我建议您编辑您的答案,将该链接中的详细信息包含在内。答案不应该将最重要的部分隐藏在链接“后面”。 - Chris
1
@Chris 从链接中添加了详细信息。 - Mike Müller
显示剩余3条评论

24

有一种解决方案可通过配置IPython kernelspec来保留我的MacPorts安装。

要求:

  • MacPorts已安装在通常的/opt目录中
  • 通过MacPorts安装了Python 2.7
  • 通过MacPorts安装了Python 3.4
  • 已为Python 2.7安装了IPython
  • 已为Python 3.4安装了IPython

对于Python 2.x:

$ cd /opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin
$ sudo ./ipython kernelspec install-self

对于 Python 3.x:

$ cd /opt/local/Library/Frameworks/Python.framework/Versions/3.4/bin
$ sudo ./ipython kernelspec install-self
现在你可以打开一个Ipython笔记本,然后选择一个Python 2.x或Python 3.x的笔记本。

选择你的Python版本!


请问您能否确认在同一个jupyter实例中,您可以同时运行python2python3内核的笔记本?如果是这样,请问如何启动jupyter以避免冲突路径?目前我只能通过事先设置适当的$PATH $PYTHONPATH环境来运行python2python3代码。有没有什么方法可以避免这种情况? - Chris
我可以运行Python2或Python3内核的笔记本。 - deltap
你如何启动 jupyter (假设它已经安装在 python 2.7python 3.4 上)?你是否定义了 $PYTHONPATH 或者激活了某个虚拟环境?你只是调用了 ipython notebook 吗?如果是这样,那么它指的是哪个 ipython - 是安装在 2.7 还是 3.4 上的? - Chris
我只是在调用 python notebookwhich ipython 显示它指向 /opt/local/Library/Frameworks/Python.framework/Versions/3.4/bin/ipython - deltap
好的,我找到了问题所在,它与预定义的 $PYTHONPATH 有关,这使得切换内核变得困难。在启动 ipython 之前,我必须 unset PYTHONPATH,现在它可以工作了。 - Chris

19

2
我讨厌随意粘贴命令到我的Ubuntu安装中,但这确实对我起作用了。 - Joseph
我听到你了!我刚刚添加了文档参考,就是我找到它的地方。 - mimoralea
1
应该是被选中的答案。 - e9t
1
简明扼要,我已经在Mac OS X上应用了这个解决方案,没有任何问题。 - Konrad
1
我尝试了所有的答案,但这个对我有效。如果你在Ubuntu上,可以试试看。 - sinsuren
1
我在哪里可以获取 ipython2 - sudo

6
以下是将Python2内核添加到Jupyter Notebook的步骤:
1. 打开终端并创建一个新的Python 2环境:`conda create -n py27 python=2.7`
2. 激活该环境:对于Linux,使用`source activate py27`,对于Windows,使用`activate py27`
3. 在该环境中安装内核:`conda install notebook ipykernel`
4. 为环境外安装内核:`ipython kernel install --user`
5. 关闭该环境:`source deactivate`
虽然回答晚了,但希望有人会觉得有用 :p

这并没有增加任何超出@cel的答案已经明确说明的内容。 - merv

3

使用sudo pip3 install jupyter命令来安装Python3版本的Jupyter,使用sudo pip install jupyter命令来安装Python2版本的Jupyter Notebook。然后,你可以调用ipython kernel install命令,在Jupyter Notebook中启用两种类型的Notebook来选择。


1
我看了这个很好的信息,然后想知道,由于
  1. 我已经安装了Python2、Python3和IPython,
  2. 我已经安装了PyCharm,
  3. PyCharm 使用 IPython 作为其 Python 控制台,
如果 PyCharm 在菜单>文件>设置>项目>项目解释器==py2 时使用 IPython-py2,而在菜单>文件>设置>项目>项目解释器==py3 时使用 IPython-py3, 答案是:是的! P.S. 我也安装了 Windows 的 Python 启动器。

0
  • 如果您正在虚拟环境中运行Anaconda。
  • 当您创建一个新的笔记本时,却没有显示选择虚拟环境内核。
  • 那么您需要使用以下命令将其设置为ipykernel。
$ pip install --user ipykernel
$ python -m ipykernel install --user --name=test2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接