我们知道vscode中调试django项目可以使用Debugger: Django来进入debug模式

launch.json如下:

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Debugger: Django",
            "type": "debugpy",
            "request": "launch",
            "program": "${workspaceFolder}\\manage.py",
            "args": [
                "runserver",
                "127.0.0.1:8080"
            ],
            "django": true
        }
    ]
}

但是有时候并不想运行整个项目,而只是想要运行项目中的某个文件,那么会报错Exception has occurred: ModuleNotFoundError等等导入错误,这是django框架没有配置导致的,我们可以自己写一个简单的代理文件,先配置一下django,然后再执行我们要调试的.py文件

debug.py里面调用test.py

import os 
import sys
import django


# 配置环境变量和django
def set_environment_path():
    BASE_DIR = os.path.abspath(__file__)
    while not os.path.exists(os.path.join(BASE_DIR,'manage.py')):
        BASE_DIR = os.path.dirname(BASE_DIR)

    sys.path.append(BASE_DIR)
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Algorithm.settings')
    django.setup()
    return BASE_DIR

set_environment_path()
from Sort import test # 再次导入就不会报错了
test.SortTest() # 调用test.py中的方法会进入test.py中打的断点

但是每次都去debug_file.py里面去手动修改导入的文件,导入的方法有些麻烦,在debug 某个.py文件的时候能否自动执行debug_file.py呢,下面是实现方法

配置launch.json文件

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "debug file1",
            "type": "debugpy",
            "request": "launch",
            "program": "${workspaceFolder}\\General\\debug_file.py",
            "console": "integratedTerminal",
            "cwd": "${workspaceFolder}",  // 根目录
            "args": [
                "${file}"
            ],
            // "env": {"PYTHONPATH":""},
            // "python": "${command:python.interpreterPath}"
        }
    ],
}

把program配置成debug_file.py文件的路径,args里面的参数写作当前打开的文件

使用sys.argv获取当前打开的文件路径

使用importlib动态导入文件

import os 
import sys
import django


# 配置环境变量和django
def set_environment_path():
    BASE_DIR = os.path.abspath(__file__)
    while not os.path.exists(os.path.join(BASE_DIR,'manage.py')):
        BASE_DIR = os.path.dirname(BASE_DIR)

    sys.path.append(BASE_DIR)
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Algorithm.settings')
    django.setup()
    return BASE_DIR

argv = sys.argv
if len(argv) > 1:
    if argv[0] != argv[1] and argv[1].endswith('.py'):
        import importlib
        BASE_DIR = set_environment_path()
        path_list = argv[1].split('\\')
        base_path_list = BASE_DIR.split('\\')
        path_list = path_list[len(base_path_list):]
        path_list[-1] = path_list[-1].replace('.py', '')
        importlib.import_module('.'.join(path_list)) # 导入.py文件的同时也会执行.py文件
        

然后这个时候再打开test.py  点击debug就会进入断点

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐