VSCode通过SSH连接GCP Vertex AI创建的VM时无法识别已安装Python包
问题解决:VSCode SSH连接Vertex AI VM无法识别容器内Python包
问题根源
Vertex AI创建的托管VM默认将Jupyter运行环境封装在独立容器内,你通过SSH直接连接的是VM宿主机,宿主机的/opt/conda/lib/python3.7/site-packages和容器内的依赖目录相互独立,因此会出现浏览器端Jupyter正常、VSCode SSH连接后报ModuleNotFoundError的问题。
可行解决方案
方案1:VSCode直接附加到运行中的容器(最推荐)
- 先SSH连接到Vertex AI VM宿主机,执行命令
sudo docker ps,找到镜像名带jupyter或vertex-ai标识的运行中容器,记录容器ID - 本地VSCode安装「Dev Containers」扩展,SSH连接到VM后,点击左下角远程连接图标,选择「附加到正在运行的容器」,选中上一步找到的Jupyter容器
- 连接容器成功后,选择容器内的Python解释器
/opt/conda/bin/python3,此时打开的Jupyter Notebook会直接使用容器内的预装环境,nltk、spacy等包均可正常调用
方案2:修改Jupyter内核配置指向容器解释器
- 在VM宿主机执行
mkdir -p ~/.local/share/jupyter/kernels/vertex-container创建自定义内核目录 - 在该目录下新建
kernel.json文件,写入如下内容(替换<容器ID>为你实际的Jupyter容器ID):
{ "argv": [ "docker", "exec", "-i", "<容器ID>", "/opt/conda/bin/python3", "-m", "ipykernel_launcher", "-f", "{connection_file}" ], "display_name": "Vertex 容器 Python 3", "language": "python" }
- 重启VSCode后打开Jupyter Notebook,内核选择「Vertex 容器 Python 3」即可,无需单独连接容器
注意:VM重启后容器ID会重置,可提前将Jupyter容器设置为固定名称,避免每次修改配置文件。
方案3:宿主机同步安装依赖(临时使用)
- 进入容器导出依赖列表:
docker exec <容器ID> pip freeze > requirements.txt - 回到宿主机执行
/opt/conda/bin/pip3 install -r requirements.txt,将容器内所有依赖安装到宿主机conda环境中,即可直接使用宿主机解释器调用对应包
内容的提问来源于stack exchange,提问作者Abhishek
相关产品推荐
相关产品推荐

