# cookiecutter **Repository Path**: x2587/cookiecutter ## Basic Information - **Project Name**: cookiecutter - **Description**: 优化一下cookiecutter模版 https://gitee.com/x2587/cookiecutter - **Primary Language**: Python - **License**: BSD-3-Clause - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-06-27 - **Last Updated**: 2025-06-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Python Boilerplate ## Python Boilerplate 是一个用于快速创建 Python 项目的模板,提供标准化的项目结构、开发工具配置和示例代码,帮助开发者节省初始化时间并遵循最佳实践。 ### 特性 * 标准化项目结构:符合 Python 社区推荐的包布局 * 虚拟环境管理:自动创建和激活虚拟环境 * 依赖管理:清晰分离开发和生产依赖 * 命令行界面:集成 Typer/Argparse,快速构建 CLI 工具 * 测试框架:预配置 pytest 测试环境 * 持续集成:支持 Travis CI 自动化测试和部署 * 交互式启动:友好的初始化引导和环境检查。 ### 快速开始 #### 1. 安装 Cookiecutter 工具 确保已安装 Python 3.7+,然后使用 pip 安装: ~~~bash # 使用pip安装(确保已安装Python 3.7+) pip install cookiecutter ~~~ #### 2. 创建项目 #### 方法一:直接安装(推荐) ~~~bash # 创建 cookiecutter https://gitee.com/x2587/cookiecutter ~~~ #### 方法二:使用本地模板 1. 打开模板页面:https://gitee.com/x2587/cookiecutter/tree/main/ 2. 点击 Code → Download ZIP 下载并解压。 3. 使用本地模板创建项目: ~~~bash # 替换为模板的本地路径 cookiecutter /path/to/cookiecutter-python-boilerplate # 示例:当前目录下模板 cookiecutter ./cookiecutter-python-boilerplate ~~~ #### 3. 按照提示输入项目信息 按照提示输入相关信息,例如: ~~~plaintext [1/14] full_name (Audrey Roy Greenfeld): 项目作者的全名。建议填写真实姓名或开发团队名称,通常会显示在版权声明中。 [2/14] email (audreyr@example.com): 作者或维护者的电子邮箱。用于文档、开源许可证或 PyPI 页面中的联系方式。 [3/14] github_username (audreyr): 你的 GitHub 用户名。主要用于自动生成项目仓库链接、贡献者信息等。 [4/14] project_name (Python Boilerplate): 项目的正式名称。建议简洁明了、具备描述性,例如:`DataAnalysisTool`、`mycliapp` 等。 [5/14] project_slug (python_boilerplate): 项目的简称或路径名,通常用于项目目录、包名等,格式应为小写字母+下划线(_)。 默认会基于 `project_name` 自动生成,你也可以自定义。 [6/14] project_short_description (Python Boilerplate contains...): 项目的简要描述(1~2句话),用于生成 `README.md` 和 PyPI 页面简介。 建议简明扼要地说明项目的用途或核心功能。 [7/14] pypi_username (audreyr): 你的 PyPI 用户名。用于未来将项目发布到 [pypi.org](https://pypi.org/) 时的认证。 [8/14] version (0.1.0): 项目的初始版本号。推荐使用语义化版本规范(semver)格式,如:`主版本.次版本.修订号`,例如 `0.1.0`。 [9/14] use_pytest (n): 是否使用 [`pytest`](https://docs.pytest.org/) 作为测试框架? - `y`:使用 pytest(推荐,语法简洁、功能强大) - `n`:不使用(可能采用 unittest 或无测试框架) [10/14] use_pypi_deployment_with_travis (y): 是否启用 [Travis CI](https://travis-ci.com/) 来自动将项目部署到 PyPI? - `y`:启用自动化部署(适用于持续集成流程) - `n`:不启用,需手动发布 [11/14] add_pyup_badge (n): 是否在 `README.md` 中添加 [PyUp](https://pyup.io/) 徽章? - `y`:显示依赖更新状态(可提升可信度) - `n`:不添加(默认) [12/14] Select command_line_interface: 选择是否为项目生成命令行接口(CLI)模块: 1. **Typer**:现代 CLI 框架,基于 Click,支持类型提示(推荐)。 2. **Argparse**:Python 标准库自带的命令行解析工具。 3. **No command-line interface**:不生成 CLI(适用于库类项目)。 默认选择 1(Typer),适合快速构建 CLI 应用。 [13/14] create_author_file (y): 是否生成 `AUTHORS.md` 文件,记录项目贡献者? - `y`:生成,适合团队开发或开源项目。 - `n`:不生成。 [14/14] Select open_source_license: 选择开源许可证类型(将添加到 `LICENSE` 文件): 1. **MIT License**(推荐):最宽松的许可证,允许修改、商业使用,只需保留版权信息。 2. **BSD License**:与 MIT 类似,法律条款稍有不同。 3. **ISC License**:MIT 的极简版本。 4. **Apache 2.0**:适合商业项目,要求说明修改。 5. **GPL v3**:强制开源(copyleft),适用于自由软件项目。 6. **Not open source**:不开源项目,不生成许可证。 默认选择 1(MIT License),适用于大多数开源项目。 ~~~ 小贴士 所有输入项均可使用默认值快速回车跳过,也可以根据项目实际需要进行修改。 配置完成后,项目结构会根据你提供的信息自动生成,包括目录名、包结构、README、许可证等内容。 #### 4. 进入项目目录并启动 ~~~bash cd 你的项目名称 bash run.sh ~~~ ### 使用指南 #### 基本命令 ~~~bash # 安装依赖(开发环境) bash run_install.sh # 运行项目 bash run.sh # 运行测试 pytest # 查看帮助 python src/你的项目名称/你的项目名称.py --help ~~~ ### 项目结构 ~~~plaintext your_project/ ├── src/ # 源代码目录 │ └── your_project/ # 项目包 │ ├── __init__.py # 包初始化 │ ├── main.py # 主程序入口 │ └── cli.py # 命令行接口(如果有) ├── tests/ # 测试代码 ├── docs/ # 文档 ├── venv/ # 虚拟环境(自动创建) ├── .gitignore # Git忽略配置 ├── pyproject.toml # 项目配置 ├── requirements.txt # 生产依赖 ├── requirements_dev.txt # 开发依赖 ├── run.sh # 项目启动脚本 ├── README.md # 项目说明 └── LICENSE # 许可证文件 ~~~ ### 自定义配置 #### 命令行界面 默认使用 Typer 框架,可在cli.py中扩展命令: ~~~python # src/your_project/cli.py import typer app = typer.Typer() @app.command() def hello(name: str = "World"): """向指定用户打招呼""" print(f"Hello, {name}!") if __name__ == "__main__": app() ~~~ #### 测试 使用 pytest 编写测试,放在tests/目录下: ~~~python # tests/test_main.py def test_add_numbers(): from your_project.main import add_numbers assert add_numbers(1, 2) == 3 ~~~ ### 依赖管理 * 生产依赖:编辑requirements.txt * 开发依赖:编辑requirements_dev.txt * 使用pip freeze > requirements.txt更新依赖列表 ### 贡献 欢迎贡献代码!请遵循以下步骤: ### Fork 本仓库 创建您的特性分支 (git checkout -b feature/fooBar) 提交您的更改 (git commit -am 'Add some fooBar') 将分支推送到远程 (git push origin feature/fooBar) 创建新的 Pull Request ### 许可证 本项目采用 MIT License 许可。 ### 致谢 感谢 Cookiecutter 团队提供的强大模板工具 参考了 Audrey Roy Greenfeld 的 Python 包模板最佳实践 所有为本项目做出贡献的开发者