大型vscode真香现场
Update 2022-2-26:
增加了更基础的一些安装配置流程
昨天朋友推荐了vscode以后今天试了一下真的是一见钟情,之前学c++的时候就很喜欢用vs,现在用python而且又是在服务器上跑,一直觉得sublime调试非常不方便。vscode对于以前用习惯vs的人不要太舒服,而且对jupyter notebook的支持意外地好,可以说是综合了好几个我非常爱用的IDE的优点了!
在vscode中使用python
这个特别简单,一个官方的教程即可搞定:python-tutorial
几个注意的点:
- 设置语言
按F1然后搜索“configure display language”,就可以选择和安装语言
- 切换python 环境
左下角这里可以切换版本,非常方便
- 安装包
根据tutorial提示,最好是在虚拟环境下安装包
1 | py -3 -m venv .venv |
用vscode远程工作
这也是我最关心的问题,毕竟我的代码几乎都是在服务器上跑的。
首先是官方教程:remote-overview,or more specifically:Remote Development using SSH
简单介绍一下,在vscode上用SSH远程工作的大致原理就是,本地vscode只提供UI,所有的工作区和代码之类的全是在远程进行的。但你用起来的体验就像是在本地调代码一样。
需要特别注意的一点是,python插件要在远程重新安装一次。
下载remote development
首先在extensions商店搜索“remote development”
连接remote machine
F1, Remote-SSH: Connect to Host…
这边我选择的是add SSH然后输入username@hostname
,之后弹出来的窗口上方会提示是否继续和输入密码,输入密码之后就会连上然后就可以打开文件夹。
免密登录
这个有点复杂,单独讲一下,官网见:Quick start: SSH key,同时参考了这篇文章:使用vscode进行远程炼丹。
- 在local打开cmd,输入:
1 | ssh-keygen -t rsa -b 4096 |
中途提示输入文件路径和密码,都直接回车。
- 上传公钥
这边我是直接在服务器新建了/.ssh/authorized_keys然后手动把id_rsa.pub里的内容复制进去。
接下来再连接就不需要输入密码了。
在远程中调试
首先就是把python插件再安装一次,然后重新连接,这时候会重新也安装一下pylint。
在vscode里用jupyter notebook
这个我之前想复杂了,其实直接新建一个.ipynb文件,打开并且运行,就会提示你没有装,然后你选择一下安装方式conda/pip就可以装好了。
连接本地的jupyter notebook
用不上,理论上同下
连接服务器上的jupyter notebook
意外也很容易,在想要的目录上jupyter notebook
,出来的链接点进去就可以打开了
(之前的坑是用jupyter notebook list
,结果出来的目录是home/yourname)
2020年6月12日更新
用上述方法做断连就打不开了,需要用
1 | jupyter notebook --ip=0.0.0.0 --port=xxxx |
然后在http://gpu-server-2:xxxx/?token=xxxx里把gpu-server-2换成服务器ip就可以了
断点调试时设置参数
可以参考这篇文章:
https://blog.csdn.net/u012332816/article/details/80801106
打开Run→Open Configurations,添加“args”,类似这样:
1 | { |
用VScode连接docker容器
参考官方文档,需要先配置好免密登陆。
在本机安装docker,在vscode上安装Remote Development,docker插件。
接下来要修改vscode 的 docker.host,在Docker插件的设置里打开settings.json,增加一行:
1 | "docker.host":"ssh://root@ip:36000" |
点击左下角的远程开发按钮, 选择”Remote-Containers: Attach to Running Container…”,就可以看到可连接的docker container列表。
之后也可以在远程资源管理器(vscode侧边栏)切换可连接的SSH和containers列表。
实际测试后,如果在远程terminal直接运行:
1 | docker exec -it container_ID /bin/bash |
也可以直接在远程docker列表中看到。