VSCode+Docker构建Python开发环境
VSCode+Docker 构建 Python 开发环境
1 优缺点
1.1 优点
- 写代码和调试更方便
- 带语法提示且反应快
- 支持直接在命令行敲命令运行
- 一个工具同时开发调试 Python+JS+HTML....
- 方便在各代码文件间跳转
- 生态丰富
- 查找替换方便:可以指定文本或文件夹
- 可对比文件差异
- ……
1.2 缺点
- 配置有点麻烦
- 需要一些学习成本
2 方法
2.1 前提
假设 vscode 已正常安装,并且已有支持 Python 的 docker 环境
2.2 在 Docker 内安装 ssh 服务
2.2.1 进入 docker
1 | apt-get install openssh-server |
有时更新 remote ssh 或 vscode 最新版本能修好
2.2.2 退出 docker 后保存镜像
1 | $ docker commit CONTAINER_ID IMAGE_ID:TAG |
2.2.3 再次运行 docker 时映射端口
在 docker run 命令中加如下参数:
1 | -p 8822:22 |
2.2.4 在 docker 之外连接
1 | ssh root@127.0.0.1 -p 8822 |
2.2.5 问题与解决
我遇到的问题是每次都要手动开一下
1 | /etc/init.d/ssh restart |
可将启动 ssh 加在/root/.bashrc 中,或者 build docker image 时加入启动脚本。
2.3 使用 VSCode 连接本地 container
调出扩展面板(Ctrl+Shift+X)
安装:Remote Development 插件
打开命令面板(Ctrl+Shift+P)
输入 remote-ssh,选择 open Configuration file,按提示输入主机地址,用户名,密码等信息(一个设置文件中允许同时添加多个连接)。
此时,左侧出现 " 远程资源管理器选项卡 ",点连接右侧的 attach remote container 可连接远程主机。
登录后看起来就像是打开了一个本地项目,选择文件夹作为工作目录。
同时打开多个项目时,右键点击 contrainer,选择 attach in new window。
2.4 连接远程主机上的 docker container
连接远程主机中的 docker,操作如下:
首先,远程主机端也需要启动 docker 并向外暴露端口如 8822。
在左侧打开远程资源管理器,在第二个选项卡选择 SSH Target。
打开命令面板(Ctrl+Shift+P),输入 remote-ssh,选择 open Configuration file,添加如下内容:
1 | Host 192.168.1.201 |
保存后,左侧远程资源管理器内容被刷新,然后点该项右侧的 Connect to Host...并按提示输入密码后,即可正常连接。
2.5 运行代码
写一个简单的 python 文件,如:
1 | print("abcde") |
然后点击左侧运行按钮,选择运行和调试,此时会提示安装 Python 扩展,我选择了第一个推荐 "Python"。
安装后再运行,选择 Python,提示设置 launch.json;在左侧面板选择创建 launch.json,然后选择 Python,保持默认选项即可。
此时,即可通过运行按钮(播放键)直接运行程序,运行结果在下方的终端面板中显示。
2.6 Jupyter Notebook
2.6.1 基本用法
目前 Jupyter 已合入 python 插件,安装之后即可使用,输代码后点左侧的小箭头运行即可。
这样在 vscode 中画图的问题也解决了。
(我之前的 docker 里安装过 jupyter,所以可能跳过了安装 jupyter 内核 ipykernel 的过程 pip3 install ipykernel)
2.6.2 使用小技巧
- 单元格右上方的小菜单,可快速设置单元格类型。
- 限制单元格输出行数:在搜索栏找 “output.textLineLimit”,设置行数
- 自动显示 Cell 的执行时间
- 点上面横版菜单中的 outline,在左下角出现 markdown 大纲视图
- 仍可使用和 Jupyter 网页版一样的快捷键,几乎没有学习成本
- Shift+ 回车执行
- dd 删除单元
- 打开文件时新建而不替换当前文件
- 设置:workbench.editor.enablePreview": false
3 小技巧
3.1 推荐主题
浅色:Github Plus theme
3.2 快捷键
- 调出终端面板:Ctrl+ 左上角的点
- 调出设置:Ctrl+ 逗号
- 展开单元格输出:Ctrl+K,T
- 调出风格切换:Ctrl+T
- 选择解释器:Ctrl+Shift+P(在多个 Python 版本间切换)
- 批量注释/取消注释:ctrl+/
3.3 修改字体大小
3.3.1 右侧字体大小
Setting->设置 ->文件编辑器 ->字体 ->在 Setting.json 中编辑,将 "window.zoomLevel" 设为 1.25 或 1.5,则所有字体都会变大。
3.4 开启 Ctrl+ 滚轮缩放
设置 ->查找: Mouse->Editor Mouse Wheel Zoom->勾选
3.5 文件差异比较
右键选一个文件 ->选择进行比较
右键选另一个文件 ->与已选项目进行比较
3.6 发布博客
利用插件可在 cnblog 发布博客
4 问题与解决
4.1 问题一
- 问题:ssh 在命令行可以正常连接,vscode 连接时报错:XHR failed
- 原因:wget 下载 vscode-server 压缩包时出现 SSL 错误
- 排查方法:XHR failed 可能不止这一种原因,先通过 Vscode->View->Output 看具体错误,我遇到的问题是 wget 报错
- 解决方法:
1 | 查看 commit id |
4.2 问题二
- 问题:找不到已安装的 Python 库
- 原因:这可能是由于 docker 中安装了多个版本 Python 环境
- 解答:打开命令面板(Ctrl+Shift+P),Python 选择解析器,选择正确的版本即可
4.3 问题三
- 问题:如何同时打开多个项目
- 解答:每个窗口对应一个项目,打开多个窗口,即可打开多个项目
4.4 问题四
- 问题:为什么我限制了 Notebook 输出行,但是不管用
- 解答:如果有多个工作位置(比如有本地,有远程),需要分别设置
4.5 问题五
- 问题:误删了 Jupyter 的 Cell 怎么办?
- 解答:按 Esc 退出当前块的编辑状态,然后按 z 键