vscode的debug学习、python调用大模型api-L0G2
from:Ricky
Day2-python
任务1:Leetcode 383(笔记中提交代码与leetcode提交通过截图)
题目:
给你两个字符串:ransomNote
和 magazine
,判断 ransomNote
能不能由 magazine
里面的字符构成。magazine
中的每个字符只能在 ransomNote
中使用一次。
如果可以,返回 true
;否则返回 false
。
通过
代码
任务2:Vscode连接InternStudio debug笔记
共享虚拟环境
将conda环境装到share制定目录里
有时我们会遇到想将整个虚拟环境保存到制定目录来共享,比如在局域网内,或者在InternStudio的团队开发机间共享。此时我们可以把conda的虚拟环境创建到指定目录下。
方法:
在创建环境时使用--prefix
参数制定环境所在的文件夹
比如我们想在/root/envs/路径下创建刚刚我们创建过得myenv
conda create --prefix /root/envs/myenv python=3.9
激活共享的虚拟环境方法
conda create /root/envs/myenv
conda安装到指定目录
为了节省大家的存储空间,本次实战营可以直接使用share目录下的conda环境,但share目录只有读权限,所以要安装额外的包时我们不能直接使用pip将包安装到对应环境中,需要安装到我们自己的目录下。
这时我们在使用pip的时候可以使用--target
或-t
参数来指定安装目录,此时pip会将你需要安装的包安装到你指定的目录下。
这里我们用本次实战营最常用的环境/root/share/pre_envs/pytorch2.1.2cu12.1
来举例。
# 首先激活环境 conda activate /root/share/pre_envs/pytorch2.1.2cu12.1
# 创建一个目录/root/myenvs,并将包安装到这个目录下 mkdir -p /root/myenvs pip install <somepackage> --target /root/myenvs
# 注意这里也可以使用-r来安装requirements.txt pip install -r requirements.txt --target /root/myenvs
使用方法
想使用安装在指定目录的python包,可以在python脚本开头临时动态地将该路径加入python环境变量中去
import sys # 你要添加的目录路径 your_directory = '/root/myenvs' # 检查该目录是否已经在 sys.path 中 if your_directory not in sys.path: # 将目录添加到 sys.path sys.path.append(your_directory) # 现在你可以直接导入该目录中的模块了 # 例如:import your_module
python插件
vscode的debug相关笔记
debug的launch的json文件
断点类型:普通断点、
条件断点
表达式断点(expression):当expression为true时,打断点。例如开sum的最后一轮,if i==end-1,这会在循环的最后一轮停下来
触发断点(hit count):5,表示:当这一行触发5次,运行断点。
Log message断点():在断点触发时,输出你想要输出的内容。输出内容在debug console中。相当与,多一个登记的地方,current i is {i}, 大括号内容是会被python解释器中的变量赋值的。
实践debug
launch。json文件直接默认,python解释器选择,调试当前正在运行的文件,
打断点
然后点击绿色的三角开始debug
点击下一步,直接跳转到下一次的断点处,(我点了4次,),所以我这里是i=4,右面那个“蓝色箭头,下面一个点”是逐步运行下一行。
debug面板各按钮功能介绍:
-
continue
: 继续运行到下一个断点。 -
step over
: 单步跳过,可以理解为运行当前行代码,不进入具体的函数或者方法。 -
step into
: 单步进入。如果当前行代码存在函数调用,则进入该函数内部。如果当前行代码没有函数调用,则等价于step over
。 -
step out
: 单步退出函数,返回到调用该函数的上一层代码。 -
restart
: 重新启动调试。 -
stop
: 终止调试。
也可以根据需求,打多种类型的断点,各种断点作用可参考上面的知识点。
命令行实现debug
疑问:
其实我不太懂为什么要在命令行debug这么麻烦,vscode可视化不是更好用嘛。。。大佬懂得可以帮回答下,感激
如何在命令行中发起debug?如果没有安装debugpy的话可以先通过pip install debugpy安装一下。
python -m debugpy --listen 5678 --wait-for-client ./myscript.py
./myscript.py
可以替换为我们想要debug的python文件,后面可以和直接在命令行中启动python一样跟上输入的参数。记得要先在想要debug的python文件打好断点并保存。
--wait-for-client
参数会让我们的debug server在等客户端连入后才开始运行debug。在这就是要等到我们在run and debug界面启动debug。
注意: 在开发机上使用该debug方式运行的时候可能会报以下warning
。此时,debug可能不能正常运行,需要按他提示的给python加上-Xfrozen_modules=off
参数禁用冻结模块即可。
python -m -Xfrozen_modules=off debugpy --listen 5678 --wait-for-client ./myscript.py
先在终端中发起debug server,然后再去vscode debug页面单击一下绿色箭头开启debug。
接下来
z
任务3:pip安装到指定目录
使用VScode连接开发机后使用
pip install -t
命令安装一个numpy到看开发机/root/myenvs
目录下,并成功在一个新建的python文件中引用。
任务3:书生浦语API实现文本结构化json
有一个小bug会导致报错。请大家自行通过debug功能定位到报错原因。
可以使用openai python sdk来调用InternLM api
若是想永久加入环境变量,可以对 ~/.bashrc 文件中添加以下命令。
export api_key="填入你的api token"
保存后记得source ~/.bashrc
。
python调用书生大模型的API
使用环境变量,配置API-key,避免api的泄露
只对当前终端生效,所以只能在当前终端运行python代码
作者:ricky_fan