浅谈Python轻量开发环境配置

本文已更新至VScode 1.30.1,Python Extension 2018.12.1版本

vscode
对初学者来说,Pycharm显得太臃肿,所以果断弃坑Pycharm改投VScode。这里主要以调试和虚拟环境配置两个角度介绍VScode构建python开发环境,并记录配置和使用该开发环境遇到的主要问题。

VScode的调试

VScode原生是一个编辑器,若需要调试python代码,需安装Microsoft提供的Python插件:

Python插件

VScode调试界面里有一个侧边栏和一个底部栏,其中底部栏由四个Panel:

名称备注
问题显示语法问题(嵌入pylint)
输出程序输出
调试控制台感觉跟Matlab命令行窗口是一回事
终端调用cmd或powershell

而侧边栏也有四个Panel,分别是变量监视调用堆栈断点,这几个无需多言。

Python调试界面

另外侧边栏顶部有一个小tab,如下所示。绿色三角按键是开始调试,其右边的下拉菜单是调试配置选择菜单,其右边的齿轮是launch.json设置,最后一个是进入调试控制台。(之后提到这几个按键都以黑体字表示)

调试操作区(位于调试面板上方)

调试设置步骤

首先进入调试界面,点击左侧栏的虫虫图标即可

调试入口

选择调试配置

进入调试界面后,根据调试方案选择调试配置。对于一般脚本的调试,采用Python: Current File (Integrated Terminal)调试配置就可以了。从调试配置选择菜单选定即可。

设置断点

左键单击行号左侧空白处即可

左键单击行号左侧空白处即可

开始调试

点击开始调试按钮即可开始调试,VScode会在设置的断点暂停。另外VScode提供继续,单步调试,单步进入,单步跳出等功能,不再赘述。

关于launch.json调试配置

调试配置定义了调试程序的行为,其由配置文件(launch.json)定义,比如是否运行调试时在程序第一行停止(stoponEntry)或者是否向当前python解释器传递变量(args)等。VScode有提供的预先定义的配置文件,如下图(Python: Current File)
配置文件

配置文件(launch.json)保存在项目文件夹中的.vscode文件夹,可以通过点击launch.json设置打开该文件进行编辑。launch.json的配置方法详见[1]

VScode的虚拟环境

Python虚拟环境最好建立在项目文件夹里,此时VSCode在打开项目文件夹时就能找到虚拟环境。步骤如下:

  1. 采用virtualenv等工具在项目文件夹里添加虚拟环境
  2. 按Ctrl+Shift+P,输入Python: Select Interpreter;或者在状态栏中点击:

虚拟环境

选择虚拟环境中带的解释器即可。

此时写好Python程序后,在编辑器内右键运行“在终端中运行Python文件”,即可看到终端Panel里先自动运行activate.ps1加载虚拟环境,然后再运行程序出结果。

异常情况[2]

在终端尝试运行activate.ps1时,估计100%会报错:

1
2
3
4
5
6
7
8
& : 无法加载文件 C:\Users\...\ENV\Scripts\activate.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。
所在位置 行:1 字符: 3
+ & c:/Users/Administrator/Desktop/python/Practices/Project1/ENV/Script
...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : SecurityError: (:) [],PSSecurityExceptio
n
+ FullyQualifiedErrorId : UnauthorizedAccess

这是因为win10系统默认禁止运行Powershell脚本。解决方法是:
以管理员身份打开一个Powershell,运行:

1
Set-ExecutionPolicy RemoteSigned

并确认即可。

Cookies

pylint

pylint用以做语法检查。VSCode会自动运行pylint并依此给代码加入错误波浪线,也可以在powershell里手动运行pylint xxx.py进行检查,不过貌似VSCode会屏蔽一部分pylint的结果。据网上吐槽说pylint太过严苛,这可能就是屏蔽的原因吧(VSCode:我不听我不听)

Keyboard Interrupt

Ctrl+C可以强行终止程序的运行。不过在VScode的终端Panel里,仅按下Ctrl+C还是不够的,还得敲下回车才起作用。这一点始料未及。(VSCode:双重确认才保险)

调试加入命令行参数

详见:vscode如何加参数调试python程序?

Step into library functions

我们先看这个例子:

1
2
3
from pprint import pprint
pprint("Hellow world!") # 目标函数
pass

比如我们想进入pprint内部看一下其运作情况。有两种做法:一是在pprint前插入断点,然后当程序中断在pprint时,用Step into命令进入函数内部;二是直接在该函数内部插入断点,让程序自然中断在函数内部,然后单步执行并观察。但是,在VScode的任何调试模式,这两种方法都无法进入pprint函数内部。

方法一的结果

方法一

方法二的结果

方法二

解决这个问题的方法是在launch.json加入"debugStdLib": true[3]即可。

比如在Python: Current File (Integrated Terminal)配置下加入该参数:

加入该参数并调试

完美!


  1. 对于launch.json配置文件中各项参数的说明,详见: Debugging ↩︎

  2. 关于ExecutionPolicy详见: About Execution Policies ↩︎

  3. 2018.6.0 cannot step into standard library even with experimental python #2039 ↩︎

0%