funbuild


Namefunbuild JSON
Version 1.6.7 PyPI version JSON
download
home_pageNone
Summaryfunbuild
upload_time2025-09-11 07:52:53
maintainerNone
docs_urlNone
authorNone
requires_python>=3.9
licenseMIT
keywords build requirements packaging uv
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # funbuild

[![PyPI version](https://badge.fury.io/py/funbuild.svg)](https://badge.fury.io/py/funbuild)
[![Python](https://img.shields.io/badge/python-3.9+-blue.svg)](https://www.python.org/downloads/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

funbuild 是一个现代化的 Python 项目构建和管理工具,旨在简化 Python 项目的开发、构建、发布和维护流程。它集成了多种构建工具和最佳实践,为开发者提供一站式的项目管理解决方案。

## ✨ 特性

- 🚀 **多构建工具支持**: 支持 PyPI、Poetry 和 UV 等多种构建方式
- 🔄 **自动化版本管理**: 智能版本升级和发布流程
- 📦 **依赖管理**: 自动处理项目依赖和环境配置
- 🔧 **Git 集成**: 内置 Git 操作,包括拉取、推送和历史清理
- 🤖 **AI 提交信息**: 集成 gcop 自动生成智能提交信息
- 🧹 **项目清理**: 自动清理缓存、构建文件和历史记录
- 📋 **标签管理**: 自动创建和管理 Git 标签
- 🎯 **命令行界面**: 简洁易用的 CLI 工具

## 📋 系统要求

- Python 3.9 或更高版本
- Git(用于版本控制功能)

## 🚀 安装

### 从 PyPI 安装(推荐)

```bash
pip install funbuild
```

### 从源码安装

```bash
git clone https://github.com/farfarfun/funbuild.git
cd funbuild
pip install .
```

## 📖 使用指南

### 基本命令

在项目根目录下,您可以使用以下命令来管理您的构建流程:

#### 版本管理

```bash
# 升级项目版本
funbuild upgrade

# 升级到指定版本
funbuild upgrade --version 1.2.3
```

#### Git 操作

```bash
# 拉取最新代码
funbuild pull

# 推送代码(支持自动生成提交信息)
funbuild push --message "您的提交信息"

# 使用 AI 自动生成提交信息
funbuild push
```

#### 项目构建

```bash
# 安装项目依赖
funbuild install

# 构建并发布项目
funbuild build --message "发布信息"

# 仅构建不发布
funbuild build --no-publish
```

#### 项目维护

```bash
# 清理 Git 历史记录
funbuild clean_history

# 清理构建缓存和临时文件
funbuild clean

# 创建 Git 标签
funbuild tags
```

### 高级用法

#### 配置文件

funbuild 使用 `pyproject.toml` 文件进行配置。您可以在该文件中自定义构建行为:

```toml
[tool.funbuild]
# 构建类型:pypi, poetry, uv
build_type = "uv"

# 自动版本升级策略
version_strategy = "patch"  # major, minor, patch

# 发布前是否运行测试
run_tests = true

# 自定义构建命令
build_commands = [
    "ruff check .",
    "pytest tests/",
]
```

#### 环境变量

```bash
# 设置构建类型
export FUNBUILD_TYPE=uv

# 设置发布仓库
export FUNBUILD_REPOSITORY=https://upload.pypi.org/legacy/

# 启用详细日志
export FUNBUILD_VERBOSE=1
```

## 🔧 集成工具

funbuild 集成了以下优秀的工具:

- **[uv](https://github.com/astral-sh/uv)**: 现代 Python 包管理器
- **[ruff](https://github.com/astral-sh/ruff)**: 快速 Python 代码检查和格式化工具
- **[gcop](https://github.com/farfarfun/gcop)**: AI 驱动的 Git 提交信息生成器
- **[typer](https://typer.tiangolo.com/)**: 现代 CLI 应用框架

## 📁 项目结构

```
funbuild/
├── src/
│   └── funbuild/
│       ├── core/          # 核心构建逻辑
│       ├── shell/         # Shell 命令执行
│       └── tool/          # 工具集成
├── examples/              # 使用示例
├── tests/                 # 测试文件
├── pyproject.toml         # 项目配置
└── README.md             # 项目文档
```

## 🤝 贡献指南

我们欢迎任何形式的贡献!请遵循以下步骤:

1. Fork 本仓库
2. 创建您的特性分支 (`git checkout -b feature/AmazingFeature`)
3. 提交您的更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 打开一个 Pull Request

### 开发环境设置

```bash
# 克隆仓库
git clone https://github.com/farfarfun/funbuild.git
cd funbuild

# 安装开发依赖
pip install -e ".[dev]"

# 运行测试
pytest tests/

# 代码格式化
ruff format .
ruff check . --fix
```

## 📄 许可证

本项目采用 [MIT 许可证](LICENSE)。

## 🔗 相关链接

- [GitHub 仓库](https://github.com/farfarfun/funbuild)
- [PyPI 页面](https://pypi.org/project/funbuild/)
- [发布记录](https://github.com/farfarfun/funbuild/releases)
- [问题反馈](https://github.com/farfarfun/funbuild/issues)

## 👥 维护者

- **牛哥** - [niuliangtao@qq.com](mailto:niuliangtao@qq.com)
- **farfarfun** - [farfarfun@qq.com](mailto:farfarfun@qq.com)

## 🙏 致谢

感谢所有为 funbuild 项目做出贡献的开发者和用户!

---

如果您觉得 funbuild 对您有帮助,请给我们一个 ⭐️!


            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "funbuild",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": "\u725b\u54e5 <niuliangtao@qq.com>, farfarfun <farfarfun@qq.com>",
    "keywords": "build, requirements, packaging, uv",
    "author": null,
    "author_email": "\u725b\u54e5 <niuliangtao@qq.com>, farfarfun <farfarfun@qq.com>",
    "download_url": null,
    "platform": null,
    "description": "# funbuild\n\n[![PyPI version](https://badge.fury.io/py/funbuild.svg)](https://badge.fury.io/py/funbuild)\n[![Python](https://img.shields.io/badge/python-3.9+-blue.svg)](https://www.python.org/downloads/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nfunbuild \u662f\u4e00\u4e2a\u73b0\u4ee3\u5316\u7684 Python \u9879\u76ee\u6784\u5efa\u548c\u7ba1\u7406\u5de5\u5177\uff0c\u65e8\u5728\u7b80\u5316 Python \u9879\u76ee\u7684\u5f00\u53d1\u3001\u6784\u5efa\u3001\u53d1\u5e03\u548c\u7ef4\u62a4\u6d41\u7a0b\u3002\u5b83\u96c6\u6210\u4e86\u591a\u79cd\u6784\u5efa\u5de5\u5177\u548c\u6700\u4f73\u5b9e\u8df5\uff0c\u4e3a\u5f00\u53d1\u8005\u63d0\u4f9b\u4e00\u7ad9\u5f0f\u7684\u9879\u76ee\u7ba1\u7406\u89e3\u51b3\u65b9\u6848\u3002\n\n## \u2728 \u7279\u6027\n\n- \ud83d\ude80 **\u591a\u6784\u5efa\u5de5\u5177\u652f\u6301**: \u652f\u6301 PyPI\u3001Poetry \u548c UV \u7b49\u591a\u79cd\u6784\u5efa\u65b9\u5f0f\n- \ud83d\udd04 **\u81ea\u52a8\u5316\u7248\u672c\u7ba1\u7406**: \u667a\u80fd\u7248\u672c\u5347\u7ea7\u548c\u53d1\u5e03\u6d41\u7a0b\n- \ud83d\udce6 **\u4f9d\u8d56\u7ba1\u7406**: \u81ea\u52a8\u5904\u7406\u9879\u76ee\u4f9d\u8d56\u548c\u73af\u5883\u914d\u7f6e\n- \ud83d\udd27 **Git \u96c6\u6210**: \u5185\u7f6e Git \u64cd\u4f5c\uff0c\u5305\u62ec\u62c9\u53d6\u3001\u63a8\u9001\u548c\u5386\u53f2\u6e05\u7406\n- \ud83e\udd16 **AI \u63d0\u4ea4\u4fe1\u606f**: \u96c6\u6210 gcop \u81ea\u52a8\u751f\u6210\u667a\u80fd\u63d0\u4ea4\u4fe1\u606f\n- \ud83e\uddf9 **\u9879\u76ee\u6e05\u7406**: \u81ea\u52a8\u6e05\u7406\u7f13\u5b58\u3001\u6784\u5efa\u6587\u4ef6\u548c\u5386\u53f2\u8bb0\u5f55\n- \ud83d\udccb **\u6807\u7b7e\u7ba1\u7406**: \u81ea\u52a8\u521b\u5efa\u548c\u7ba1\u7406 Git \u6807\u7b7e\n- \ud83c\udfaf **\u547d\u4ee4\u884c\u754c\u9762**: \u7b80\u6d01\u6613\u7528\u7684 CLI \u5de5\u5177\n\n## \ud83d\udccb \u7cfb\u7edf\u8981\u6c42\n\n- Python 3.9 \u6216\u66f4\u9ad8\u7248\u672c\n- Git\uff08\u7528\u4e8e\u7248\u672c\u63a7\u5236\u529f\u80fd\uff09\n\n## \ud83d\ude80 \u5b89\u88c5\n\n### \u4ece PyPI \u5b89\u88c5\uff08\u63a8\u8350\uff09\n\n```bash\npip install funbuild\n```\n\n### \u4ece\u6e90\u7801\u5b89\u88c5\n\n```bash\ngit clone https://github.com/farfarfun/funbuild.git\ncd funbuild\npip install .\n```\n\n## \ud83d\udcd6 \u4f7f\u7528\u6307\u5357\n\n### \u57fa\u672c\u547d\u4ee4\n\n\u5728\u9879\u76ee\u6839\u76ee\u5f55\u4e0b\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u6765\u7ba1\u7406\u60a8\u7684\u6784\u5efa\u6d41\u7a0b\uff1a\n\n#### \u7248\u672c\u7ba1\u7406\n\n```bash\n# \u5347\u7ea7\u9879\u76ee\u7248\u672c\nfunbuild upgrade\n\n# \u5347\u7ea7\u5230\u6307\u5b9a\u7248\u672c\nfunbuild upgrade --version 1.2.3\n```\n\n#### Git \u64cd\u4f5c\n\n```bash\n# \u62c9\u53d6\u6700\u65b0\u4ee3\u7801\nfunbuild pull\n\n# \u63a8\u9001\u4ee3\u7801\uff08\u652f\u6301\u81ea\u52a8\u751f\u6210\u63d0\u4ea4\u4fe1\u606f\uff09\nfunbuild push --message \"\u60a8\u7684\u63d0\u4ea4\u4fe1\u606f\"\n\n# \u4f7f\u7528 AI \u81ea\u52a8\u751f\u6210\u63d0\u4ea4\u4fe1\u606f\nfunbuild push\n```\n\n#### \u9879\u76ee\u6784\u5efa\n\n```bash\n# \u5b89\u88c5\u9879\u76ee\u4f9d\u8d56\nfunbuild install\n\n# \u6784\u5efa\u5e76\u53d1\u5e03\u9879\u76ee\nfunbuild build --message \"\u53d1\u5e03\u4fe1\u606f\"\n\n# \u4ec5\u6784\u5efa\u4e0d\u53d1\u5e03\nfunbuild build --no-publish\n```\n\n#### \u9879\u76ee\u7ef4\u62a4\n\n```bash\n# \u6e05\u7406 Git \u5386\u53f2\u8bb0\u5f55\nfunbuild clean_history\n\n# \u6e05\u7406\u6784\u5efa\u7f13\u5b58\u548c\u4e34\u65f6\u6587\u4ef6\nfunbuild clean\n\n# \u521b\u5efa Git \u6807\u7b7e\nfunbuild tags\n```\n\n### \u9ad8\u7ea7\u7528\u6cd5\n\n#### \u914d\u7f6e\u6587\u4ef6\n\nfunbuild \u4f7f\u7528 `pyproject.toml` \u6587\u4ef6\u8fdb\u884c\u914d\u7f6e\u3002\u60a8\u53ef\u4ee5\u5728\u8be5\u6587\u4ef6\u4e2d\u81ea\u5b9a\u4e49\u6784\u5efa\u884c\u4e3a\uff1a\n\n```toml\n[tool.funbuild]\n# \u6784\u5efa\u7c7b\u578b\uff1apypi, poetry, uv\nbuild_type = \"uv\"\n\n# \u81ea\u52a8\u7248\u672c\u5347\u7ea7\u7b56\u7565\nversion_strategy = \"patch\"  # major, minor, patch\n\n# \u53d1\u5e03\u524d\u662f\u5426\u8fd0\u884c\u6d4b\u8bd5\nrun_tests = true\n\n# \u81ea\u5b9a\u4e49\u6784\u5efa\u547d\u4ee4\nbuild_commands = [\n    \"ruff check .\",\n    \"pytest tests/\",\n]\n```\n\n#### \u73af\u5883\u53d8\u91cf\n\n```bash\n# \u8bbe\u7f6e\u6784\u5efa\u7c7b\u578b\nexport FUNBUILD_TYPE=uv\n\n# \u8bbe\u7f6e\u53d1\u5e03\u4ed3\u5e93\nexport FUNBUILD_REPOSITORY=https://upload.pypi.org/legacy/\n\n# \u542f\u7528\u8be6\u7ec6\u65e5\u5fd7\nexport FUNBUILD_VERBOSE=1\n```\n\n## \ud83d\udd27 \u96c6\u6210\u5de5\u5177\n\nfunbuild \u96c6\u6210\u4e86\u4ee5\u4e0b\u4f18\u79c0\u7684\u5de5\u5177\uff1a\n\n- **[uv](https://github.com/astral-sh/uv)**: \u73b0\u4ee3 Python \u5305\u7ba1\u7406\u5668\n- **[ruff](https://github.com/astral-sh/ruff)**: \u5feb\u901f Python \u4ee3\u7801\u68c0\u67e5\u548c\u683c\u5f0f\u5316\u5de5\u5177\n- **[gcop](https://github.com/farfarfun/gcop)**: AI \u9a71\u52a8\u7684 Git \u63d0\u4ea4\u4fe1\u606f\u751f\u6210\u5668\n- **[typer](https://typer.tiangolo.com/)**: \u73b0\u4ee3 CLI \u5e94\u7528\u6846\u67b6\n\n## \ud83d\udcc1 \u9879\u76ee\u7ed3\u6784\n\n```\nfunbuild/\n\u251c\u2500\u2500 src/\n\u2502   \u2514\u2500\u2500 funbuild/\n\u2502       \u251c\u2500\u2500 core/          # \u6838\u5fc3\u6784\u5efa\u903b\u8f91\n\u2502       \u251c\u2500\u2500 shell/         # Shell \u547d\u4ee4\u6267\u884c\n\u2502       \u2514\u2500\u2500 tool/          # \u5de5\u5177\u96c6\u6210\n\u251c\u2500\u2500 examples/              # \u4f7f\u7528\u793a\u4f8b\n\u251c\u2500\u2500 tests/                 # \u6d4b\u8bd5\u6587\u4ef6\n\u251c\u2500\u2500 pyproject.toml         # \u9879\u76ee\u914d\u7f6e\n\u2514\u2500\u2500 README.md             # \u9879\u76ee\u6587\u6863\n```\n\n## \ud83e\udd1d \u8d21\u732e\u6307\u5357\n\n\u6211\u4eec\u6b22\u8fce\u4efb\u4f55\u5f62\u5f0f\u7684\u8d21\u732e\uff01\u8bf7\u9075\u5faa\u4ee5\u4e0b\u6b65\u9aa4\uff1a\n\n1. Fork \u672c\u4ed3\u5e93\n2. \u521b\u5efa\u60a8\u7684\u7279\u6027\u5206\u652f (`git checkout -b feature/AmazingFeature`)\n3. \u63d0\u4ea4\u60a8\u7684\u66f4\u6539 (`git commit -m 'Add some AmazingFeature'`)\n4. \u63a8\u9001\u5230\u5206\u652f (`git push origin feature/AmazingFeature`)\n5. \u6253\u5f00\u4e00\u4e2a Pull Request\n\n### \u5f00\u53d1\u73af\u5883\u8bbe\u7f6e\n\n```bash\n# \u514b\u9686\u4ed3\u5e93\ngit clone https://github.com/farfarfun/funbuild.git\ncd funbuild\n\n# \u5b89\u88c5\u5f00\u53d1\u4f9d\u8d56\npip install -e \".[dev]\"\n\n# \u8fd0\u884c\u6d4b\u8bd5\npytest tests/\n\n# \u4ee3\u7801\u683c\u5f0f\u5316\nruff format .\nruff check . --fix\n```\n\n## \ud83d\udcc4 \u8bb8\u53ef\u8bc1\n\n\u672c\u9879\u76ee\u91c7\u7528 [MIT \u8bb8\u53ef\u8bc1](LICENSE)\u3002\n\n## \ud83d\udd17 \u76f8\u5173\u94fe\u63a5\n\n- [GitHub \u4ed3\u5e93](https://github.com/farfarfun/funbuild)\n- [PyPI \u9875\u9762](https://pypi.org/project/funbuild/)\n- [\u53d1\u5e03\u8bb0\u5f55](https://github.com/farfarfun/funbuild/releases)\n- [\u95ee\u9898\u53cd\u9988](https://github.com/farfarfun/funbuild/issues)\n\n## \ud83d\udc65 \u7ef4\u62a4\u8005\n\n- **\u725b\u54e5** - [niuliangtao@qq.com](mailto:niuliangtao@qq.com)\n- **farfarfun** - [farfarfun@qq.com](mailto:farfarfun@qq.com)\n\n## \ud83d\ude4f \u81f4\u8c22\n\n\u611f\u8c22\u6240\u6709\u4e3a funbuild \u9879\u76ee\u505a\u51fa\u8d21\u732e\u7684\u5f00\u53d1\u8005\u548c\u7528\u6237\uff01\n\n---\n\n\u5982\u679c\u60a8\u89c9\u5f97 funbuild \u5bf9\u60a8\u6709\u5e2e\u52a9\uff0c\u8bf7\u7ed9\u6211\u4eec\u4e00\u4e2a \u2b50\ufe0f\uff01\n\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "funbuild",
    "version": "1.6.7",
    "project_urls": {
        "Organization": "https://github.com/farfarfun",
        "Releases": "https://github.com/farfarfun/funbuild/releases",
        "Repository": "https://github.com/farfarfun/funbuild"
    },
    "split_keywords": [
        "build",
        " requirements",
        " packaging",
        " uv"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "fc15d5adba18497aac8394621099557a045672371d6a36d2db46e83e9bf78450",
                "md5": "b6423fbded6a708bf54e37254092db92",
                "sha256": "d1ae71bfc24001900bdb9fc26e360382214b21effb251e072a1859d37df7b1e3"
            },
            "downloads": -1,
            "filename": "funbuild-1.6.7-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "b6423fbded6a708bf54e37254092db92",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 9492,
            "upload_time": "2025-09-11T07:52:53",
            "upload_time_iso_8601": "2025-09-11T07:52:53.224672Z",
            "url": "https://files.pythonhosted.org/packages/fc/15/d5adba18497aac8394621099557a045672371d6a36d2db46e83e9bf78450/funbuild-1.6.7-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-09-11 07:52:53",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "farfarfun",
    "github_project": "funbuild",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "funbuild"
}
        
Elapsed time: 3.08561s