[英]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.13
和Python 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 版本。
问题:
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。
检查您的 Anaconda 版本,如果它是 '>= 4.1.0', nb_conda_kernels
容易,因为在 4.1.0 之后,anaconda 包含一个特殊的包nb_conda_kernels
,它可以检测带有笔记本内核的nb_conda_kernels
环境并自动注册它们。 如果 Anaconda 版本低于 4.1.0 或者只是想手动操作,可以参考这里。
conda create -n py27 python=2.7 ipykernel
conda activate py27
python -m ipykernel install --user --name=py27 --display-name "Python (py27)"
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 kernelspec list
(在base
,它将显示所有内核名称)
如果要删除特定内核,可以使用:
jupyter kernelspec uninstall <kernel name>
json
文件,是否启动python的路径正确。 为此:使用jupyter kernelspec list
,以便您了解json
文件的路径。 (例如,在我的情况下,我可以获得 py27 的路径: C:\\Users\\username\\AppData\\Roaming\\jupyter\\kernels\\py27
)。 然后,您可以转到目录/路径,您可以检查kernel.json
显示的kernel.json
对于argv
,它应该显示访问相关 python 版本的路径。 例如,
"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.6和3.7.3版本。 我的默认 python 是 Python 3.5.6,而其他两个版本分别安装在两个虚拟环境中 - Python_2.7.13_ENV
和Python_3.7.3_ENV
。
如何使用它们?
对于 Python 2.7和3.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.