最近因为工做关系,开始写flask web程序,同事有用Vim的,有用PyCharm的。在调研了一通python的编辑器,IDE以后,发现Visual Studio Code相对比较适合我。python
VSC有相对较全的功能,比较好看舒服的主题,良好的用户体验(我如今用Mac),启动速度较快,插件体系强大。现将VSC的安装配置过程记录以下。git
前置条件是,python 2.7 已经安装完成,pip也已经搞定。github
首先在Microsoft Visual Studio Code 网站上下载安装程序,选择对应的平台,个人是osx的。web
安装完成后,启动VSC,按 cmd+shift+P,启动快速命令拦,输入ext ins
,就会发现第一个选项是安装插件,点击回车来到插件边栏。或者能够直接点击最左边一列图标最下面那个,也会弹出插件边栏。在插件边栏输入Python搜索,安装Python 0.6.0插件。shell
安装插件完成以后,点击插件上的从新载入,或者重启VSC,以便于载入插件。至此安装完成,下面开始编辑器配置。json
VSC采用了相似Sublime Text的全局->用户->工做区层级配置的概念,后者能够覆盖前者,用户只能编辑用户配置喝工程配置,全局配置都是默认的。有一点VSC作的特别好的是,整个软件的本地化特别好,连配置文件中也都是中文注释。若是鼠标悬浮到用户或者工做区的某项配置上,会有个popup中文显示当前配置项的含义。若是想覆盖并修改全局配置中的某一项,能够悬浮到该配置项上,能够看到文字左边出现了一个铅笔样的图标,点击这个图标便可将这条配置复制到用户或者全局配置中作出修改,作的很是人性化。flask
好比个人用户配置以下:app
{ "workbench.colorTheme": "Material Theme", "editor.fontSize": 13, "editor.lineHeight": 18, "editor.rulers": [80,100], // 配置 glob 模式以排除文件和文件夹。 "files.exclude": { "**/*.pyc":true, "**/*.pyo":true, "**/.idea":true, "**/.settings":true, "**/.vscode":true, "**/.project":true, "**/.pydevproject":true }, "python.linting.pylintEnabled": false, "editor.fontFamily": "Hack" }
下载并使用了一个好看的主题Material Theme,字号调大到13,此时默认行高为20,我以为太大,调整到18,配置文件列表中不显示某些后缀的文件,避免影响视野,同时下载了一个开源程序字体Hack,配置为惟一显示字体。socket
其中最须要注意的是python.linting.pylintEnabled
这个选项,我把pylint关掉了。或许是pylint自己的问题或者是集成的问题,pylint对flask的解析老是时对时错,关闭是最好选择。编辑器
对于Flask工程自己的配置,须要添加到工做区配置中。因为咱们会常常用到virtual env,因此实际上关键须要配置python命令自己的路径以下(跟具体virtualenv的设置有关):
{ "python.pythonPath": "${workspaceRoot}/venv/bin/python" }
到这里,配置已经可以知足python工程的高亮,代码补全等编写功能了,快捷键也能够经过配置文件修改,配合VSC自带的能力,已经基本OK了,下面是Flask Debug的配置。
这点消耗了我至关长时间。官网给提供了两种方式,均可以实现。
第一种适合Flask 0.11及以上版本,由于在0.11版本起,出现了venv/bin/flask文件,配置能够写成:
{ "version": "0.2.0", "configurations": [ { "name": "Flask", "type": "python", "request": "launch", "stopOnEntry": false, "pythonPath": "${config.python.pythonPath}", "program": "${workspaceRoot}/venv/bin/flask", "env": { "FLASK_APP": "${workspaceRoot}/app.py" }, "args": [ "run", "--no-debugger", "--no-reload" ], "debugOptions": [ "WaitOnAbnormalExit", "WaitOnNormalExit", "RedirectOutput" ] } ] }
用flask.py文件启动Flask程序,实测能够触发断点。
对于在0.11如下版本的Flask而言,能够采用第二种方式:
{ "version": "0.2.0", "configurations": [ { "name": "Python", "type": "python", "request": "launch", "stopOnEntry": false, "pythonPath": "${config.python.pythonPath}", "program": "${file}", "debugOptions": [ "WaitOnAbnormalExit", "WaitOnNormalExit", "RedirectOutput" ] } ] }
切记!!! Flask在启动时必须指定 app.run(debug=False)
,必定不能开启调试!不然没法命中断点。
调试时启动Flask程序的入口文件便可,也能够将${file}
替换为实际的入口文件,这样不用每次都切换到该文件才能开启调试。实测OK。
还有一种能够远程调试的方法:
须要先pip install ptvsd
if __name__ == "__main__": import ptvsd import socket try: address = ('127.0.0.1', 12345) s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.bind(address) except socket.error: ptvsd.enable_attach(None, address=('0.0.0.0', 8000)) manager.run()
在manager.run()
或者app.run()
以前,加入如上代码,在8000端口开启远程调试(不是http服务的端口!)
好比从shell启动此Flask程序,VSC配置以下,Flask启动好以后启动调试监听在8000端口上便可:
{ "name": "Attach (Remote Debug)", "type": "python", "request": "attach", "localRoot": "${workspaceRoot}", "remoteRoot": "${workspaceRoot}", "port": 8000, "host": "localhost" }
注意远程和本地的源码路径的前缀必须配置正确!