# notebooks
**Repository Path**: self_5/notebooks
## Basic Information
- **Project Name**: notebooks
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-07-10
- **Last Updated**: 2026-07-23
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Jupyter Notebook 最佳实践项目模板(Colab + uv 极简版)
这是一个专为 **Jupyter Notebook 群管理** 打造的 Git 仓库模板,特别针对 **Google Colab 同步与协作** 进行了架构优化,并推荐使用现代化包管理工具 **uv**。
本项目通过将繁琐的 Colab 挂载、克隆、路径定位与依赖安装逻辑封装至根目录下的统一脚本,实现了**在任一 Notebook 中只需两行代码即可瞬间完成双端初始化**的极致体验(完美遵循 DRY 原则)。
---
## 📂 目录结构
```text
.
├── .gitattributes # 配置 Jupyter 提交过滤器 (自动清理输出)
├── .gitignore # 过滤 Python 临时文件与大型数据文件
├── README.md # 本说明文档
├── colab_init.py # 【核心组件】统一的 Colab 初始化托管脚本 (支持自动克隆、Drive 持久化)
├── requirements.txt # 【全局依赖】仅存放通用开发工具 (如 nbstripout)
├── data/ # 【小额数据】存放配置文件、小测试数据 (< 10MB)
│ └── .gitkeep
├── src/ # 【复用模块】存放可在多个 Notebook 间共享的 Python 脚本
│ └── utils.py # 提供双端挂载、路径智能获取等辅助函数
└── notebooks/ # 【笔记本库】
├── .gitkeep
└── project_analysis_demo/ # 【子项目示例】
├── analysis.ipynb # 演示 Notebook (已应用极简初始化)
└── requirements.txt # 【局部依赖】该子项目特有的第三方库 (如 pandas, matplotlib)
```
---
## 🚀 最佳实践 1:版本控制优化 (清除 Notebook 输出)
Jupyter Notebook (`.ipynb`) 文件本质上是 JSON 文件。如果直接将运行后的 Notebook 提交到 Git,会污染 Diff 历史。
### 🛠️ 本地环境初始化 (使用 uv)
我们在 `.gitattributes` 中配置了 `filter=nbstripout`。您只需在**本地**安装 `uv` 并执行以下命令一次,此后 `git commit` 时就会自动在后台清除 Notebook 中的输出和执行计数,保持 Git History 绝对干净:
```bash
# 1. 安装 uv (如果本地还没有)
# macOS: brew install uv
# 其它平台: curl -LsSf https://astral.sh/uv/install.sh | sh
# 2. 在项目根目录下创建虚拟环境 (默认创建在 .venv)
uv venv
# 3. 激活虚拟环境 (macOS)
source .venv/bin/activate
# 4. 极速安装全局开发依赖 (nbstripout)
uv pip install -r requirements.txt
# 5. 在当前 Git 仓库中激活过滤属性
nbstripout --install
```
---
## 📦 最佳实践 2:极致简化的 Colab 一键初始化 (DRY 原则)
我们无需在每一个 Notebook 头部粘贴几十行复杂的挂载、克隆、路径查找和 `pip` 安装代码。我们在根目录下提供了 `colab_init.py`。
您在任意一个新建的 Notebook 的首个单元格内,**只需编写如下两行代码**:
```python
# 1. 声明当前 Notebook 所属的子项目目录名
COLAB_SUBDIR = "project_analysis_demo"
# 2. 一键执行托管的初始化脚本
import urllib.request
exec(urllib.request.urlopen("https://raw.githubusercontent.com/nothing248/notebooks/main/colab_init.py").read().decode("utf-8"))
```
### ⚙️ 托管脚本会在后台自动为您完成:
1. **自动持久化**:挂载 Google Drive,并检测是否有此仓库。若无,则自动克隆到您的 Drive 下永久存储,避免每次重复克隆。
2. **工作路径自适应**:自动定位并 `cd` 到您在 `COLAB_SUBDIR` 声明的子项目文件夹下。
3. **系统寻径自动配置**:自动把项目根目录(`src/` 所在路径)加入 `sys.path`。这意味着您在初始化完后,可以像本地开发一样直接 `from src.utils import xxx`。
4. **依赖极速安装**:自动在 Colab 环境下安装 `uv`,并极速装载局部 `requirements.txt` 下的所有专属第三方库。
---
## 💾 最佳实践 3:数据存储划分决策
为防止 Git 仓库性能退化,我们建议遵守以下数据划分准则:
```mermaid
graph TD
Data[需要使用的数据文件] --> Size{文件大小?}
Size -- 小于 10 MB --> Type{是否属于配置或静态小样本?}
Type -- 是 --> Git["存放在 data/ 目录
(由 Git 追踪)"]
Type -- 否 --> Drive["存放在 Google Drive
(Git 自动忽略)"]
Size -- 大于 10 MB --> Drive
```
### 🔗 在 Colab 中优雅地跨平台读取数据
无论在本地还是 Colab,我们都推荐使用 `src/utils.py` 中的 `get_data_path()` 函数来规约数据路径,它会自动探测项目根目录:
```python
# 确保项目根目录在 sys.path 中
import sys, os
# ... (在步骤一初始化中已由 colab_init.py 自动完成系统寻径添加) ...
from src.utils import get_data_path
# 获取数据路径(本地或 Colab 挂载点)
data_file = get_data_path("my_large_dataset.csv")
# 读写数据
import pandas as pd
df = pd.read_csv(data_file)
```
---
## 🔄 最佳实践 4:Google Colab 同步指南
您有两种方式实现 Colab 与 GitHub 的双向同步:
### 方案 A:通过 GitHub 插件直接同步 (最推荐,适合轻量修改)
1. **打开**:访问 [Google Colab](https://colab.research.google.com/),选择 **GitHub** 标签页,输入您的仓库地址并选择对应的 `.ipynb` 文件打开。
2. **在 Notebook 中添加快捷打开徽章**:
在 Notebook 顶部添加如下 Markdown:
```markdown
[](https://colab.research.google.com/github/nothing248/notebooks/blob/main/notebooks/project_analysis_demo/analysis.ipynb)
```
3. **保存**:修改完成后,点击 **File -> Save a copy in GitHub**,即可将修改直接提交回 GitHub 仓库(带输出)。
### 方案 B:Google Drive 挂载 + Git 同步 (适合重度开发/大型数据集)
1. 在本地或 Colab 中将仓库克隆至 Google Drive 中的特定目录下:
```bash
# 在 Colab 挂载 Drive 后运行
%cd /content/drive/MyDrive
!git clone https://github.com/nothing248/notebooks.git
```
2. 在 Colab Notebook 中开发。所有修改会自动实时保存到您的 Google Drive。
3. 当需要将修改推送到 GitHub 时,直接在 Notebook 中运行以下命令:
```python
!git config --global user.name "nothing248"
!git config --global user.email "your.email@example.com"
!git add .
!git commit -m "update: training results"
!git push
```