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

简介

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

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

常见情况一

  • 使用说明: 命令行配好Python环境,执行如下脚本即可运行。
 python main.py  --modelpath '/data/model/chat'  --type 'infer'
  • 应对方法: 一般这类调用方式,在python代码层次上都是用了 argparse 模块, 加载参数类似于如下这样 ,
import argparse

def 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 needed
   
   args = 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_ui

import 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_ui

import os
import sys

# 设置系统参数
os.environ['WEBUI_SERVER'] = '0.0.0.0'
os.environ['WEBUI_PORT'] = '7861'
web_ui.run_ui() # 需要调用参数的函数

相关推荐

  1. python项目常见使用调试方法

    2024-07-10 04:52:08       32 阅读
  2. C# 方法

    2024-07-10 04:52:08       34 阅读
  3. axios方式

    2024-07-10 04:52:08       53 阅读
  4. uniapp页面间方法

    2024-07-10 04:52:08       38 阅读
  5. js跳转方式

    2024-07-10 04:52:08       26 阅读
  6. Python——

    2024-07-10 04:52:08       53 阅读
  7. Python函数

    2024-07-10 04:52:08       20 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 04:52:08       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 04:52:08       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 04:52:08       57 阅读
  4. Python语言-面向对象

    2024-07-10 04:52:08       68 阅读

热门阅读

  1. 深入理解Spring Boot中的数据库优化

    2024-07-10 04:52:08       27 阅读
  2. HOW - React Router v6.x Feature 实践(react-router-dom)

    2024-07-10 04:52:08       23 阅读
  3. Mysql:时区问题

    2024-07-10 04:52:08       19 阅读
  4. WebSocket 双向通信

    2024-07-10 04:52:08       24 阅读
  5. 3102.最小化曼哈顿距离

    2024-07-10 04:52:08       25 阅读
  6. Power BI数据分析可视化实战培训

    2024-07-10 04:52:08       21 阅读
  7. Python文字数字转换利器: word2number库详解

    2024-07-10 04:52:08       30 阅读
  8. 在Spring Boot项目中使用Leyden

    2024-07-10 04:52:08       26 阅读
  9. 大模型推理:vllm多机多卡分布式本地部署

    2024-07-10 04:52:08       48 阅读
  10. 调度的艺术:Eureka在分布式资源调度中的妙用

    2024-07-10 04:52:08       28 阅读
  11. 前后端的身份认证(学习自用)

    2024-07-10 04:52:08       25 阅读