资讯专栏INFORMATION COLUMN

使用Visual Studio Code编写调试Python Flask程序

gotham / 1481人阅读

摘要:最近由于工作关系,开始写程序,同事有用的,有用的。第一种适合及以上版本,因为在版本起,出现了文件,配置可以写成用文件启动程序,实测可以触发断点。

最近由于工作关系,开始写flask web程序,同事有用Vim的,有用PyCharm的。在调研了一通python的编辑器,IDE之后,发现Visual Studio Code相对比较适合我。

VSC有相对较全的功能,比较好看舒服的主题,良好的用户体验(我现在用Mac),启动速度较快,插件体系强大。现将VSC的安装配置过程记录如下。

前置条件是,python 2.7 已经安装完成,pip也已经搞定。

首先在Microsoft Visual Studio Code 网站上下载安装程序,选择对应的平台,我的是osx的。

安装完成后,启动VSC,按 cmd+shift+P,启动快速命令拦,输入ext ins,就会发现第一个选项是安装插件,点击回车来到插件边栏。或者可以直接点击最左边一列图标最下面那个,也会弹出插件边栏。在插件边栏输入Python搜索,安装Python 0.6.0插件。

安装插件完成之后,点击插件上的重新载入,或者重启VSC,以便于载入插件。至此安装完成,下面开始编辑器配置。

VSC采用了类似Sublime Text的全局->用户->工作区层级配置的概念,后者可以覆盖前者,用户只能编辑用户配置喝工程配置,全局配置都是默认的。有一点VSC做的特别好的是,整个软件的本地化特别好,连配置文件中也都是中文注释。如果鼠标悬浮到用户或者工作区的某项配置上,会有个popup中文显示当前配置项的含义。如果想覆盖并修改全局配置中的某一项,可以悬浮到该配置项上,可以看到文字左边出现了一个铅笔样的图标,点击这个图标即可将这条配置复制到用户或者全局配置中做出修改,做的非常人性化。

比如我的用户配置如下:

{
    "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,配置为唯一显示字体。

其中最需要注意的是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"
}

注意远程和本地的源码路径的前缀必须配置正确!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/45538.html

相关文章

  • Visual Studio Code 中配置 Python Flask 环境

    摘要:更改执行策略可能会产生安全风险,如中的帮助主题所述。如果出现选择环境,我们选择。在中,我们仅保留这一段。在中,我们新建一个文件,名为。到此,我们的环境配置就完成了。 在 Visual Studio Code 中配置 Python Flask 环境 本文由 赤石俊哉 原创编写,您可以在学习交流用途以内自由使用文章。 但是禁止抄袭文章,转载时,请注明来源地址,谢谢。最后更新时间: 20...

    gself 评论0 收藏0
  • Top 10 JavaScript编辑器,你在用哪个?

    摘要:在这个编辑器中,和是其中排名靠前的两个。是一个免费的轻量级编辑器和,用于和开发。对于免费的代码编辑器来说,是一个很好的选择。可以安装两个命令行实用程序,用于从启动编辑器,用于管理的软件包。 对于JavaScript程序员来说,目前有很多很棒的工具可供选择。本文将会讨论10个优秀的支持javascript,HTML5和CSS开发,并且可以使用Markdown进行文档编写的文本编辑器。为什...

    zombieda 评论0 收藏0
  • 后端API从入门到放弃指北

    摘要:菜鸟教程框架中文手册入门目标使用搭建通过对数据增删查改没了纯粹占行用的拜 后端API入门学习指北 了解一下一下概念. RESTful API标准] 所有的API都遵循[RESTful API标准]. 建议大家都简单了解一下HTTP协议和RESTful API相关资料. 阮一峰:理解RESTful架构 阮一峰:RESTful API 设计指南 RESTful API指南 依赖注入 D...

    Jeffrrey 评论0 收藏0
  • 后端API从入门到放弃指北

    摘要:菜鸟教程框架中文手册入门目标使用搭建通过对数据增删查改没了纯粹占行用的拜 后端API入门学习指北 了解一下一下概念. RESTful API标准] 所有的API都遵循[RESTful API标准]. 建议大家都简单了解一下HTTP协议和RESTful API相关资料. 阮一峰:理解RESTful架构 阮一峰:RESTful API 设计指南 RESTful API指南 依赖注入 D...

    sf190404 评论0 收藏0

发表评论

0条评论

gotham

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<