繁体   English   中英

通过多个内核在 Jupyter Notebook 上运行多个 Python 版本(2.x. 3.y、3.z)

[英]Running multiple Python versions (2.x. 3.y, 3.z) on Jupyter Notebook via multiple kernels

如果我在下面提出的问题中犯了一些愚蠢的错误,请直接道歉。 很长一段时间以来,我一直坚持这一点,试图成功安装多个 Python 版本(通过单独的虚拟环境)并在Change kernel开关中运行具有所有三个版本的Jupyter notebook

目的:

默认使用Python 3.5.6设置 Anaconda,并使用Python 2.7.13Python 3.7.3版本创建两个虚拟环境,并且能够在Windows上的 Jupyter Notebook 上在这三个 Python 版本之间切换。

过程如下:我做了什么(结果一团糟):

我首先使用Python 3.5.6作为默认值成功安装了 Anaconda3(安装在C:\\ProgramData\\Anaconda3 )并设置了 PATH 变量。 Jupyter Notebook 启动并运行了一个 ipython 内核,该内核从“base”(或 root)运行

(base)  jupyter kernelspec list
Available kernels:
python_3.5.6          C:\Users\username\AppData\Roaming\jupyter\kernels\python_3.5.6

并且kernel.json文件也被映射到正确的 python 版本。

.

然后我创建了我的第一个虚拟环境(Python_2.7.13_ENV):

(base)  conda create --p C:\ProgramData\Anaconda3\envs\Python_2.7.13_ENV python=2.7.13

并在其上安装了 jupyter

(base)  activate Python_2.7.13_ENV
(Python_2.7.13_ENV)  conda install notebook ipykernel
(Python_2.7.13_ENV)  python -m ipykernel install --p C:\Users\username\AppData\Roaming\jupyter\kernels\ --name Python_2.7.13_ENV --display-name "python_2.7.13"

我使用前缀表示法,因为默认安装语法是为 root 用户安装它,我希望它只为特定用户安装它。 这就像一个魅力。 更新后的 jupyter kernelspec 内容如下:

(base)  jupyter kernelspec list
Available kernels:
python_3.5.6        C:\Users\username\AppData\Roaming\jupyter\kernels\python_3.5.6
python_2.7.13       C:\Users\username\AppData\Roaming\jupyter\kernels\python_2.7.13

并且kernel.json文件也被映射到正确的 python 版本( "C:\\\\ProgramData\\\\Anaconda3\\\\envs\\\\Python_2.7.13\\\\python.exe"

这也工作正常。 我可以在 jupyter 中打开一个文件并成功地在两个内核之间切换。

.

比我按照相同的步骤创建我的第二个虚拟环境(Python_3.7.3_ENV):

现在,更新后的 kernelspec 内容如下:

(base)  jupyter kernelspec list
Available kernels:
python_3.5.6     C:\Users\username\AppData\Roaming\jupyter\kernels\python_3.5.6
python_2.7.13    C:\Users\username\AppData\Roaming\jupyter\kernels\python_2.7.13
python_3.7.3     C:\Users\username\AppData\Roaming\jupyter\kernels\python_3.7.3

并且kernel.json也被映射到正确的 python 版本。

问题:

  • 两个虚拟环境都已成功创建。
  • 现在,当我运行 jupyter notebook 并尝试切换到Python 2.7.13 kernel ,它工作正常,但在切换到Python_3.7.3 kernel显示ImportError: DLL load failed (due to some import issue in zmq)
  • 但是,当我第一次激活Python_3.7.3_ENV虚拟环境然后加载 jupyter notebook 时,我可以在所有三个 Python 版本之间切换。

如果可能的话,任何人都可以提供有关如何在所有三个版本之间切换的解决方案,而无需事先激活虚拟环境,因为我可以使用 Py 2.7 和 Py 3.5 版本来做到这一点。

附注。 我已将右键单击 ipynb 文件时的“打开方式”默认设置为jupyter-notebook.exe

我有类似的设置:默认 python 3.7,环境:python 3.6 和 python 2.7。

  • 设置在 jupyter notebook 上运行的多个版本的 python/ipykernels

检查您的 Anaconda 版本,如果它是 '>= 4.1.0', nb_conda_kernels容易,因为在 4.1.0 之后,anaconda 包含一个特殊的包nb_conda_kernels ,它可以检测带有笔记本内核的nb_conda_kernels环境并自动注册它们。 如果 Anaconda 版本低于 4.1.0 或者只是想手动操作,可以参考这里

  • 对于 python2.7 并将 ipykernel 添加到 jupyter notebook,显示为“Python (py27)”
conda create -n py27 python=2.7 ipykernel
conda activate py27
python -m ipykernel install --user --name=py27 --display-name "Python (py27)"
  • 对于 python3.6 并将 ipykernel 添加到 jupyter notebook,显示为“Python (py36)”
conda create -n py36 python=3.6 ipykernel
conda activate py36
python -m ipykernel install --user --name=py36 --display-name "Python (py36)"
  • 然后我们可以检查它们是否运行良好。 您可以从特定环境停用并返回到base ,然后键入jupyter notebook (或使用 jupyter notebook anaconda 提供的图形快捷方式)然后您可以创建“新”笔记本,除了默认的Python 3之外,您还可以找到显示Python (py27)Python (py36)

一开始我在检查哪个python正在运行时犯了错误:

无论您使用的是哪个版本的内核,都不要只在 jupyter notebook 中使用!python --version 。因为这就像您在base env 中运行命令一样,它将始终显示默认的 env python 版本,在我的情况下是 python 3.7 。X。

你可以做什么:

from platform import python_version
print(python_version())

## or this one, which ever you like. 
import sys
print(sys.executable)
print(sys.version)
print(sys.version_info)

您将相应地获得正确的 python 版本。

  • 显示 jupyter notebook 内核列表

jupyter kernelspec list (在base ,它将显示所有内核名称)

如果要删除特定内核,可以使用:

jupyter kernelspec uninstall <kernel name>

  • 另一种确认python版本正确的方法,您可以检查ipykernel json文件,是否启动python的路径正确。

为此:使用jupyter kernelspec list ,以便您了解json文件的路径。 (例如,在我的情况下,我可以获得 py27 的路径: C:\\Users\\username\\AppData\\Roaming\\jupyter\\kernels\\py27 )。 然后,您可以转到目录/路径,您可以检查kernel.json显示的kernel.json

对于argv ,它应该显示访问相关 python 版本的路径。 例如,

  • 对于 py27,它将显示为"C:\\\\Users\\\\username\\\\Anaconda3\\\\envs\\\\py27\\\\python.exe",
  • 对于 py36,它将显示为"C:\\\\Users\\\\username\\\\Anaconda3\\\\envs\\\\py36\\\\python.exe"

  • 关于设置PATH变量的最后一件事不要将 Anaconda 添加到 Windows PATH,因为这会干扰其他软件。 相反,使用开始菜单打开 Anaconda 并选择 Anaconda Prompt,或使用 Anaconda Navigator。 更多信息可以查看Anaconda官方文档

如果您遇到类似问题,希望这可能会有所帮助。

PS:我一直使用类Unix系统,不太习惯Windows env设置。 这就是我为不同的 anaconda envs 设置不同内核时遇到的情况,并对其进行了总结。 希望能帮助到你。

在这里和那里之后,唯一要做的就是激活那个虚拟环境。

按照上述步骤,我已经安装了Python 2.7.13、3.5.63.7.3版本。 我的默认 python 是 Python 3.5.6,而其他两个版本分别安装在两个虚拟环境中 - Python_2.7.13_ENVPython_3.7.3_ENV

如何使用它们?

  • 对于 Python 2.73.5 ,只需Jupyter notebooks使用Jupyter notebooks 由于默认 python 设置为Python 3.5.6因此使用Jupyter Notebook Toolbar 中的Change Kernel选项在两个版本之间切换是没有问题的。

  • 对于 Python 3.7,我们首先需要激活Python_3.7.3_ENV虚拟环境,然后我们可以使用Jupyter Notebook Change Kernel选项在所有三个版本之间成功Change Kernel

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM