使VSCode的中的Jupyter Notebook访问同conda环境下的依赖
作为Python的一个依赖管理工具,Anaconda实现了Pip「全局安装」和virtualenv「本地安装」的折衷,它使用「按名访问」的方式实现环境的隔离,使使用者能够灵活的隔离和共享环境。
然而要使用Anaconda+Jupyter+VSCode这一套组合拳可有不少坑。
按照常识,在一个conda环境下安装Jupyter后应该可以直接访问对应环境下的包
conda create -n test python=3.8
conda install pytorch
在VSCode中选择名为test的conda环境,新建Jupyter notebook,执行
import torch
提示找不到torch这个包
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
<ipython-input-1-fbdd1ce2ac00> in <module>
----> 1 import torch
ModuleNotFoundError: No module named 'torch'
而从直接运行Python解释器却一切正常
Python 3.8.5 (default, Sep 3 2020, 21:29:08) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> torch.__version__
'1.7.0'
在notebook中执行
import sys
print(sys.executable)
发现Jupyter notebook使用了默认conda环境中的python作为kernel
C:\Users\anaconda3\python.exe
要解决这个问题,需要将test环境下的python暴露出来。
执行
conda activate test
conda install nb_conda_kernels
安装完成后重新打开VSCode,在运行Jupyter notebook中的代码之前,在右上角的Select Kernel中切换到test中的Kernel,即可成功导入Pytorch。
原因分析:
VSCode中的Python扩展在打开.ipynb文件时使用的是base环境中的Jupyter,这样当然找不到test环境中的pytorch了。而在安装了nb_conda_kernels后,test环境中的ipykernel向base中的Jupyter报告了kernel spec,从而使得base中的Jupyter可以顺利的使用test中的ipykernel执行代码。而test中的ipykernel自然可以访问同在test下的pytorch了。更多请参见nb_conda_kernels的说明。
navigate_before
使用SJTU的Anaconda镜像
Powershell、Github Actions、环境变量踩坑
navigate_next