【工具】VScode|Linux下 VScode 调试 Python 项目、模块、包的方法

使用过 Anaconda、Jupyter、Pycharm、VScode、VS2022、pdb 这几个 IDE 去编写 python 项目或者维护 python 环境,各有各的优缺点,但 VScode yyds!

可能会被网上说得天花乱坠的 Python 配置项吓退,会被 VScode 各种插件介绍吓退,但其实它只是个纯粹的文本编辑器,近年来愈发开箱即用。

系统版本:Ubuntu18.04

文章目录

    • 方案一:VScode
      • 1 在VScode中切换Python版本(运行及调试时)
      • 2 调试本地模块及第三方库
        • 问题一:vscode python 调试闪退
        • 问题二:本地模块调试方法(找不到模块)
          • 1)直接调用,然后调试
          • 2)(推荐)VScode 自带的 Python 模块调试器
        • 问题三:VScode 中传递命令行参数
      • ※ 亮点(开发pip包的话一定要看啊一定要看)
    • 方案二:pdb

方案一:VScode

一般情况用 VScode 调试会遇到一些操作的问题,一是切换 python 版本,二是对于多文件的项目文件,文件到底咋放才能正确地相互引用,三是调试的时候怎么传参。

接下来简单解释一下。

首先,VScode 下载的官网链接:https://code.visualstudio.com/。
其次,安装插件“Python”,插件的名字就叫 Python,就只要安这一个就好了。
有些系统的应用商店的软件包很旧,比如 Ubuntu18.04,从应用商店下载的不支持中文输入法。

1 在VScode中切换Python版本(运行及调试时)

首先,声明并着重强调一下,切换 Python 版本,不需要配置环境变量。

Ctrl+Shift+P,选择配置项,输入python找到 python 的配置项,选择 interpreter 配置项去选择Python解释器。

如下图所示:

请添加图片描述

修改后,在运行和调试时均会自动采取该解释器。

2 调试本地模块及第三方库

有关launch.json文件的配置可参考VScode官网的文档-Launch configurations。

问题一:vscode python 调试闪退

参考:vscode python 调试闪退

解决办法:去官网安装VScode(在软件商店安装的阉割版无法支持中文输入),并将VScode的Python插件降级,我推荐 Ubuntu 18 的使用 2021.05.08 版本。

问题二:本地模块调试方法(找不到模块)

参考:python 【No module named】找不到自己写的模块 3种情况及解决方法-玛丽莲茼蒿-CSDN博客

  1. python 项目可以组织成包,如果组织成包,它的目录结构是这样的:

    my_package/
    ├── my_package_code/
    │   ├── __init__.py
    │   ├── module1.py
    │   └── module2.py
    ├── README.md
    ├── setup.py
    └── requirements.txt
    

    一般都需要两级目录。
    而对于 python 包,不能直接运行,但可以安装好之后直接引入。

    有关 setup.py 的写法值得新开一篇文章,我建议如果不清楚怎么写,最好直接问 ChatGPT,在它给你生成的模板上去改,这样对新知识的需求量是最少的。

  2. 如果组织成模块,就可以比较方便地直接运行,只要把模块的入口代码放到根目录下就行了,比如这样:

    my_package/
    ├── my_package_code/
    │   ├── __init__.py
    │   ├── module1.py
    │   └── module2.py
    ├── __init__.py
    ├── main.py
    ├── README.md
    ├── setup.py
    └── requirements.txt
    

    这种情况可以用 python3 -m my_package.main运行模块。

那么在 VScode 中怎么调试上述代码?有两种方式,一是另外写个函数,调用一下;另一种是更加推荐的,直接使用 VScode 的模块调试器。

1)直接调用,然后调试

新建文件,引入该模块即可断点调试,如下:

import onemodule.test
onemodule.test.main() #在此行打断点

这种方式的缺陷:

  1. 跳转的时候容易跳转到你已经装在 site-packages 目录下的内容,你想修改的时候还得返回去找原代码。
  2. 如果你没写完安装的程序,还可能会出现模块找不到的情况,还得去手动引一下路径,比如这样:
    import sys
    import os
    sys.path.append(os.pos.path.dirname(__file__))
    
    import onemodule.test
    onemodule.test.main() #在此行打断点
    

并且,注意在 launch.json 文件中添加 justMyCode: false,否则无法跳转进入模块文件。

如下图,点击添加配置进入launch.json文件:

请添加图片描述

如下图,将justMyCode选项改成false即可:

请添加图片描述

2)(推荐)VScode 自带的 Python 模块调试器

直接python -m onemodule.test就可以运行,同理可以编写对应的 launch 文件。

可以先用 VScode 生成 launch文件:


大概会生成如下内容:

{
    "name": "Python: 模块",
    "type": "python",
    "request": "launch",
    "module": "module_name"
},

其实说白了,就是,调试文件时用的是 "program": "xxxx.py",而调试模块的时候用的是"module": "xxxx"。其他的比如参数配置之类的,和文件调试是一样的。

问题三:VScode 中传递命令行参数

同上,点击进入配置launch.json文件,如下图,添加args参数:

请添加图片描述

如果您无法理解为什么要做调试的配置,认为只要 print 就可以解决大部分问题,你可以考虑了解一下“条件断点”,以及变量监视。

※ 亮点(开发pip包的话一定要看啊一定要看)

如果你是个pip包的开发者,请用pip install -e . 来安装包,这样包的代码就不会被安装到远端,而是会直接将本地的目录视为包目录,这样每次有修改的时候就不用重新pip install了。

下附ChatGPT详解:

【GPT】:pip install -e . 是一个用于在Python中安装可编辑(editable)包的命令。可编辑包允许你在开发过程中对包进行修改并实时应用更改,而无需重新安装包。这对于开发自己的Python包或库以及在开发过程中测试包非常有用。
具体解释如下:
pip 是Python的包管理工具,用于安装、卸载、升级Python包。
install 是pip的一个子命令,用于安装Python包。
-e 是pip install命令的一个选项,表示安装一个”editable”包。可编辑包的源代码不会被复制到Python的site-packages目录,而是直接在原始位置运行,允许你对包进行修改并实时应用更改。
. 表示当前目录,这意味着你要在当前目录中查找setup.py文件,然后安装这个包。
所以,当你运行pip install -e .时,它会查找当前目录下的setup.py文件,然后使用这个文件中的信息来安装包。这使你能够在开发过程中轻松修改包并查看更改,而无需重新安装包。这对于包的开发和测试非常有用。

方案二:pdb

参考:如何动态调试Python的第三方库-ybdesire-CSDN博客

优点:完全不需要配置;能直接调试模块/第三方库;对于已经知道用命令行如何运行,但不知道怎么在VScode中运行的python程序,不妨直接采取pdb进行调试。
缺点:无便捷的图形化界面。

需要调试时,只需在调试的代码前插入如下代码:

import pdb
pdb.set_trace()

再在命令行多加一个pdb,比如执行:python -m pdb onemodule.pdbtest,即可调试。

与gdb调试相似,pdb在终端打印的代码是即将执行的而不是执行完成的。

常用指令:

  1. n命令(next),让代码单步运行;s命令(单步进入,细运行),该命令会进入方法。
  2. <variable_name>.d(data),查看的中间变量variable_name的值。(注:对于大部分的类型,直接输入变量名即可)
  3. b <line>,在第line行打断点;b命令,查看所有断点。
  4. c命令(continue),让代码直接运行。
  5. clear <breakpoint_order>,清除第breakpoint_order个断点。
  6. l命令,查看多行当前运行的代码。
  7. 任何python代码,都可直接输入,如print("1"),非常方便。
  8. q命令,退出。

本账号所有文章均为原创,欢迎转载,请注明文章出处:https://blog.csdn.net/qq_46106285/article/details/130469097。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2023年11月23日
下一篇 2023年11月23日

相关推荐