fastbackup


Namefastbackup JSON
Version 1.0.2 PyPI version JSON
download
home_pagehttps://github.com/chenziwenhaoshuai/fastbackup
Summary一行导入式Python项目实验备份工具
upload_time2025-09-10 03:17:34
maintainerNone
docs_urlNone
authorZiwenChen
requires_python>=3.6
licenseMIT
keywords backup experiment version-control development
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # FastBackup ⚡

<div align="center">

**一行导入式Python项目实验备份工具**

*再也不用担心忘记上次的实验参数了!*



</div>

---

## 🤔 为什么需要 FastBackup?

作为一个经常跑实验的开发者,你是否遇到过这些痛点:

- 🔄 "这次实验用的什么参数来着?"
- 😅 "上次的学习率是0.001还是0.01?"
- 😰 "改了一堆参数,结果还不如之前的版本..."
- 🤦‍♂️ "想回到上周的配置,但是记不清改了什么..."

**FastBackup 一行代码解决所有问题!**

## 🚀 特点

- **🎯 零配置**: 只需一行导入,无需任何配置文件
- **💾 智能备份**: 只在文件真正变化时才创建备份,避免重复
- **📁 自动检测**: 智能识别项目根目录,无需手动指定路径
- **🔍 完整历史**: 保留所有备份记录,支持一键恢复
- **🏃‍♂️ 超轻量**: 纯Python标准库实现,零外部依赖
- **🛡️ 安全无忧**: 本地存储,自动忽略git,不会泄露代码

## 📦 安装

```bash
pip install fastbackup
```

## 🎯 使用方法

### 最简单的使用 - 一行导入

在你的Python脚本开头添加这一行:

```python
import fastbackup  # 🎉 就这么简单!

# 你的实验代码
def train_model():
    learning_rate = 0.001  # 这次用0.001
    batch_size = 32        # 批次大小32
    epochs = 100           # 训练100轮
    
    # 模型训练代码...
    model = create_model()
    optimizer = Adam(lr=learning_rate)
    
    for epoch in range(epochs):
        # 训练逻辑...
        pass

if __name__ == "__main__":
    train_model()
```

**就是这样!** 每次运行脚本时,FastBackup会:
- ✅ 自动检测你的项目目录
- ✅ 智能判断是否有文件变化
- ✅ 只在需要时创建备份
- ✅ 在项目根目录创建 `.fastbackup` 文件夹存储备份

## 📁 备份位置示例

假设你的项目结构:
```
my_experiment/
├── train.py          # 你在这里 import fastbackup
├── model.py
├── config.py
└── utils.py
```

运行后自动创建:
```
my_experiment/
├── train.py
├── model.py
├── config.py
├── utils.py
├── .fastbackup/                    # 🆕 备份目录
│   ├── backup_20240310_143022/     # 第一个版本
│   │   ├── train.py
│   │   ├── model.py
│   │   ├── config.py
│   │   ├── utils.py
│   │   └── backup_info.json
│   ├── backup_20240310_150134/     # 修改参数后的版本
│   │   └── ...
│   └── backup_20240311_091245/     # 今天的版本
│       └── ...
└── .gitignore                      # 🆕 自动更新
```

## 🔍 查看备份历史

### 命令行方式
```bash
$ fastbackup --list

📋 FastBackup 历史记录 (5 个备份):
------------------------------------------------------------
 1. 2024-03-11 09:12:45 | 4 文件 | backup_20240311_091245
 2. 2024-03-10 16:30:22 | 4 文件 | backup_20240310_163022  
 3. 2024-03-10 15:01:34 | 4 文件 | backup_20240310_150134
 4. 2024-03-10 14:30:22 | 4 文件 | backup_20240310_143022
 5. 2024-03-09 18:45:11 | 4 文件 | backup_20240309_184511
```

### Python代码方式
```python
import fastbackup
fastbackup.list_backups()
```

## 🎮 恢复备份

当你发现新版本效果不好,想回到之前的版本:

### 命令行恢复
```bash
$ fastbackup --restore backup_20240310_143022

🔄 恢复备份: backup_20240310_143022
  ✅ train.py
  ✅ model.py  
  ✅ config.py
  ✅ utils.py
✨ 恢复完成! 共恢复 4 个文件
```

### Python代码恢复
```python
import fastbackup
fastbackup.restore("backup_20240310_143022")
```

## 🎯 实际使用场景

### 场景1:深度学习调参
```python
import fastbackup

# Week 1: Baseline
learning_rate = 0.001
batch_size = 32
# Result: 85% accuracy

# Week 2: 尝试更大的学习率
learning_rate = 0.01   # 修改这里
batch_size = 32
# Result: 82% accuracy (更差了)

# Week 3: 回到baseline,尝试更大的batch size
learning_rate = 0.001  # 恢复baseline
batch_size = 64        # 只改这个
# Result: 87% accuracy (更好了!)
```

每次修改都会自动备份,你可以随时对比和恢复任何版本!

### 场景2:机器学习特征工程
```python
import fastbackup

def preprocess_data():
    # V1: 基础预处理
    normalize = True
    remove_outliers = False
    feature_scaling = "standard"
    
    # V2: 加上异常值处理
    # remove_outliers = True  # 效果提升2%
    
    # V3: 尝试不同的缩放方法
    # feature_scaling = "minmax"  # 效果下降了
```

### 场景3:Web开发配置调试
```python
import fastbackup

# 数据库配置实验
DATABASE_CONFIG = {
    "pool_size": 10,      # 连接池大小
    "timeout": 30,        # 超时时间
    "retry_times": 3,     # 重试次数
}

# API限流配置
RATE_LIMIT = {
    "requests_per_minute": 100,
    "burst_size": 20,
}
```

## 📊 运行时输出示例

```bash
$ python train.py
💾 FastBackup: 创建备份 backup_20240311_091245 (4 个文件)
Starting training...
Epoch 1/100: loss=0.45, accuracy=0.82
...

$ python train.py  # 没有修改文件
🔄 FastBackup: 使用现有备份 backup_20240311_091245
Starting training...
...
```

## 🛠️ 高级功能

### 手动触发备份
```python
import fastbackup

# 在关键节点手动备份
fastbackup.backup()
print("重要版本已备份!")
```

### 跨项目查看备份
```python
import fastbackup

# 查看其他项目的备份
fastbackup.list_backups("/path/to/another/project")

# 恢复其他项目的备份
fastbackup.restore("backup_name", "/path/to/another/project")
```

### 命令行工具
```bash
# 查看版本
fastbackup --version

# 查看帮助
fastbackup --help

# 指定项目路径
fastbackup --list --project /path/to/project
```

## 🔧 配置说明

FastBackup 采用零配置设计,但你可以了解它的行为:

- **备份位置**: 项目根目录的 `.fastbackup/` 文件夹
- **备份内容**: 只备份 `.py` 文件
- **忽略目录**: 自动跳过 `.git`、`__pycache__`、`venv`、`node_modules` 等
- **变化检测**: 基于文件MD5哈希,确保准确检测变化
- **Git集成**: 自动将 `.fastbackup/` 添加到 `.gitignore`

## 🚫 不会备份的内容

- 数据文件 (`.csv`, `.json`, `.txt` 等)
- 模型权重 (`.pth`, `.h5`, `.ckpt` 等)  
- 虚拟环境 (`venv/`, `env/`, `.venv/`)
- Git目录 (`.git/`)
- 缓存文件 (`__pycache__/`, `.pytest_cache/`)
- 依赖目录 (`node_modules/`)

## 🤝 贡献指南

我们欢迎所有形式的贡献!

### 报告问题
如果你遇到bug或有功能建议,请[创建一个Issue](https://github.com/chenziwenhaoshuai/fastbackup/issues)。


## ❓ 常见问题

### Q: 会影响程序运行速度吗?
A: 几乎不会。FastBackup采用智能检测,只在文件真正变化时才执行备份操作,通常耗时不超过几毫秒。

### Q: 备份会占用很多空间吗?
A: 通常不会。只备份`.py`文件,而且可以定期清理旧备份。一个中型项目的备份通常只有几MB。

### Q: 支持哪些Python版本?
A: Python 3.6+ 都支持,无外部依赖。

### Q: 可以在生产环境使用吗?
A: FastBackup主要为开发和实验设计。在生产环境建议使用专业的版本控制和部署工具。

### Q: 如何删除旧备份?
A: 直接删除 `.fastbackup/` 目录下的对应文件夹即可,或者我们计划在未来版本中添加自动清理功能。

## 📜 许可证

本项目采用 MIT 许可证。详见 [LICENSE](LICENSE) 文件。

## 🎉 致谢

感谢所有为这个项目做出贡献的开发者!

---

<div align="center">

**如果 FastBackup 帮到了你,请给我们一个 ⭐ 星标!**

Made with ❤️ by developers, for developers.

</div>

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/chenziwenhaoshuai/fastbackup",
    "name": "fastbackup",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.6",
    "maintainer_email": null,
    "keywords": "backup, experiment, version-control, development",
    "author": "ZiwenChen",
    "author_email": "chenziwen <1304005976@qq.com>",
    "download_url": "https://files.pythonhosted.org/packages/93/ad/4df98a581331d021d171a6d26f0fc2bc58fae1777821299f8193738636ed/fastbackup-1.0.2.tar.gz",
    "platform": null,
    "description": "# FastBackup \u26a1\r\n\r\n<div align=\"center\">\r\n\r\n**\u4e00\u884c\u5bfc\u5165\u5f0fPython\u9879\u76ee\u5b9e\u9a8c\u5907\u4efd\u5de5\u5177**\r\n\r\n*\u518d\u4e5f\u4e0d\u7528\u62c5\u5fc3\u5fd8\u8bb0\u4e0a\u6b21\u7684\u5b9e\u9a8c\u53c2\u6570\u4e86\uff01*\r\n\r\n\r\n\r\n</div>\r\n\r\n---\r\n\r\n## \ud83e\udd14 \u4e3a\u4ec0\u4e48\u9700\u8981 FastBackup\uff1f\r\n\r\n\u4f5c\u4e3a\u4e00\u4e2a\u7ecf\u5e38\u8dd1\u5b9e\u9a8c\u7684\u5f00\u53d1\u8005\uff0c\u4f60\u662f\u5426\u9047\u5230\u8fc7\u8fd9\u4e9b\u75db\u70b9\uff1a\r\n\r\n- \ud83d\udd04 \"\u8fd9\u6b21\u5b9e\u9a8c\u7528\u7684\u4ec0\u4e48\u53c2\u6570\u6765\u7740\uff1f\"\r\n- \ud83d\ude05 \"\u4e0a\u6b21\u7684\u5b66\u4e60\u7387\u662f0.001\u8fd8\u662f0.01\uff1f\"\r\n- \ud83d\ude30 \"\u6539\u4e86\u4e00\u5806\u53c2\u6570\uff0c\u7ed3\u679c\u8fd8\u4e0d\u5982\u4e4b\u524d\u7684\u7248\u672c...\"\r\n- \ud83e\udd26\u200d\u2642\ufe0f \"\u60f3\u56de\u5230\u4e0a\u5468\u7684\u914d\u7f6e\uff0c\u4f46\u662f\u8bb0\u4e0d\u6e05\u6539\u4e86\u4ec0\u4e48...\"\r\n\r\n**FastBackup \u4e00\u884c\u4ee3\u7801\u89e3\u51b3\u6240\u6709\u95ee\u9898\uff01**\r\n\r\n## \ud83d\ude80 \u7279\u70b9\r\n\r\n- **\ud83c\udfaf \u96f6\u914d\u7f6e**: \u53ea\u9700\u4e00\u884c\u5bfc\u5165\uff0c\u65e0\u9700\u4efb\u4f55\u914d\u7f6e\u6587\u4ef6\r\n- **\ud83d\udcbe \u667a\u80fd\u5907\u4efd**: \u53ea\u5728\u6587\u4ef6\u771f\u6b63\u53d8\u5316\u65f6\u624d\u521b\u5efa\u5907\u4efd\uff0c\u907f\u514d\u91cd\u590d\r\n- **\ud83d\udcc1 \u81ea\u52a8\u68c0\u6d4b**: \u667a\u80fd\u8bc6\u522b\u9879\u76ee\u6839\u76ee\u5f55\uff0c\u65e0\u9700\u624b\u52a8\u6307\u5b9a\u8def\u5f84\r\n- **\ud83d\udd0d \u5b8c\u6574\u5386\u53f2**: \u4fdd\u7559\u6240\u6709\u5907\u4efd\u8bb0\u5f55\uff0c\u652f\u6301\u4e00\u952e\u6062\u590d\r\n- **\ud83c\udfc3\u200d\u2642\ufe0f \u8d85\u8f7b\u91cf**: \u7eafPython\u6807\u51c6\u5e93\u5b9e\u73b0\uff0c\u96f6\u5916\u90e8\u4f9d\u8d56\r\n- **\ud83d\udee1\ufe0f \u5b89\u5168\u65e0\u5fe7**: \u672c\u5730\u5b58\u50a8\uff0c\u81ea\u52a8\u5ffd\u7565git\uff0c\u4e0d\u4f1a\u6cc4\u9732\u4ee3\u7801\r\n\r\n## \ud83d\udce6 \u5b89\u88c5\r\n\r\n```bash\r\npip install fastbackup\r\n```\r\n\r\n## \ud83c\udfaf \u4f7f\u7528\u65b9\u6cd5\r\n\r\n### \u6700\u7b80\u5355\u7684\u4f7f\u7528 - \u4e00\u884c\u5bfc\u5165\r\n\r\n\u5728\u4f60\u7684Python\u811a\u672c\u5f00\u5934\u6dfb\u52a0\u8fd9\u4e00\u884c\uff1a\r\n\r\n```python\r\nimport fastbackup  # \ud83c\udf89 \u5c31\u8fd9\u4e48\u7b80\u5355\uff01\r\n\r\n# \u4f60\u7684\u5b9e\u9a8c\u4ee3\u7801\r\ndef train_model():\r\n    learning_rate = 0.001  # \u8fd9\u6b21\u75280.001\r\n    batch_size = 32        # \u6279\u6b21\u5927\u5c0f32\r\n    epochs = 100           # \u8bad\u7ec3100\u8f6e\r\n    \r\n    # \u6a21\u578b\u8bad\u7ec3\u4ee3\u7801...\r\n    model = create_model()\r\n    optimizer = Adam(lr=learning_rate)\r\n    \r\n    for epoch in range(epochs):\r\n        # \u8bad\u7ec3\u903b\u8f91...\r\n        pass\r\n\r\nif __name__ == \"__main__\":\r\n    train_model()\r\n```\r\n\r\n**\u5c31\u662f\u8fd9\u6837\uff01** \u6bcf\u6b21\u8fd0\u884c\u811a\u672c\u65f6\uff0cFastBackup\u4f1a\uff1a\r\n- \u2705 \u81ea\u52a8\u68c0\u6d4b\u4f60\u7684\u9879\u76ee\u76ee\u5f55\r\n- \u2705 \u667a\u80fd\u5224\u65ad\u662f\u5426\u6709\u6587\u4ef6\u53d8\u5316\r\n- \u2705 \u53ea\u5728\u9700\u8981\u65f6\u521b\u5efa\u5907\u4efd\r\n- \u2705 \u5728\u9879\u76ee\u6839\u76ee\u5f55\u521b\u5efa `.fastbackup` \u6587\u4ef6\u5939\u5b58\u50a8\u5907\u4efd\r\n\r\n## \ud83d\udcc1 \u5907\u4efd\u4f4d\u7f6e\u793a\u4f8b\r\n\r\n\u5047\u8bbe\u4f60\u7684\u9879\u76ee\u7ed3\u6784\uff1a\r\n```\r\nmy_experiment/\r\n\u251c\u2500\u2500 train.py          # \u4f60\u5728\u8fd9\u91cc import fastbackup\r\n\u251c\u2500\u2500 model.py\r\n\u251c\u2500\u2500 config.py\r\n\u2514\u2500\u2500 utils.py\r\n```\r\n\r\n\u8fd0\u884c\u540e\u81ea\u52a8\u521b\u5efa\uff1a\r\n```\r\nmy_experiment/\r\n\u251c\u2500\u2500 train.py\r\n\u251c\u2500\u2500 model.py\r\n\u251c\u2500\u2500 config.py\r\n\u251c\u2500\u2500 utils.py\r\n\u251c\u2500\u2500 .fastbackup/                    # \ud83c\udd95 \u5907\u4efd\u76ee\u5f55\r\n\u2502   \u251c\u2500\u2500 backup_20240310_143022/     # \u7b2c\u4e00\u4e2a\u7248\u672c\r\n\u2502   \u2502   \u251c\u2500\u2500 train.py\r\n\u2502   \u2502   \u251c\u2500\u2500 model.py\r\n\u2502   \u2502   \u251c\u2500\u2500 config.py\r\n\u2502   \u2502   \u251c\u2500\u2500 utils.py\r\n\u2502   \u2502   \u2514\u2500\u2500 backup_info.json\r\n\u2502   \u251c\u2500\u2500 backup_20240310_150134/     # \u4fee\u6539\u53c2\u6570\u540e\u7684\u7248\u672c\r\n\u2502   \u2502   \u2514\u2500\u2500 ...\r\n\u2502   \u2514\u2500\u2500 backup_20240311_091245/     # \u4eca\u5929\u7684\u7248\u672c\r\n\u2502       \u2514\u2500\u2500 ...\r\n\u2514\u2500\u2500 .gitignore                      # \ud83c\udd95 \u81ea\u52a8\u66f4\u65b0\r\n```\r\n\r\n## \ud83d\udd0d \u67e5\u770b\u5907\u4efd\u5386\u53f2\r\n\r\n### \u547d\u4ee4\u884c\u65b9\u5f0f\r\n```bash\r\n$ fastbackup --list\r\n\r\n\ud83d\udccb FastBackup \u5386\u53f2\u8bb0\u5f55 (5 \u4e2a\u5907\u4efd):\r\n------------------------------------------------------------\r\n 1. 2024-03-11 09:12:45 | 4 \u6587\u4ef6 | backup_20240311_091245\r\n 2. 2024-03-10 16:30:22 | 4 \u6587\u4ef6 | backup_20240310_163022  \r\n 3. 2024-03-10 15:01:34 | 4 \u6587\u4ef6 | backup_20240310_150134\r\n 4. 2024-03-10 14:30:22 | 4 \u6587\u4ef6 | backup_20240310_143022\r\n 5. 2024-03-09 18:45:11 | 4 \u6587\u4ef6 | backup_20240309_184511\r\n```\r\n\r\n### Python\u4ee3\u7801\u65b9\u5f0f\r\n```python\r\nimport fastbackup\r\nfastbackup.list_backups()\r\n```\r\n\r\n## \ud83c\udfae \u6062\u590d\u5907\u4efd\r\n\r\n\u5f53\u4f60\u53d1\u73b0\u65b0\u7248\u672c\u6548\u679c\u4e0d\u597d\uff0c\u60f3\u56de\u5230\u4e4b\u524d\u7684\u7248\u672c\uff1a\r\n\r\n### \u547d\u4ee4\u884c\u6062\u590d\r\n```bash\r\n$ fastbackup --restore backup_20240310_143022\r\n\r\n\ud83d\udd04 \u6062\u590d\u5907\u4efd: backup_20240310_143022\r\n  \u2705 train.py\r\n  \u2705 model.py  \r\n  \u2705 config.py\r\n  \u2705 utils.py\r\n\u2728 \u6062\u590d\u5b8c\u6210! \u5171\u6062\u590d 4 \u4e2a\u6587\u4ef6\r\n```\r\n\r\n### Python\u4ee3\u7801\u6062\u590d\r\n```python\r\nimport fastbackup\r\nfastbackup.restore(\"backup_20240310_143022\")\r\n```\r\n\r\n## \ud83c\udfaf \u5b9e\u9645\u4f7f\u7528\u573a\u666f\r\n\r\n### \u573a\u666f1\uff1a\u6df1\u5ea6\u5b66\u4e60\u8c03\u53c2\r\n```python\r\nimport fastbackup\r\n\r\n# Week 1: Baseline\r\nlearning_rate = 0.001\r\nbatch_size = 32\r\n# Result: 85% accuracy\r\n\r\n# Week 2: \u5c1d\u8bd5\u66f4\u5927\u7684\u5b66\u4e60\u7387\r\nlearning_rate = 0.01   # \u4fee\u6539\u8fd9\u91cc\r\nbatch_size = 32\r\n# Result: 82% accuracy (\u66f4\u5dee\u4e86)\r\n\r\n# Week 3: \u56de\u5230baseline\uff0c\u5c1d\u8bd5\u66f4\u5927\u7684batch size\r\nlearning_rate = 0.001  # \u6062\u590dbaseline\r\nbatch_size = 64        # \u53ea\u6539\u8fd9\u4e2a\r\n# Result: 87% accuracy (\u66f4\u597d\u4e86!)\r\n```\r\n\r\n\u6bcf\u6b21\u4fee\u6539\u90fd\u4f1a\u81ea\u52a8\u5907\u4efd\uff0c\u4f60\u53ef\u4ee5\u968f\u65f6\u5bf9\u6bd4\u548c\u6062\u590d\u4efb\u4f55\u7248\u672c\uff01\r\n\r\n### \u573a\u666f2\uff1a\u673a\u5668\u5b66\u4e60\u7279\u5f81\u5de5\u7a0b\r\n```python\r\nimport fastbackup\r\n\r\ndef preprocess_data():\r\n    # V1: \u57fa\u7840\u9884\u5904\u7406\r\n    normalize = True\r\n    remove_outliers = False\r\n    feature_scaling = \"standard\"\r\n    \r\n    # V2: \u52a0\u4e0a\u5f02\u5e38\u503c\u5904\u7406\r\n    # remove_outliers = True  # \u6548\u679c\u63d0\u53472%\r\n    \r\n    # V3: \u5c1d\u8bd5\u4e0d\u540c\u7684\u7f29\u653e\u65b9\u6cd5\r\n    # feature_scaling = \"minmax\"  # \u6548\u679c\u4e0b\u964d\u4e86\r\n```\r\n\r\n### \u573a\u666f3\uff1aWeb\u5f00\u53d1\u914d\u7f6e\u8c03\u8bd5\r\n```python\r\nimport fastbackup\r\n\r\n# \u6570\u636e\u5e93\u914d\u7f6e\u5b9e\u9a8c\r\nDATABASE_CONFIG = {\r\n    \"pool_size\": 10,      # \u8fde\u63a5\u6c60\u5927\u5c0f\r\n    \"timeout\": 30,        # \u8d85\u65f6\u65f6\u95f4\r\n    \"retry_times\": 3,     # \u91cd\u8bd5\u6b21\u6570\r\n}\r\n\r\n# API\u9650\u6d41\u914d\u7f6e\r\nRATE_LIMIT = {\r\n    \"requests_per_minute\": 100,\r\n    \"burst_size\": 20,\r\n}\r\n```\r\n\r\n## \ud83d\udcca \u8fd0\u884c\u65f6\u8f93\u51fa\u793a\u4f8b\r\n\r\n```bash\r\n$ python train.py\r\n\ud83d\udcbe FastBackup: \u521b\u5efa\u5907\u4efd backup_20240311_091245 (4 \u4e2a\u6587\u4ef6)\r\nStarting training...\r\nEpoch 1/100: loss=0.45, accuracy=0.82\r\n...\r\n\r\n$ python train.py  # \u6ca1\u6709\u4fee\u6539\u6587\u4ef6\r\n\ud83d\udd04 FastBackup: \u4f7f\u7528\u73b0\u6709\u5907\u4efd backup_20240311_091245\r\nStarting training...\r\n...\r\n```\r\n\r\n## \ud83d\udee0\ufe0f \u9ad8\u7ea7\u529f\u80fd\r\n\r\n### \u624b\u52a8\u89e6\u53d1\u5907\u4efd\r\n```python\r\nimport fastbackup\r\n\r\n# \u5728\u5173\u952e\u8282\u70b9\u624b\u52a8\u5907\u4efd\r\nfastbackup.backup()\r\nprint(\"\u91cd\u8981\u7248\u672c\u5df2\u5907\u4efd\uff01\")\r\n```\r\n\r\n### \u8de8\u9879\u76ee\u67e5\u770b\u5907\u4efd\r\n```python\r\nimport fastbackup\r\n\r\n# \u67e5\u770b\u5176\u4ed6\u9879\u76ee\u7684\u5907\u4efd\r\nfastbackup.list_backups(\"/path/to/another/project\")\r\n\r\n# \u6062\u590d\u5176\u4ed6\u9879\u76ee\u7684\u5907\u4efd\r\nfastbackup.restore(\"backup_name\", \"/path/to/another/project\")\r\n```\r\n\r\n### \u547d\u4ee4\u884c\u5de5\u5177\r\n```bash\r\n# \u67e5\u770b\u7248\u672c\r\nfastbackup --version\r\n\r\n# \u67e5\u770b\u5e2e\u52a9\r\nfastbackup --help\r\n\r\n# \u6307\u5b9a\u9879\u76ee\u8def\u5f84\r\nfastbackup --list --project /path/to/project\r\n```\r\n\r\n## \ud83d\udd27 \u914d\u7f6e\u8bf4\u660e\r\n\r\nFastBackup \u91c7\u7528\u96f6\u914d\u7f6e\u8bbe\u8ba1\uff0c\u4f46\u4f60\u53ef\u4ee5\u4e86\u89e3\u5b83\u7684\u884c\u4e3a\uff1a\r\n\r\n- **\u5907\u4efd\u4f4d\u7f6e**: \u9879\u76ee\u6839\u76ee\u5f55\u7684 `.fastbackup/` \u6587\u4ef6\u5939\r\n- **\u5907\u4efd\u5185\u5bb9**: \u53ea\u5907\u4efd `.py` \u6587\u4ef6\r\n- **\u5ffd\u7565\u76ee\u5f55**: \u81ea\u52a8\u8df3\u8fc7 `.git`\u3001`__pycache__`\u3001`venv`\u3001`node_modules` \u7b49\r\n- **\u53d8\u5316\u68c0\u6d4b**: \u57fa\u4e8e\u6587\u4ef6MD5\u54c8\u5e0c\uff0c\u786e\u4fdd\u51c6\u786e\u68c0\u6d4b\u53d8\u5316\r\n- **Git\u96c6\u6210**: \u81ea\u52a8\u5c06 `.fastbackup/` \u6dfb\u52a0\u5230 `.gitignore`\r\n\r\n## \ud83d\udeab \u4e0d\u4f1a\u5907\u4efd\u7684\u5185\u5bb9\r\n\r\n- \u6570\u636e\u6587\u4ef6 (`.csv`, `.json`, `.txt` \u7b49)\r\n- \u6a21\u578b\u6743\u91cd (`.pth`, `.h5`, `.ckpt` \u7b49)  \r\n- \u865a\u62df\u73af\u5883 (`venv/`, `env/`, `.venv/`)\r\n- Git\u76ee\u5f55 (`.git/`)\r\n- \u7f13\u5b58\u6587\u4ef6 (`__pycache__/`, `.pytest_cache/`)\r\n- \u4f9d\u8d56\u76ee\u5f55 (`node_modules/`)\r\n\r\n## \ud83e\udd1d \u8d21\u732e\u6307\u5357\r\n\r\n\u6211\u4eec\u6b22\u8fce\u6240\u6709\u5f62\u5f0f\u7684\u8d21\u732e\uff01\r\n\r\n### \u62a5\u544a\u95ee\u9898\r\n\u5982\u679c\u4f60\u9047\u5230bug\u6216\u6709\u529f\u80fd\u5efa\u8bae\uff0c\u8bf7[\u521b\u5efa\u4e00\u4e2aIssue](https://github.com/chenziwenhaoshuai/fastbackup/issues)\u3002\r\n\r\n\r\n## \u2753 \u5e38\u89c1\u95ee\u9898\r\n\r\n### Q: \u4f1a\u5f71\u54cd\u7a0b\u5e8f\u8fd0\u884c\u901f\u5ea6\u5417\uff1f\r\nA: \u51e0\u4e4e\u4e0d\u4f1a\u3002FastBackup\u91c7\u7528\u667a\u80fd\u68c0\u6d4b\uff0c\u53ea\u5728\u6587\u4ef6\u771f\u6b63\u53d8\u5316\u65f6\u624d\u6267\u884c\u5907\u4efd\u64cd\u4f5c\uff0c\u901a\u5e38\u8017\u65f6\u4e0d\u8d85\u8fc7\u51e0\u6beb\u79d2\u3002\r\n\r\n### Q: \u5907\u4efd\u4f1a\u5360\u7528\u5f88\u591a\u7a7a\u95f4\u5417\uff1f\r\nA: \u901a\u5e38\u4e0d\u4f1a\u3002\u53ea\u5907\u4efd`.py`\u6587\u4ef6\uff0c\u800c\u4e14\u53ef\u4ee5\u5b9a\u671f\u6e05\u7406\u65e7\u5907\u4efd\u3002\u4e00\u4e2a\u4e2d\u578b\u9879\u76ee\u7684\u5907\u4efd\u901a\u5e38\u53ea\u6709\u51e0MB\u3002\r\n\r\n### Q: \u652f\u6301\u54ea\u4e9bPython\u7248\u672c\uff1f\r\nA: Python 3.6+ \u90fd\u652f\u6301\uff0c\u65e0\u5916\u90e8\u4f9d\u8d56\u3002\r\n\r\n### Q: \u53ef\u4ee5\u5728\u751f\u4ea7\u73af\u5883\u4f7f\u7528\u5417\uff1f\r\nA: FastBackup\u4e3b\u8981\u4e3a\u5f00\u53d1\u548c\u5b9e\u9a8c\u8bbe\u8ba1\u3002\u5728\u751f\u4ea7\u73af\u5883\u5efa\u8bae\u4f7f\u7528\u4e13\u4e1a\u7684\u7248\u672c\u63a7\u5236\u548c\u90e8\u7f72\u5de5\u5177\u3002\r\n\r\n### Q: \u5982\u4f55\u5220\u9664\u65e7\u5907\u4efd\uff1f\r\nA: \u76f4\u63a5\u5220\u9664 `.fastbackup/` \u76ee\u5f55\u4e0b\u7684\u5bf9\u5e94\u6587\u4ef6\u5939\u5373\u53ef\uff0c\u6216\u8005\u6211\u4eec\u8ba1\u5212\u5728\u672a\u6765\u7248\u672c\u4e2d\u6dfb\u52a0\u81ea\u52a8\u6e05\u7406\u529f\u80fd\u3002\r\n\r\n## \ud83d\udcdc \u8bb8\u53ef\u8bc1\r\n\r\n\u672c\u9879\u76ee\u91c7\u7528 MIT \u8bb8\u53ef\u8bc1\u3002\u8be6\u89c1 [LICENSE](LICENSE) \u6587\u4ef6\u3002\r\n\r\n## \ud83c\udf89 \u81f4\u8c22\r\n\r\n\u611f\u8c22\u6240\u6709\u4e3a\u8fd9\u4e2a\u9879\u76ee\u505a\u51fa\u8d21\u732e\u7684\u5f00\u53d1\u8005\uff01\r\n\r\n---\r\n\r\n<div align=\"center\">\r\n\r\n**\u5982\u679c FastBackup \u5e2e\u5230\u4e86\u4f60\uff0c\u8bf7\u7ed9\u6211\u4eec\u4e00\u4e2a \u2b50 \u661f\u6807\uff01**\r\n\r\nMade with \u2764\ufe0f by developers, for developers.\r\n\r\n</div>\r\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "\u4e00\u884c\u5bfc\u5165\u5f0fPython\u9879\u76ee\u5b9e\u9a8c\u5907\u4efd\u5de5\u5177",
    "version": "1.0.2",
    "project_urls": {
        "Homepage": "https://github.com/chenziwenhaoshuai/fastbackup",
        "Issues": "https://github.com/chenziwenhaoshuai/fastbackup/issues",
        "Repository": "https://github.com/chenziwenhaoshuai/fastbackup.git"
    },
    "split_keywords": [
        "backup",
        " experiment",
        " version-control",
        " development"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "9907ce571e55a70944e58a4df4fbd088c1f15c17af2e8153c3f04f87820bd8c3",
                "md5": "fc82bee1057f78ef34c9bbc509b17c08",
                "sha256": "ab35bc4edf4ee0ac1dbc9bb15c9952d3cda929a245cf3f82a01798c360655466"
            },
            "downloads": -1,
            "filename": "fastbackup-1.0.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "fc82bee1057f78ef34c9bbc509b17c08",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.6",
            "size": 10469,
            "upload_time": "2025-09-10T03:17:33",
            "upload_time_iso_8601": "2025-09-10T03:17:33.080365Z",
            "url": "https://files.pythonhosted.org/packages/99/07/ce571e55a70944e58a4df4fbd088c1f15c17af2e8153c3f04f87820bd8c3/fastbackup-1.0.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "93ad4df98a581331d021d171a6d26f0fc2bc58fae1777821299f8193738636ed",
                "md5": "51f370624617090af547c1834956af55",
                "sha256": "a15b342605e0ebf20b036f23141ad6f0377eae44fe79e5766e57eb7b72237da8"
            },
            "downloads": -1,
            "filename": "fastbackup-1.0.2.tar.gz",
            "has_sig": false,
            "md5_digest": "51f370624617090af547c1834956af55",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.6",
            "size": 12856,
            "upload_time": "2025-09-10T03:17:34",
            "upload_time_iso_8601": "2025-09-10T03:17:34.608602Z",
            "url": "https://files.pythonhosted.org/packages/93/ad/4df98a581331d021d171a6d26f0fc2bc58fae1777821299f8193738636ed/fastbackup-1.0.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-09-10 03:17:34",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "chenziwenhaoshuai",
    "github_project": "fastbackup",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "fastbackup"
}
        
Elapsed time: 3.56286s