1 Conda虚拟环境
- 参见作业1
2 pip安装三方依赖包
pip install
pip install <somepackage> # 安装单个包,<somepackage>替换成你要安装的包名
pip install pandas numpy # 安装多个包,如panda和numpy
pip install numpy==2.0 # 指定版本安装
pip install numpy>=1.19,<2.0 # 使用版本范围安装
-r批量安装
pip install -r requirements.txt
2.1 安装到指定目录
- 默认的share文件夹只读
- 使用
--target或-t参数来指定安装目录 - 使用安装在指定目录的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
3 VScode中的Python Debug
3.1 断点
- 普通断点:在代码行号左侧点击,添加断点。
- 条件断点:在断点标记上右键,选择条件断点(conditional breakpoint)。VSCode 中常用的条件断点主要有三种类型:
- 表达式(Expression):输入一个 Python 表达式,每次触发断点时运行该表达式,当表达式的值为 True 时 VS Code 会暂停执行。例如:x == 10
- 触发计数(Hit Count):断点触发计数达到输入值时才会暂停运行。
- 记录日志(Log Message):触发该断点时在 Debug Console 中输出指定信息,实际上就是 logpoint。
- 需要输入要输出的信息,如果要用到表达式,可以使用 {} 将表达式括起来。例如,每次记录变量 i 的值可以写 x={i}。
3.2 在vscode使用命令行进行debug
- 很多时候我们要debug的不止是一个简单的python文件,而是很多参数,参数中不止会有简单的值还可能有错综复杂的文件关系,甚至debug一整个项目。这种情况下,直接使用命令行来发起debug会是一个更好的选择。
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 server,然后再去vscode debug页面单击一下绿色箭头开启debug。
3.3 使用别名简化命令
- 在linux系统中,可以对 ~/.bashrc 文件中添加以下命令
alias pyd='python -m debugpy --wait-for-client --listen 5678'
- 执行
source ~/.bashrc - 之后使用 pyd 命令(你可以自己命名) 替代 python 就能在命令行中起debug了,之前的debug命令就变成了
pyd ./myscript.py
4 调用InternLM API
- 在终端中临时将token加入变量,此时该环境变量只在当前终端内有效。所以该种方法需要我们在该终端中运行我们的py脚本。
export api_key="填入你的api token"
python internlm_test.py
- 若是想永久加入环境变量,可以对 ~/.bashrc 文件中添加以下命令。
- 保存后记得source ~/.bashrc。
export api_key="填入你的api token"
运行效果如下:
5 Python基础语法
6 作业
6.1 任务一
class Solution:
def canConstruct(self, ransomNote: str, magazine: str) -> bool:
if len(ransomNote) > len(magazine):
return False
return collections.Counter(ransomNote) <= collections.Counter(magazine)
6.2 任务二
- run
python debug.py,通过报错栈锁定出错行数 - 添加断点,判定其为非法json
- 添加try...catch逻辑控制输出结果
from openai import OpenAI
import os
def internlm_gen(prompt,client):
'''
LLM生成函数
Param prompt: prompt string
Param client: OpenAI client
'''
response = client.chat.completions.create(
model="internlm2.5-latest",
messages=[
{"role": "user", "content": prompt},
],
stream=False
)
return response.choices[0].message.content
api_key = os.getenv('api_key')
#api_key = "" #也可以明文写在代码内,不推荐
client = OpenAI(base_url="https://internlm-chat.intern-ai.org.cn/puyu/api/v1/",api_key=api_key)
content = """
书生浦语InternLM2.5是上海人工智能实验室于2024年7月推出的新一代大语言模型,提供1.8B、7B和20B三种参数版本,以适应不同需求。
该模型在复杂场景下的推理能力得到全面增强,支持1M超长上下文,能自主进行互联网搜索并整合信息。
"""
prompt = f"""
请帮我从以下``内的这段模型介绍文字中提取关于该模型的信息,要求包含模型名字、开发机构、提供参数版本、上下文长度四个内容,以json格式返回。
`{content}`
"""
res = internlm_gen(prompt,client)
# Check if res is a valid JSON
try:
res_json = json.loads(res)
print(res_json)
except json.JSONDecodeError:
print("Invaild JSON")
print(res)