人生苦短,不光要用Python,还要在VSCode里用
作者 | imbennyguo
出品 | CSDN博客
在程序员圈子里,Visual Studio Code(以下简称VSCode)可以说是目前最火的代码编辑器之一了。
它是微软出品的一款可扩展的轻量级开源编辑器,并且支持全平台系统。这些特性使得VSCode颇受欢迎,这也使其成为了一个很棒的Python开发平台。
在本文中,你将学到如何在VSCode中进行高效的Python开发,其中包括:
安装VSCode-安装插件让Python开发更便利
编写一个简单的Python应用
学习如何在VSCode中运行和调试已有的Python程序
在VSCode中使用Git和GitHub来管理代码
本文假设你已经熟悉了基本的Python开发,并且计算机上安装了某个版本的Python(Python2.7、Python3.6/7、Anaconda等)。
文中会提供Ubuntu和Windows系统上的运行截图和样例,但由于VSCode还可以在其他主流平台上运行,所以你可能会在实际操作中看到略微有些差异的UI界面,一些命令的键位可能也需要修改。
VSCode的安装与配置
在任何平台上安装VSCode都不是难事。微软提供了Windows,Mac和Linux平台上详尽的安装指引,并且每月都会有更新以推出新特性或修复已知问题。这些都可以在VSCode官网上找到:
https://code.visualstudio.com
可能你会想,VSCode和那个庞大的Visual Studio名字这么像,它们会不会有什么关系呢?但其实,并没有,哈哈。
VSCode默认支持多种编程语言,并且有着丰富的扩展。VSCode每月更新,你可以在微软博客上随时关注更新的进展。微软甚至把代码开源在了GitHub上供所有开发者克隆仓库甚至贡献代码(暗示大家赶紧来提PR)。
VSCode的用户界面官方给出了详细的操作说明,如下图所示,在此不再赘述。
为Python开发安装插件
正如上文中提到,VSCode可以通过自身良好的扩展性质来支持各种编程语言的开发。
Python插件使我们可以更方便地在VSCode中进行Python开发,它有以下功能和特点:
支持Python2.7和Python3.4+的Pyhon版本
使用IntelliSense进行代码补全
代码检查器
对调试的支持
代码段功能
对单元测试的支持
自动应用虚拟环境
可在Jupyter环境和Jupyter Notebook中编辑代码
事实上,VSCode插件并不仅是编程语言层面的,如下面这些:Keymaps可以改变VSCode的操作方式,让那些习惯使用Atom,Sublime Text,Emacs,Vim,Pycharm等其他编辑器的开发者更舒服;Themes可以定制用户界面外观,不管你是喜欢亮色、暗色或五彩斑斓的黑,它都能满足;Language提供了良好的本地化体验。
还有一些很有用的插件推荐给大家:
GitLens提供了许多可以直接在编辑窗口中使用的Git特性,包括blame标注和仓库探索等;
Autosave可以通过菜单栏File–Auto Save开启,顾名思义,它会以固定的时间间隔保存你的代码,默认是1000毫秒(1秒),这个值是可以配置的;
Settings Sync可以让你通过GitHub在多个VSCode安装中同步配置,如果你会在不同的机器上使用VSCode,这么做可以让你保持开发环境的一致性;
Docker插件可以当让你愉快地使用Docker工作,它帮助开发者编写dockerfile和docker-compose.yml,打包并部署项目,甚至为项目自动生成dockerfile。
当然了,你也可以自己发掘其他有趣有用的插件,欢迎和大家分享你的发现!
可以通过点击左边活动栏的插件图标来进行插件或主题的发现和安装。你可以通过关键词来搜索插件,用多种方式排序搜索结果,并快捷方便地安装插件。
对于本文中使用到的Python插件,你可以搜索Python字样,然后在特定项上点击install进行安装。
同理,你可以用这种方式安装其他上面提到的插件。
VSCode配置文件
VSCode通过 用户(user) 和 工作区(workspace) 设置实现高度可配置化。
用户设置是应用于所有VSCode实例的全局性设置,而工作区设置是应用于特定文件夹或项目的局部设置。工作区设置给VSCode提供了极大的灵活性,我们在之后调出的都是工作区设置。
工作区设置以json格式保存在项目目录下.vscode文件夹中。
写个Python程序
让我们从一个Python程序开始探索如何在VSCode中进行Python开发。你可以在VSCode中使用快捷键Ctrl+N来编辑一个新文件(也可以在菜单栏中选择File–New File)。
Tips:VSCode用户界面提供了命令盘(command palette)功能,使你可以手不离键盘就能搜索、执行各项命令。按下Ctrl+Shift+P打开命令盘,键入new file,按下回车,也可以编辑一个新文件。
无论用哪种方法,你应该可以看到类似下面这样的窗口:
新文件打开后,就可以开始写代码啦。
我们快速写一个埃拉托斯特尼筛法(用来寻找不超过一个数的所有质数)作为测试代码。从下面这两行开始:
sieve = [True] * 101
for i in range(2, 100):
你应该看到类似下面的场景:
等等,发生什么了?为什么VSCode没有任何关键词高亮,格式自动调整等有用的东西?要它何用?
答案是,目前VSCode还不知道你在写什么。这个文字缓冲区叫做Untitled-1,如果你看看窗口右下角,你会发现写着Plain Text,也就是说VSCode还不知道你在写Python代码。
为了让Python插件发挥作用,我们需要将文件存储为后缀为py的文件,如sieve.py。你可以通过菜单栏File–Save File,或者按下Ctrl+S,或在命令盘键入save file来做到这一点。VSCode看到py后缀就会将文件解释为Python代码。现在你的窗口应该长这样:
好多了有没有!VSCode自动按照Python语言重新确定了格式,你可以在窗口左下角验证当前编程语言的正确性。
如果你同时安装了多个版本的Python(如Python2.7,Python3.x和Anaconda),你可以通过点击左下角的语言(这里的Python x.x.x)或在命令盘中选择select interpreter来切换Python解释器。VSCode默认用PEP8标准来格式化Python代码,但你也可以选用其他标准。
现在让我们完成剩余筛法代码。为了能观察到IntelliSense发挥作用,请不要直接复制粘贴这段代码。亲手输入,你将看到下面的画面:
下面是埃拉托斯特尼筛法中“筛”这个部分的完整代码:
sieve = [True] * 101
for i in range(2, 100):if sieve[i]:print(i)for j in range(i*i, 100, i):sieve[j] = False
输入这段代码时,VSCode自动缩进了for和if下的语句,自动加上了结尾大括号,并为你提供输入建议。这就是IntelliSense的威力。
运行Python代码
既然写完了代码,我们就可以运行它了。因为VSCode可以直接在编辑器里运行代码,所以我们完全不需要离开编辑器。按Ctrl+S保存文件,接着在编辑器窗口中点击鼠标右键,选择Run Python File in Terminal。
可以看见,窗口下方出现了Terminal选项卡,显示了代码的输出。
对Python代码检查器的支持
你可能在写代码的时候看见过一个弹出框,上面写着代码检查器不可用(Linting was not available)。你可以在弹出框中快速安装一个代码检查器,默认安装的是PyLint。VSCode也支持其他检查器,包括:Flake8、Mypy、Pydocstyle、Pep8、Prospector、Pyllama、Bandit等。
Python代码检查器页面有配置每一种检查器的详细资料。注意,代码检查器的选择是项目级别的工作区设置,而不是全局用户设置。
编辑一个已有的Python项目
在埃拉托斯特尼筛法的例子中,你创建了一个单独的Python文件。这作为例子来讲很合适,但通常你会创建更大的项目,并在其上工作一段时间。一个典型的创建新项目的工作流程如下:
创建一个存放项目的文件夹(其中可能包含一个新的GitHub项目)
切换到新文件夹
用命令代码创建一个初始Python代码文件
在Python项目中使用VSCode会给你带来更多精彩的功能,让我们看看VSCode是怎样对付大型工程的。
早在上个世纪我还是一名年轻的程序员时,我用调度场算法写过一个将算式解析为中缀表达式的计算器程序。为了展示VSCode中项目专属的特性,我将算法重构成了Python的一个算式求值库(https://github.com/JFincher42/PyEval),大家可以随意克隆至本地以进行后面的操作。
本地文件夹建好后,你可以通过VSCode快捷地打开整个文件夹,我比较喜欢下面这种方式:
cd /path/to/project
code .
当这样打开时,VSCode将检测到并开启任何项目中存在的virtualenv、pipenv或conda虚拟环境,你甚至都不用自己手动去启动虚拟环境!以下几种方式都可以在用户界面中打开一个文件夹:菜单栏中点击File–Open Folder;按下快捷键Ctrl+K或Ctrl+O;在命令盘中键入file:open folder。
我的公式求值库项目打开后看起来是这样的:
当VSCode打开文件夹时,它同时也会打开你最近打开的文件(这个行为是可配置的)。你可以打开、编辑、运行、调试文件列表中的任何文件。左侧活动区的探索者视图向你展示了文件夹中的所有文件,并告诉你在当前打开的选项卡中有多少编辑了但还没有保存的文件。
对测试的支持
如果当前环境安装了测试框架,VSCode可以自动识别已有的用测试框架编写的测试代码。我用unittest为我的公式求值库写了一个单元测试,大家可以用它作为例子来学习。
你可以在项目中的任何一个文件中右键选择Run Current Unit Test File来运行已有的单元测试。VSCode会询问你使用哪种测试框架、项目中测试代码存放的路径,以及测试文件的命名方式。
这些设置都将作为工作去设置被保存在项目.vscode文件夹下的settings.json文件中,你也可以在那里更改这些设置。对于我的公式求值项目,我们选择用unittest框架,测试代码在当前目录下,测试代码命名为*_test.py。
一旦配置好了测试框架、找到了测试代码,你就可以点击状态栏的Run Tests来运行所有的测试:
你甚至可以通过点击状态栏的Run Tests,然后选择Run Unit Test Method来运行单个测试。这样我们就可以单独运行失败的测例,能够节省一大笔时间!测试结果输出在Output选项卡中。
对调试的支持
即使VSCode是个编辑器,但在其中调试代码也是可行的。VSCode提供了许多好的代码调试器所拥有的特性:
自动变量追踪
watch表达式
断点
调用栈检查
它们作为调试视图的一部分被显示在活动栏中:
调试器可以控制Python应用在内置终端或远程终端实例上运行。它可以连接一个正在运行的Python实例,甚至可以调试Django和Flask应用。
用VSCode调试单个Python文件就和按F5启动调试器一样简单。你可以按F10和F11来跳出或进入函数,按Shift+F5退出调试器。按F9或单击编辑框左侧区域来设置断点。
当你要开始调试像Django和Flask应用这种更复杂的项目时,需要进行调试配置。在调试视图中,选择配置下拉菜单中的添加配置,然后选择Python:
上面的配置存储在了.vscode/launch.json中,你可以针对像Django、Flask这种特殊应用的设立专门的配置。
你甚至可以远程调试,或是调试Jinja模板。这一切只需在配置下拉菜单中选择合适的配置项即可。
Git集成
VSCode内置版本控制机制,并自带对Git和GitHub的支持,你也可以安装插件以支持其他版本控制软件。版本控制视图中提供了各种版本控制功能:
如果你的项目目录包含.git文件夹,那么VSCode自动开启完整的Git和GitHub支持。你可以进行的操作包括:
提交文件到Git
向远程仓库推送更新,或从远程仓库拉更新
切换已有分支或新建分支
查看并解决合并冲突
查看代码差别
所有这些事都可以直接在VSCode用户界面中完成:
VSCode也能识别来自编辑器外的文件内容改变并做出反应。
在VSCode中提交最近的代码更改是很方便直接的。在版本控制视图中,被修改的文件用M标记,新的未追踪文件用U标记。鼠标悬浮于文件上,点击加号(+)来添加更改。在顶端输入提交信息,最后点击对勾来提交这些更改。
你也可以在VSCode中将本地提交推至GitHub。选择版本控制视图中的Sync,点击状态栏中的Synchronize Changes即可。
结论
VSCode是目前最棒的通用编辑器,也是Python开发者的绝佳选择。通过这篇文章你学到了:
如何安装VSCode-如何查找、安装插件来开启对Python的支持
如何用VSCode更轻松地编写Python程序
如何用VSCode运行、调试Python代码
如何在VSCode中使用Git和GitHub
VSCode已经成为了我进行Python甚至其他项目开发时最常用的编辑器,推荐给你,希望你也可以试试看~
原文链接:
https://blog.csdn.net/bigbennyguo/article/details/104704023
【end】◆有奖征文◆推荐阅读你的企业在什么情况下需要人工智能?快来看看你需要具备哪些条件与能力吧!64% 的企业未实现智能化,5成公司算法工程师团队规模小于 10人,AI 工程师的机遇在哪里?百度成立互联网医院;钉钉招小学生产品体验师;iOS 13.4 上线 | 极客头条5 亿微博数据疑泄露,Python 爬虫如何避免踩天坑?为什么要在油气行业中应用 IoT?这 8 个应用场景告诉你 IoT 在油气行业中可以做什么自称中本聪的他被法官怒怼:你的证词毫无可信度!你点的每个“在看”,我都认真当成了AI
相关文章:

从XXX 产品的失败谈起
从XXX 产品的失败谈起 从去年年中公司开始秘密研究一项高级产品,以替换陈旧体系下的老款产品,为此,创建了一个产品开发部 门,由七八个富有本行业开发经验的全职成员构成,经过一年多的努力,即将投入市场了&…

C++ 经常使用类 string类
6.3.2使用string对象 string word"I love China" *链接字符串* string descriptionadjective " " word; _Note_: 不能连接两个字符串字面量,以下的语句是错误的 string test "I have" "a dream"; 6.3.3訪问字符串中的字…

Nginx源码分析--字符串处理
ngx_string.cvoid ngx_strlow(u_char *dst, u_char *src, size_t n); 将src的前n个字符转换成小写存放在dst字符串当中,调用者需要保证dst指向的空间大于等于n。操作不会对原字符串产生变动。如要更改原字符串,可以:ngx_str_t str ngx_strin…
信息保留的二值神经网络IR-Net,落地性能和实用性俱佳 | CVPR 2020
出品 | AI科技大本营(ID:rgznai100)导语:在CVPR 2020上,商汤研究院链接与编译组和北京航空航天大学刘祥龙老师团队提出了一种旨在优化前后向传播中信息流的实用、高效的网络二值化新算法IR-Net。不同于以往二值神经网络大多关注量…

Jq-table最后一行添加样式
豪情姓名QQE-mail豪情249056406jikeytanggmail.comtony1234567puaggmail.comtony1234567puaggmail.comtony1234567puaggmail.comtony1234567puaggmail.com豪情啊不得了真是的运行代码

Same binary weight (位运算)
题目描述 The binary weight of a positive integer is the number of 1s in its binary representation.for example,the decmial number 1 has a binary weight of 1,and the decimal number 1717 (which is 11010110101 in binary) has a binary weight of 7.Give a positi…

Nginx源码分析--基本数据类型的别名
typedef intptr_t ngx_int_t; typedef uintptr_t ngx_uint_t; typedef intptr_t ngx_flag_t; intptr_t在 # /usr/include/stdint.h 中,下面是stdint.h部分代码 #ifndef _STDINT_H #define _STDINT_H 1#include <features.h> #include…

EnterpriseDB Migration 迁移工具使用测试(2)
下面我们来测试EnterpriseDB Migration 工具对于Oracle 大对象(LOB)的迁移情况; 首先在在Oracle实例Scott模式下创建具有LOB对象的表,如: SQL> create table tlob (t1 int primary key,t2 clob,t3 blob); Table created. -- 并填充数据 SQL> begin…
生物学的机器学习:使用K-Means和PCA进行基因组序列分析 COVID-19接下来如何突变?...
作者 | Andre Ye译者 | 孟翔杰来源 | DeepHub IMBA许多人没有想到,病毒就像地球上为生存而挣扎的其他生物一样,它们会进化或变异。只要看一看人类病毒来源的蝙蝠携带的病毒RNA序列片段即可。AAAATCAAAGCTTGTGTTGAAGAAGTTACAACAACTCTGGAAGAAACTAAGTT…以及…

sql server时间转换
--getdate 获取当前时间select getdate()--dateadd 原有时间加: 2013-02-17 13:20:16 此时间加12个月 select dateadd(MONTH,12,2013-02-17 13:20:16) --返回:2014-02-17 13:20:16.000 (参数month可以改为 day,year等日期加相应…
cgdb安装与使用
官网:http://cgdb.github.io/ 安装 # wget http://cgdb.me/files/cgdb-0.6.7.tar.gz # tar -zvxf cgdb-0.6.7.tar.gz # cd cgdb-0.6.7 # ./configure --prefix/usr/local # make && make install 使用 1:cgdb分为上下两栏,…

[MFC]多线程传参问题 [AfxBeginThread]
前言MFC中使用多线程比较简单,大家都推荐用AfxBeginThread来实现,但使用过程中确遇到传入this之后不能得到对象内部字段数据的问题。正文一、问题代码1.1 Test.h#pragmaonceclassCTest{public: CTest(void); ~CTest(void); voidThreadMethod…
学习Python,这22个包怎能不掌握?
作者 | Erik-Jan van Baaren译者 | 弯月,责编 | 屠敏头图 | CSDN 下载自东方 IC出品 | CSDN(ID:CSDNnews)以下为译文:如今全球各个行业内 Python 的使用状况怎么样呢?这个问题就是我写这篇文章的初衷。我找…

JSTL标签库的一些基础实例
如题所示,只是一些简单的入门实例,代码如下:<% page language"java" import"java.util.*" pageEncoding"UTF-8"%> <%taglib prefix"c" uri"http://java.sun.com/jsp/jstl/core"%…
旷视提Circle Loss,统一优化视角,革新深度特征学习范式 | CVPR 2020
作者 | 旷视研究院本文是旷视 CVPR 2020的被收录论文解读第。它提出用于深度特征学习的Circle Loss,从相似性对优化角度正式统一了两种基本学习范式(分类学习和样本对学习)下的损失函数。通过进一步泛化,Circle Loss 获得了更灵活…

收藏好玩的网站
1.输名字出照片 http://turnyournameintoaface.com/?name2.看google页面可以做成这样http://mrdoob.com/projects/chromeexperiments/google_gravity/3. 有趣的在线人脸变动物(川剧中有变脸,其实你也可以滴!)http://youwild.org/…
GDB 格式化结构体输出
set print address set print address on 打开地址输出,当程序显示函数信息时,GDB会显出函数的参数地址。系统默认为打开的, show print address 查看当前地址显示选项是否打开。 set print array set print array on 打开数组显示ÿ…

Kinect For Windows V2开发日志九:侦测并绘制人体骨架
简介 在上一篇《侦测、追踪人体骨架》里,介绍了关节点的使用办法,这一篇记录将关节点与OpenCV结合的绘图方法。 代码 #include <iostream> #include <opencv2\imgproc.hpp> #include <opencv2\calib3d.hpp> #include <opencv2\high…

拨号连接或 ××× 连接的错误代码列表
本文列出了在使用Windows 2000、Windows XP 或 Windows Server 2003 作为客户机,建立拨号连接或 连接时可能收到的错误代码。注意:只有在尝试连接到正运行Windows 2000 或更高版本的路由和远程访问服务器时,才会看到编号高于 900 的错误代码…
“程序员数学不行,干啥都不行!”高级开发:90%都是瞎努力!
之前有很多读者留言向我们反馈:数学不好做算法优化,每次遇到不一样的问题就不会了,要是赶上面试基本就凉凉了。平时很难搞懂像数据结构、算法、复杂的语句等等,因为这些核心原理都是数学。而且光会基础数学远远不够,还…
Redis源码分析--lookupKey函数查看value值
lookupKey函数查看value值 robj *lookupKey(redisDb *db, robj *key) {dictEntry *de dictFind(db->dict,key->ptr);if (de) {robj *val dictGetVal(de);/* Update the access time for the ageing algorithm.* Dont do it if we have a saving child, as this will t…

PHP获取时间排除周六、周日的两个方法
//方法一: <?php $now time(); //指定日期用法 $now strtotime(2014-01-08) ; $day 3600*24; $total 12;$days array() ;for ($i2;$i<$total;$i) {$timer $now$day*$i;$num date("N",$timer)-2; //周一开始if($num>-1 and $num<3){if(c…

SMS2003 SP3+SQL Server2000 SP4部署(下)
<?xml:namespace prefix o />SMS2003 SP3SQL Server2000 SP4部署(下)<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />E.SMS2003安装在berlin上放入SMS2003光盘镜像,选择SMS2003出现SMS2003安装向导ÿ…

redis源码分析--zslRandomLevel位运算解析
与&运算 0376的二进制就是1111 1110,二进制的与运算规则是,只有两个数同时为1时,则结果才为1,只要有一个数为0,则结果就为0。比如1&11; 1&00; 0&10; 0&00;因此把一个字符与二进制1111 1110进行与…
从零开始构建:使用CNN和TensorFlow进行人脸特征检测
作者 | Shubham Panchal译者 | 孟翔杰来源 | DeepHub IMBA出品 | AI科技大本营(rgznai100)人脸检测系统在当今世界中具有巨大的用途,这个系统要求安全性,可访问性和趣味性!今天,我们将建立一个可以在脸上绘…

scope重定义
.directive(myAttr, function() {return {restrict: E,scope: {customerInfo: info},template: Name: {{customerInfo.name}} Address: {{customerInfo.address}}<br> Name: {{vojta.name}} Address: {{vojta.address}}}; }); directive中的几个属性: restric…
基于轮廓调整的SOTA实例分割方法,速度达32.3fps | CVPR 2020
作者 | VincentLee来源 | 晓飞的算法工程笔记介绍实例分割是许多计算机视觉任务中的重要手段,目前大多数的算法都采用在给定的bbox中进行pixel-wise分割的方法。受snake算法和Curve-GCN的启发,论文采用基于轮廓的逐步调整策略,提出了Deep sna…

Redis运行流程源码解析
原文作者:凡趣科技 pesiwang 原文地址:http://blog.nosqlfan.com/html/4007.html 本文分析源码基于 Redis 2.4.7 stable 版本。 概述 Redis通过定义一个 struct redisServer 类型的全局变量server 来保存服务器的相关信息(比如:…

2010年5月blog汇总:OpenExpressApp、其他
OpenExpressApp 信息系统开发平台OpenExpressApp - 框架待完善工作事项信息系统开发平台OpenExpressApp - 报表模块支持ReportObjectView信息系统开发平台OpenExpressApp - 从compositewpf到MEF信息系统开发平台OpenExpressApp - …

注意!Linux glibc再曝漏洞,可导致Linux软件劫持
2019独角兽企业重金招聘Python工程师标准>>> glibc是GNU发布的libc库,即c运行库。它是Linux系统中最底层的API,几乎其它运行库都会依赖于glibc。 近日,Google和Red Hat的安全人员发现GNU C Library (glibc)中存在严重的安全漏洞&a…