LeRobot入门教程 03:Git 与 Python 环境
1. 使用 Git 管理代码
1.1 Git 是什么?Git 和 GitHub 有什么区别?
Git 是版本控制工具,用来记录代码的每次修改;GitHub、GitLab、Gitee 是存放 Git 仓库的网站。
可以把 Git 想象成游戏存档:
git init = 开始记录存档
git add = 选择要把哪些改动放进这次存档
git commit = 真正保存一次存档
git push = 把本地存档上传到云端
git pull = 把云端的新存档下载到本地
1.2 安装和配置 Git
如果还没有安装:
apt update
apt install -y git
检查版本:
git --version
第一次使用前,配置你的名字和邮箱:
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
git config --global init.defaultBranch main
查看配置:
git config --list
1.3 从 GitHub 克隆项目
git clone https://github.com/用户名/仓库名.git
如果 GitHub 很慢,可以先在同一个终端里开启 AutoDL 学术加速:
source /etc/network_turbo
git clone https://github.com/用户名/仓库名.git
克隆完成后进入目录:
cd 仓库名
git status
1.4 最常用的日常流程
在已有 Git 仓库中修改代码后,通常按下面顺序保存:
git status
git diff
git add 文件名
git commit -m "说明这次修改做了什么"
git pull
git push
常用命令:
| 命令 | 作用 |
|---|---|
git status | 查看哪些文件被修改、新增或暂存 |
git diff | 查看未暂存的修改 |
git diff --staged | 查看已经 git add 的修改 |
git add 文件名 | 暂存一个文件 |
git add . | 暂存当前目录下所有改动 |
git commit -m "message" | 保存一次版本记录 |
git log --oneline --graph --all | 查看简洁的提交历史 |
git pull | 拉取远程仓库最新提交 |
git push | 推送本地提交到远程仓库 |
1.5 创建一个新仓库
mkdir my_project
cd my_project
git init
echo "# My Project" > README.md
git add README.md
git commit -m "Initial commit"
如果要把这个本地仓库上传到 GitHub,需要先在 GitHub 网页上创建一个空仓库,然后:
git remote add origin https://github.com/用户名/仓库名.git
git push -u origin main
origin 是远程仓库的默认别名,main 是主分支名。
1.6 分支:安全地尝试新想法
分支可以理解成平行世界。main 分支保持可用版本,实验代码放在新分支里。
# 查看分支
git branch
# 创建并切换到新分支
git switch -c experiment
# 修改代码后提交
git add .
git commit -m "Try a new idea"
# 回到主分支
git switch main
# 合并实验分支
git merge experiment
# 删除已合并的分支
git branch -d experiment
1.7 .gitignore:不要提交大文件和临时文件
数据集、模型权重、日志和缓存通常不适合放进 Git。可以在仓库根目录创建 .gitignore:
__pycache__/
*.pyc
*.pth
*.safetensors
*.zip
*.tar.gz
runs/
outputs/
.ipynb_checkpoints/
.env
这样 git add . 时会自动忽略这些文件。
1.8 使用 SSH Key 连接 GitHub
HTTPS 克隆通常最简单;如果经常推送代码,可以配置 SSH Key。
-
在服务器上生成密钥:
ssh-keygen -t ed25519 -C "你的邮箱"一路按
Enter即可。 -
查看公钥:
cat ~/.ssh/id_ed25519.pub -
复制输出内容,到 GitHub 的 Settings → SSH and GPG keys → New SSH key 中添加。
-
测试连接:
ssh -T git@github.com
注意:id_ed25519 是私钥,不要发给任何人;id_ed25519.pub 是公钥,可以添加到 GitHub。
1.9 出错时怎么补救
| 场景 | 命令 | 说明 |
|---|---|---|
| 修改了文件但还不想要 | git restore 文件名 | 丢弃工作区修改,不可轻易恢复 |
文件已经 git add 但还没 commit | git restore --staged 文件名 | 取消暂存,但保留文件内容 |
| commit 信息写错了,还没 push | git commit --amend | 修改最近一次提交 |
| 已 push 的提交需要撤销 | git revert 提交ID | 生成一个反向提交,比强制回退更安全 |
| push 被拒绝 | git pull --rebase 后解决冲突,再 git push | 说明远程有新提交,先同步历史 |
1.10 Git 常见问题
| 报错 / 现象 | 可能原因 | 处理方法 |
|---|---|---|
command not found: git | Git 没安装 | apt update && apt install -y git |
| clone 很慢 | GitHub 访问不稳定 | 开启 AutoDL 学术加速,或使用镜像仓库 |
Please tell me who you are | 没配置用户名邮箱 | 执行 git config --global user.name ... 和 user.email ... |
| push 要求密码 | GitHub HTTPS 已不支持账号密码 | 使用 Personal Access Token 或 SSH Key |
Permission denied (publickey) | SSH Key 没配置好 | 检查 ssh -T git@github.com 和 GitHub 公钥 |
| 不小心提交了大文件 | 没写 .gitignore | 尽早添加 .gitignore;已提交的大文件要谨慎清理历史 |
!git --version
!git config --global --list 2>/dev/null || echo "还没有全局 Git 配置"
%%bash
set -e
demo="$HOME/LeRobot入门教程_git_demo"
mkdir -p "$demo"
cd "$demo"
# 如果目录还不是 Git 仓库,就初始化它
if [ ! -d .git ]; then
git init -b main
fi
echo "# LeRobot入门教程 Git Demo" > README.md
git add README.md
# 这里用 -c 只为本次提交临时提供用户名邮箱,不改全局配置
git -c user.name="LeRobot入门教程 Demo" -c user.email="demo@example.com" \
commit -m "Add README" || echo "没有新的改动可以提交"
git log --oneline -n 3
git status --short
2. 什么是 Python?
Python 是一种编程语言,可以理解为“给电脑下达指令的语言”。它语法接近自然语言,因此在科研、数据分析、人工智能领域非常流行。
你可以把编程想象成写菜谱:
1. 拿到数据。
2. 处理数据。
3. 训练模型。
4. 保存结果。
Python 会把这些步骤写成电脑能执行的代码。
Python 里最基础的几个概念
- 变量:给一个值起名字,例如
learning_rate = 0.001。 - 数据类型:整数、浮点数、字符串、列表、字典等。
- 函数:把一段可重复使用的工作打包。
- 类:把数据和操作组织在一起,深度学习模型通常用类写。
- 包 / 库:别人写好的工具箱,例如 NumPy、PyTorch、pandas。
- 解释器:真正运行 Python 代码的程序。服务器上可能有多个 Python 环境。
# 变量和打印
name = "robot"
epoch = 10
learning_rate = 0.001
print("实验名称:", name)
print("训练轮数:", epoch)
print("学习率:", learning_rate)
# 条件判断
if epoch >= 10:
print("这个训练时间可能比较久")
else:
print("这个训练应该比较快")
# 循环
for i in range(3):
print(f"第 {i + 1} 次迭代")
# 列表:有序的一组数据
losses = [1.20, 0.95, 0.71, 0.55]
print("losses:", losses)
print("第一个 loss:", losses[0])
print("最后一个 loss:", losses[-1])
# 字典:用键值对保存信息
experiment = {
"name": "baseline",
"epochs": 20,
"batch_size": 32,
"use_gpu": True,
}
print("实验名:", experiment["name"])
print("batch size:", experiment["batch_size"])
# 函数:把一段逻辑打包,方便重复使用
def describe_dataset(num_images, num_actions):
total = num_images * num_actions
return f"图像数量 {num_images},每个图像关联 {num_actions} 个动作,共 {total} 条监督信息"
print(describe_dataset(100, 8))
# 类:把数据和行为组织在一起
class SimpleTrainer:
def __init__(self, model_name, epochs):
self.model_name = model_name
self.epochs = epochs
def describe(self):
return f"模型 {self.model_name} 将训练 {self.epochs} 轮"
trainer = SimpleTrainer("small_policy", 5)
print(trainer.describe())
3. Python 环境和包管理
一个 Python 环境可以理解成一套独立的工具箱。环境里装了 Python 解释器和各种包。
为什么要用独立环境?因为不同项目可能需要不同版本的包。例如项目 A 需要 PyTorch 2.1,项目 B 需要 PyTorch 2.8。如果都装在一起,容易冲突。
常见工具
pip:Python 官方常用的包安装工具。conda/mamba:管理 Python 版本和包的工具。venv:Python 自带的轻量虚拟环境工具。uv:较新的快速包管理工具。
常见命令
# 查看当前 Python
which python
python --version
# 查看 pip
python -m pip --version
# 安装包
python -m pip install numpy
# 查看某个包是否安装
python -m pip show torch
# 导出当前环境
python -m pip freeze > requirements.txt
!which python
!python --version
!python -m pip --version