vscode debug django项目中的某个文件
·
我们知道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就会进入断点

更多推荐
所有评论(0)