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

时间:2019-06-21 13:52:01

标签: python windows jupyter-notebook jupyter

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

目标:

使用默认设置Python 3.5.6设置Anaconda,并创建两个具有Python 2.7.13Python 3.7.3版本的虚拟环境,并能够在{{1 }}。

已执行的过程:我做了什么(结果一团糟):

我首先成功安装了默认值为Windows(安装在Python 3.5.6中的Anaconda3,并设置了PATH变量。 Jupyter Notebook已启动并运行了一个ipython内核,该内核从的“基本”(或根)运行

C:\ProgramData\Anaconda3

(base) jupyter kernelspec list Available kernels: python_3.5.6 C:\Users\username\AppData\Roaming\jupyter\kernels\python_3.5.6 文件也已映射到正确的python版本。

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

kernel.json

并在其上安装了jupyter

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

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

(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"

(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版本(kernel.json

这也很好。我可以在jupyter中打开一个文件,然后在两个内核之间成功切换。

与创建我的第二个虚拟环境(Python_3.7.3_ENV)遵循的步骤相同:

现在,更新的kernelspec读为:

"C:\\ProgramData\\Anaconda3\\envs\\Python_2.7.13\\python.exe"

(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 也已映射到正确的python版本。

问题:

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

如果我可以使用Py 2.7和Py 3.5版本,是否可以在不预先激活虚拟环境的情况下提供在所有三个版本之间切换的解决方案。

PS。我已将右键单击ipynb文件的“打开方式”默认设置为Python_3.7.3_ENV

2 个答案:

答案 0 :(得分:1)

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

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

检查您的Anaconda版本,如果它是'> = 4.1.0',则更容易,因为4.1.0之后,anaconda包含一个特殊的软件包nb_conda_kernels,该软件包可以检测笔记本内核的conda环境并自动注册它们。如果Anaconda版本低于4.1.0或仅想手动执行此操作,则可以引用here

  • 对于python2.7并将ipykernel添加到jupyter笔记本中,显示为'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笔记本中,显示为'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笔记本中使用!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笔记本内核列表

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

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

jupyter kernelspec uninstall <kernel name>

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

为此,请使用jupyter kernelspec list,以便您了解json文件的路径。 (例如,对于我来说,我可以获取py27的路径:C:\Users\username\AppData\Roaming\jupyter\kernels\py27)。然后,您可以转到目录/路径,然后检查kernel.json

中显示的内容

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

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

  • 关于设置PATH env变量的最后一件事请勿将Anaconda添加到Windows PATH中,因为这可能会干扰其他软件。而是使用“开始”菜单打开Anaconda,然后选择Anaconda Prompt,或使用Anaconda Navigator。更多信息可以查看Anaconda official docs

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

PS:我一直在使用Unix之类的系统,而不是习惯于Windows环境设置。这就是我为不同的anaconda env设置不同的内核并进行总结所遇到的。希望能帮助到你。

答案 1 :(得分:0)

在此之后,唯一要做的就是激活该虚拟环境。

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

  

如何使用它们?

  • 对于Python 2.7 3.5 ,只需正常使用Jupyter notebooks就可以了。由于默认的python设置为Python 3.5.6,因此使用Change Kernel工具栏中的Jupyter Notebook选项在两个版本之间切换没有问题。

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