python项目常见使用的传参调试方法

简介

你是否经常遇到下载的github开源知名项目,不知如何调试?只知道按说明的命令行运行?遇到异常或想改造也无从下手?这篇文档章将指导你如何入手调试别人的大型开源项目。

常见项目使用说明及代码如何调试

常见情况一

  • 使用说明: 命令行配好Python环境,执行如下脚本即可运行。
 python main.py  --modelpath '/data/model/chat'  --type 'infer'
  • 应对方法: 一般这类调用方式,在python代码层次上都是用了 argparse 模块, 加载参数类似于如下这样 ,
import argparsedef main():parser = argparse.ArgumentParser(description='Process inference parameters')parser.add_argument('--model_type', type=str, help='Type of the model for inference')# Add more arguments as neededargs = parser.parse_args()

 这种情况是绝大多数项目实现外部传参的标准形式,此时最差的方法是,找到传参函数和位置,一个个修改代码设置。
第二种思路是pycharm等调试器中,调试配置里输入传参参数(大多数人理解的)。
第三种最佳方案,调试代码中利用sys去指定,假设我们项目中新起一个demo.py文件,大致如下:

# -*- encoding: utf-8 -*-
"""
@File    :   demo.py
@Description    :   None 
@Author    :   一只特立独行的羱
@Contact :   未知
@License :   (C)Copyright 2019-2030,xx@Modify Time         @Version   
------------         --------
2024/7/3 14:31         1.0  
"""from swift.cli import infer
from swift.cli import web_uiimport os
import sys
#模拟命令行参数
sys.argv = ['demo.py','--model_type', 'deepseek-vl-7b-chat','--torch_dtype', 'torch.float16','--model_id_or_path', '/ai/llmdata/modelfile/deepseek-vl-7b-chat','--local_repo_path', '/ai/llmdata/home/yuanxf/DeepSeek-VL/']
#命令行参数会挂在到demo.py文件环境中,再调用下面那个需要参数的函数时,会自动从系统重获取到
infer.infer_main()  #要调用的python函数

常见情况二

  • 使用说明: 命令行配好Python环境,执行如下脚本即可运行。
SWIFT_UI_LANG=zh WEBUI_SERVER=0.0.0.0 WEBUI_PORT=7861 WEBUI_SHARE=1 swift web-ui
  • 应对方法: 一般这类命令,很明显可以看出这个pip install的包可以提供执行文件swift,用which命令可查看到,该文件在env的bin下放着。所以我们要看源码中的setup.py文件,找到这个swift命令带的不同参数映射到代码那些文件上了。如下是我的setup.py部分内容示例:
  setup(name='ms-swift',version=get_version(),description='Swift: Scalable lightWeight Infrastructure for Fine-Tuning',long_description=readme(),long_description_content_type='text/markdown',author='DAMO ModelScope teams',author_email='contact@modelscope.cn',keywords='python, petl, efficient tuners',url='https://github.com/modelscope/swift',packages=find_packages(exclude=('configs', 'demo')),include_package_data=True,package_data={'': ['*.h', '*.cpp', '*.cu'],},classifiers=['Development Status :: 4 - Beta','License :: OSI Approved :: Apache Software License','Operating System :: OS Independent','Programming Language :: Python :: 3','Programming Language :: Python :: 3.7','Programming Language :: Python :: 3.8','Programming Language :: Python :: 3.9','Programming Language :: Python :: 3.10',],license='Apache License 2.0',tests_require=parse_requirements('requirements/tests.txt'),install_requires=install_requires,extras_require=extra_requires,entry_points={'console_scripts': ['swift=swift.cli.main:cli_main']},dependency_links=deps_link,zip_safe=False)

从这,我就基本知道swift命令是被映射到swift.cli.main:cli_main这个方法下了,在往下代码查阅就可以找到各命令对应的逻辑。
好了,这里直接聊传参,很明显这类其实是系统环境,就是我们系统环境变量中存在WEBUI_PORT=7861这类。那这样代码层也可以等价修改命令如下:

#设置环境变量
source SWIFT_UI_LANG=zh 
source WEBUI_SERVER=0.0.0.0 WEBUI_PORT=7861 
#执行
swift web-ui

明白原理后,我们就可以新起一个demo.py文件,靠os包传参了:

# -*- encoding: utf-8 -*-
"""
@File    :   demo.py
@Description    :   None 
@Author    :   一只特立独行的羱
@Contact :   未知
@License :   (C)Copyright 2019-2030,xx@Modify Time         @Version   
------------         --------
2024/7/3 14:31         1.0  
"""from swift.cli import web_uiimport os
import sys# 设置系统参数
os.environ['WEBUI_SERVER'] = '0.0.0.0'
os.environ['WEBUI_PORT'] = '7861'
web_ui.run_ui() # 需要调用参数的函数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/41524.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

16.【C语言】初识常见关键字 上

1.关键字由C语言自带,不能自创 2.关键字不作变量名 3.关键字举例: auto自动:每个局部变量都由auto修饰,含义:自动创建,自动销毁 auto int a0;等价于int a0; exturn:申明外部符号 register:寄存器关键字…

数据治理的制胜法宝:筛斗数据技术在现代企业管理中的应用

数据治理的制胜法宝:筛斗数据技术在现代企业管理中的应用 在当今这个数据驱动的时代,企业管理的效率和竞争力越来越依赖于对数据的精准把握和高效利用。然而,随着企业规模的扩大和业务复杂度的增加,数据治理成为了一个亟需解决的…

EasyExcel 单元格根据图片数量动态设置宽度

在使用 EasyExcel 导出 Excel 时&#xff0c;如果某个单元格是图片内容&#xff0c;且存在多张图片&#xff0c;此时就需要单元格根据图片数量动态设置宽度。 经过自己的研究和实验&#xff0c;导出效果如下&#xff1a; 具体代码如下&#xff1a; EasyExcel 版本 <depen…

Haxm安装失败的解决办法

确认你的处理器是否是Intel的&#xff0c;如果是AMD那就无法安装&#xff0c;如果是Intel的&#xff0c;再确认是否支持V1T 如果处理器是Intel的且支持VT&#xff0c;在开机时进入BIOS界面&#xff0c;不同的品牌进入BIOS的方法各不相同&#xff0c;通常是F2/F12/delete些&…

Python爬虫零基础实战,简洁实用!

1.爬虫简介 简单来讲&#xff0c;爬虫就是一个探测机器&#xff0c;它的基本操作就是模拟人的行为去各个网站溜达&#xff0c;点点按钮&#xff0c;查查数据&#xff0c;或者把看到的信息背回来。就像一只虫子在一幢楼里不知疲倦地爬来爬去。 你可以简单地想象&#xff1a;每个…

论文学习 --- RL Maximumdiffusion reinforcement learning

前言 个人拙见,如果我的理解有问题欢迎讨论 (●′ω`●) 文章出处:https://techxplore.com/news/2024-05-random-robots-reliable-ai-algorithm.html 研究背景 最大扩散强化学习(MaxDiff RL)是一种创新的强化学习方法,借鉴了统计力学中的扩散过程和最大熵原理。该方法在…

Hadoop的namenode启动不起来

1、 排查原因 Initialization failed for Block pool (Datanode Uuid a5d441af-d074-4758-a3ff-e1563b709267) service to node1/192.168.88.101:8020. Exiting. java.io.IOException: Incompatible clusterIDs in /data/dn: namenode clusterID CID-674c5515-3fe1-4a9c-881d…

AIGC技术加持,英智法律智能体来了!

法律行业作为一个由大量文件积累的领域&#xff0c;非常适合由数据驱动的AI智能体。人工智能在法律领域的应用已经成为不可逆转的趋势。根据最高人民法院发布的《关于规范和加强人工智能司法应用的意见》&#xff0c;国家鼓励在司法领域广泛应用人工智能技术&#xff0c;以提高…

四端口千兆以太网交换机与 SFP 扩展功能

在数字化时代&#xff0c;网络基础设施的重要性日益凸显&#xff0c;它是企业和个人取得成功的关键支撑。配备 SFP 插槽的 4 端口千兆以太网交换机提供了一种灵活且可扩展的网络解决方案&#xff0c;能够应对快速的数据传输、低延迟以及不断增长的带宽需求。本篇文章深入探讨了…

IP地址配置

1.为虚拟机配置IP地址&#xff0c;网关&#xff0c;DNS 例如&#xff1a;手动给虚拟机配置IP地址为 192.168.5.50/24&#xff1b;网关地址为&#xff1a;192.168.5.2&#xff1b;DNS地址为&#xff1a;192.168.5.2 解题步骤如下&#xff1a; #配置IP地址 [rootlocalhost ~]#…

大厂都在加急招人的大模型LLM,到底怎么学?

大模型如何入坑&#xff1f; 想要完全了解大模型&#xff0c;你首先要了解市面上的LLM大模型现状&#xff0c;学习Python语言、Prompt提示工程&#xff0c;然后深入理解Function Calling、RAG、LangChain 、Agents等 很多人不知道想要自学大模型&#xff0c;要按什么路线学&a…

【网络安全】第4讲 身份认证技术(笔记)

一、身份认证技术概述 1、身份认证 是网络安全的第一道防线。是最基本的安全服务&#xff0c;其他的安全服务都依赖于它。在物联网应用系统中&#xff0c;身份认证也是整个物联网应用层信息安全体系的基础。 2、基本身份认证技术 &#xff08;1&#xff09;双方认证 是一种双…

人员定位系统在监狱中的应用也同样重要!

监狱管理应用人员定位系统怎么样&#xff1f;新锐科创告诉你&#xff0c;人员定位系统在监狱中的应用也是很重要的&#xff0c;运用这种新型的定位系统&#xff0c;来起到管理监狱人员的作用。 人员定位系统 在监狱中&#xff0c;关押着大量的犯人&#xff0c;所以&#xff0c…

拓扑Transformer模型TopoFormer:革新药物研发的智能钥匙

在药物研发的浩瀚征途中&#xff0c;每一步都充满了挑战与未知。从发现潜在的治疗靶点&#xff0c;到筛选出有效的药物分子&#xff0c;再到通过临床试验验证其安全性和有效性&#xff0c;这一过程往往耗时漫长且成本高昂。然而&#xff0c;随着人工智能技术的飞速发展&#xf…

昇思25天学习打卡营第15天|ResNet50图像分类

学AI还能赢奖品&#xff1f;每天30分钟&#xff0c;25天打通AI任督二脉 (qq.com) ResNet50图像分类 图像分类是最基础的计算机视觉应用&#xff0c;属于有监督学习类别&#xff0c;如给定一张图像(猫、狗、飞机、汽车等等)&#xff0c;判断图像所属的类别。本章将介绍使用ResN…

【JAVA入门】Day13 - 代码块

【JAVA入门】Day13 - 代码块 文章目录 【JAVA入门】Day13 - 代码块一、局部代码块二、构造代码块三、静态代码块 在 Java 中&#xff0c;两个大括号 { } 中间的部分叫一个代码块&#xff0c;代码块又分为&#xff1a;局部代码块、构造代码块、静态代码块三种。 一、局部代码块…

c++11新特性-3-自动类型推导

文章目录 自动类型推导1.auto1.1 const修饰1.2 auto不能使用的场景1.3 auto应用场景 2.decltype1.1 基本语法 自动类型推导 1.auto 注意&#xff0c;auto必须进行初始化 auto i 10; //int类型auto k 3.14; //double类型auto db; //错误1.1 const修饰 当const修改指针或者…

C++:构造函数是什么东西

一、构造函数是什么 在C中&#xff0c;构造函数是一种特殊成员函数&#xff0c;它有一下几个明显的特征&#xff1a; 1、它自动在创建新对象时被调用。 2、其名称与类名相同&#xff0c; 3、没有返回类型&#xff0c; 4、通常没有参数&#xff08;除了默认情况下的隐式thi…

跟《经济学人》学英文:2024年06月01日这期 The side-effects of the TikTok tussle

The side-effects of the TikTok tussle tussle&#xff1a;美 [ˈtəsəl] 激烈扭打&#xff1b;争夺 注意发音 side-effects&#xff1a;副作用&#xff1b;&#xff08;side-effect的复数&#xff09; As the app’s future hangs in the balance, the ramifications of …

MySQL的并发控制、事务、日志

目录 一.并发控制 1.锁机制 2.加锁与释放锁 二.事务&#xff08;transactions&#xff09; 1.事物的概念 2.ACID特性 3.事务隔离级别 三.日志 1.事务日志 2.错误日志 3.通用日志 4.慢查询日志 5.二进制日志 备份 一.并发控制 在 MySQL 中&#xff0c;并发控制是确…