【工具】VScode|Linux下 VScode 调试 Python 项目、模块、包的方法
使用过 Anaconda、Jupyter、Pycharm、VScode、VS2022、pdb 这几个 IDE 去编写 python 项目或者维护 python 环境,各有各的优缺点,但 VScode yyds!
可能会被网上说得天花乱坠的 Python 配置项吓退,会被 VScode 各种插件介绍吓退,但其实它只是个纯粹的文本编辑器,近年来愈发开箱即用。
系统版本:Ubuntu18.04
文章目录
方案一: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(在软件商店安装的阉割版无法支持中文输入),并将VScode的Python插件降级,我推荐 Ubuntu 18 的使用 2021.05.08 版本。
问题二:本地模块调试方法(找不到模块)
python 项目可以组织成包,如果组织成包,它的目录结构是这样的:
my_package/
├── my_package_code/
│ ├── __init__.py
│ ├── module1.py
│ └── module2.py
├── README.md
├── setup.py
└── requirements.txt
一般都需要两级目录。
而对于 python 包,不能直接运行,但可以安装好之后直接引入。有关
setup.py
的写法值得新开一篇文章,我建议如果不清楚怎么写,最好直接问 ChatGPT,在它给你生成的模板上去改,这样对新知识的需求量是最少的。如果组织成模块,就可以比较方便地直接运行,只要把模块的入口代码放到根目录下就行了,比如这样:
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() #在此行打断点
这种方式的缺陷:
- 跳转的时候容易跳转到你已经装在 site-packages 目录下的内容,你想修改的时候还得返回去找原代码。
- 如果你没写完安装的程序,还可能会出现模块找不到的情况,还得去手动引一下路径,比如这样:
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
优点:完全不需要配置;能直接调试模块/第三方库;对于已经知道用命令行如何运行,但不知道怎么在VScode中运行的python程序,不妨直接采取pdb
进行调试。
缺点:无便捷的图形化界面。
需要调试时,只需在调试的代码前插入如下代码:
import pdb
pdb.set_trace()
再在命令行多加一个pdb
,比如执行:python -m pdb onemodule.pdbtest
,即可调试。
与gdb调试相似,pdb
在终端打印的代码是即将执行的而不是执行完成的。
常用指令:
- n命令(next),让代码单步运行;s命令(单步进入,细运行),该命令会进入方法。
- <variable_name>.d(data),查看的中间变量variable_name的值。(注:对于大部分的类型,直接输入变量名即可)
- b <line>,在第line行打断点;b命令,查看所有断点。
- c命令(continue),让代码直接运行。
- clear <breakpoint_order>,清除第breakpoint_order个断点。
- l命令,查看多行当前运行的代码。
- 任何python代码,都可直接输入,如
print("1")
,非常方便。 - q命令,退出。
本账号所有文章均为原创,欢迎转载,请注明文章出处:https://blog.csdn.net/qq_46106285/article/details/130469097。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。
【工具】VScode|Linux下 VScode 调试 Python 项目、模块、包的方法的更多相关文章
- Linux 下如何调试 Python?
一般开发者都是在 IDE 中进行程序的调试,当然,有 IDE 的话,当然首选 IDE 进行调试. 但是,有时我们的业务场景,限制只能在 Linux 命令行模式进行调试. 这时该怎么办呢? 今天,就给大 ...
- Linux下离线安装python项目的依赖包
第一步新建一个site-packages文件夹,把python项目有需要的依赖包名称导出到site-packages下的requirements.txt中 $ pip3 freeze > req ...
- 【vscode】linux下vscode的使用
注1:vscode在查看project时,非常好用,可以导入整个project并查看其中文件,通过插件的安装还可以实现跳转到当前函数定义处的功能; 注2:可以了解下source insight; 补充 ...
- [转]linux下编译boost.python
转自:http://blog.csdn.net/gong_xucheng/article/details/25045407 linux下编译boost.python 最近项目使用c++操作python ...
- linux下后台启动springboot项目
linux下后台启动springboot项目 我们知道启动springboot的项目有三种方式: 运行主方法启动 使用命令 mvn spring-boot:run”在命令行启动该应用 运行“mvn p ...
- Linux知识(5)----LINUX下GDB调试
命令 解释 示例 file 加载被调试的可执行程序文件.因为一般都在被调试程序所在目录下执行GDB,因而文本名不需要带路径. (gdb) file gdb-sample r c Run的简 ...
- linux下后台启动springboot项目(转载)
我们知道启动springboot的项目有三种方式: 运行主方法启动 使用命令 mvn spring-boot:run”在命令行启动该应用 运行“mvn package”进行打包时,会打包成一个可以直接 ...
- linux下如何部署php项目?
linux下部署php项目环境可以分为两种,一种使用Apache,php,mysql的压缩包安装,一种用yum命令进行安装. 使用三种软件的压缩包进行安装,需要手动配置三者之间的关系.apache和p ...
- Nginx知多少系列之(五)Linux下托管.NET Core项目
目录 1.前言 2.安装 3.配置文件详解 4.Linux下托管.NET Core项目 5.Linux下.NET Core项目负载均衡 6.Linux下.NET Core项目Nginx+Keepali ...
- 一文入门Linux下gdb调试(二)
作者:良知犹存 转载授权以及围观:欢迎添加微信号:Conscience_Remains 总述 今天我们介绍一下core dump文件,Core dump叫做核心转储,它是进程运行时在突然崩溃的 ...
随机推荐
- Atcoder ABC383E Sum of Max Matching 题解 [ 绿 ] [ 最小瓶颈路 ] [ 并查集 ] [ Kruskal 重构树 ]
Sum of Max Matching:简单贪心,但我场上没切,唐完了. 思路 显然,对于最大边权最小问题,首先想到最小瓶颈路的 trick:按边的大小排序,对原图进行加边. 同时可以发现,这个匹配有 ...
- 【译】HTTP 文件更新了请求变量
许多用户都要求在 Visual Studio 的 HTTP 文件中添加对请求变量的支持.使用请求变量,您可以发送 HTTP 请求,然后在从 HTTP 文件发送的任何后续请求中使用响应或请求中的数据.我 ...
- .NET 使用 DeepSeek R1 开发智能 AI 客户端
前言 最近 DeepSeek 可太火了,在人工智能领域引起了广泛的关注,其强大的自然语言处理能力和智能搜索功能让大家跃跃欲试. 对于 .NET 技术栈的开发来说,一个常见的问题是:能否在 .NET 程 ...
- 【效能提升】测试人员提bug,应该提供哪些信息以便排查问题?
背景 我们在运维企业级应用时,会遇到很多Bug. 有时候,测试人员或业务方反馈bug,描述得不够详细,我们基于他的描述很难清晰地了解情况,以解决bug. 一般情况下,我们会跟他询问更多的详情,才能知悉 ...
- Top-N推荐算法 Top-N recommendation Algorithms
引言 推荐算法是计算机专业中的一种算法,通过一些计算,能够推测用户喜欢的东西,在互联网环境中应用比较广泛.Top-N算法在生活中非常常见,比如学术论文推荐论文.音乐软件推荐歌曲等. 今天看到一篇名叫& ...
- 写了个 CasaOS/ZimaOS 内网穿透的远程访问插件(不是 frp 或者 nps),欢迎大家测试使用
插件正在提交,应该过几天就会进入市场了. 插件访问效果大概如下: casaOS 远程界面 如果大家想先行测试可以手动下载 pr 的文件进行测试. 使用 插件会提供一个二维码,使用OpenIoThub ...
- 一个简单的PHP单文件路由类示例
<?php class Router { protected $routes = array(); protected $basePath; public function __construc ...
- Qt设置QTextEdit的行高
Qt设置QTextEdit的行高 解决方法: QTextDocument* doc = ui->edtCountryIntroduce->document(); for(QTextBloc ...
- 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
效果 来具体介绍之前先来看看效果. 使用C#构建了一个简单的MCP客户端,以下为运行这个简单客户端的截图,同样可以在Cline等其它的一些MCP客户端中玩耍. 创建一个数据库表: 获取数据库中的所有表 ...
- tsconfig.json报错问题
tsconfig.json报错问题 前言 创建 tsconfig.json 配置文件时,VS Code 会自动检测当前项目当中是否有ts文件,若没有则报错,提示用户需要创建一个ts文件后,再去使用ty ...