项目结构基础或模板,命令行控制台脚本。
项目描述
此存储库提供了一个最小化且具有意见的基础,适用于Python [1] 软件项目。它包括
基本的 Python “发行”/项目 [2] 元数据
带有子命令模板的命令行控制台脚本
用于开发的Docker镜像,运行测试
Prospector 代码风格检查配置文件 [6],用于执行所有可用的Python代码检查,配置文件位于 Prospector [7]。
Tox 测试工具 [9] 的配置文件 tox.ini [8],它会在支持的Python版本上运行所有测试和代码风格检查,包括Prospector未提供的某些检查。
用于强制实施 常规提交规范 [11],在提交和推送时进行成功的构建和测试,以及在推送时生成面向最终用户的 Towncrier [12] 发布说明的版本控制系统(VCS)钩子,配置文件位于 .pre-commit-config.yaml [10]。
自动化发布的目标
自动化依赖项升级的目标
用于本地开发和CI/CD平台的目标
集成这些CI/CD配方和目标的 GitLab CI/CD [13] 管道
集成这些CI/CD配方和目标的 GitHub Actions [14] 工作流程
根据功能组织源代码,例如 \./src/foo/(template|view|model)\..*,而不是根据源类型,例如 \./src/(templates|views|models)/foo\..*,遵循 根据保持相关文件紧密组织组件 [15]。
将此存储库的VCS远程添加到实际项目。当模板添加针对特定类型项目(例如命令行工具、Web服务、UI应用程序)的特定结构时,它会为每个变体添加分支。当模板对不同变体通用的结构进行更改时,它可以合并这些更改到这些变体中。实际项目也可以合并这些更改。
模板使用方法
这是一个关于如何在项目中使用此模板的简要指南。它尚未得到广泛测试。这样的测试是元测试,创建和支持它是无益的。报告您遇到的问题,或者最好是提交带有修正的PR。
选择要使用的分支
选择适合您的项目类型的分支
py:
基本的Python发行版元数据和打包。
py-cli:
前面提到的命令行控制台脚本(带有子命令)的样板。
docker:
开发、最终用户或部署的Docker镜像。
py-docker:
前面提到的Docker镜像,安装了Python包。
ci:
前面提到的GitLab CI/CD管道,在CI中运行测试和代码风格检查,在CD中从 develop 和 main 发布。
py-ci:
将 py-docker 和 ci 分支合并在一起。
py-ci-cli:
前面所有内容的组合。
使用前面的分支之一合并到您的项目中非常重要,而不是模板中的 develop 或 main 分支。模板开发者使用这些分支来测试发布过程。它们包含增加的版本、发布说明和其他发布工件,真实项目不应该将其合并到其代码或历史中。
合并到您的项目
如果您要开始一个全新的项目
$ git clone --origin "template" --branch "${TEMPLATE_BRANCH:?}" \ "https://gitlab.com/rpatterson/project-structure.git" "./foo-project" $ cd "./foo-project" $ git config remote.template.tagOpt --no-tags $ git remote add "origin" "git@gitlab.com:foo-username/foo-project.git" $ git switch -C "main" --track "origin/main"
如果您要将合并到现有的项目中
$ git remote add "template" \ "https://gitlab.com/rpatterson/project-structure.git" $ git config remote.template.tagOpt --no-tags $ git merge --allow-unrelated-histories "template/${TEMPLATE_BRANCH:?}"
重命名由项目名称派生的文件和目录
$ git ls-files | grep -iE 'project.?structure'
重命名项目名称和模板创建者身份字符串
$ git grep -iE 'project.?structure|ross|Patterson'
根据 # TEMPLATE: 注释进行修改
这些部分需要开发者的注意和推理。请仔细阅读注释并遵循它们
$ git grep "TEMPLATE"
最后,移除这个 模板使用 部分,并更新 ./README.rst 的其余部分以适应您的项目。当模板添加修复和功能时,将它们合并到您的项目中,并重复步骤 3–5。
此模板在推送 develop 分支时发布预发布版本,在推送 main 分支时发布最终版本。项目所有者可以决定在最终发布之前需要预发布的更改类型,以及直接进入最终发布的更改类型。例如,他们可以决定
安装
本地安装或使用 Docker 容器镜像
本地安装
使用任何用于安装标准 Python 3 分发的工具进行安装,例如 pip [17]
$ pip3 install --user project-structure
可选的 shell 提示符选项卡完成可以通过使用 argcomplete [18] 实现。
Docker容器镜像
使用容器镜像的推荐方法是使用 Docker Compose [19]。请参阅 示例 ./docker-compose.yml 文件 [20]。编写您的配置并运行容器
$ docker compose up
您也可以直接使用该镜像。拉取 Docker 镜像 [21]。使用它创建和运行一个容器
$ docker pull "registry.gitlab.com/rpatterson/project-structure" $ docker run --rm -it "registry.gitlab.com/rpatterson/project-structure" ...
使用图像变体标签来控制图像何时更新。发布为分支以及主版本和次要版本发布标签。例如,要跟踪特定分支的最新版本,请使用类似 registry.gitlab.com/rpatterson/project-structure:main 的标签。从 develop 发布的版本是预发布版本。从 main 发布的是最终发布版本。从 main 发布的版本也会发布没有分支的标签,例如 registry.gitlab.com/rpatterson/project-structure。从 main 发布的版本还会发布主版本和次要版本的标签,例如 registry.gitlab.com/rpatterson/project-structure:v0.8。
发布为以下平台发布多平台镜像
linux/amd64
linux/arm64
linux/arm/v7
使用方法
有关选项和参数的详细信息,请参阅命令行帮助
$ project-structure --help usage: project-structure [-h] project structure foundation or template, top-level package. Pptional arguments: -h, --help show this help message and exit
Docker容器镜像可以运行命令行脚本
$ docker compose run "project-structure" project-structure --help usage: project-structure [-h] Project structure foundation or template, top-level package. optional arguments: -h, --help show this help message and exit
贡献
GitLab托管此项目 [22] 并 将其镜像到GitHub [23] 但请使用GitLab来报告问题、提交拉取或合并请求以及任何其他开发或维护活动。有关如何开始开发的更多详细信息,请参阅 贡献文档 [16]。
动机
存在许多其他项目模板。为什么还要创建一个新的?我从1998年开始成为一名全栈Web开发者。我有足够的时间形成自己的很多观点。从一个模板中,我想要一个完整的工具集(例如测试覆盖率、代码检查、格式化、持续集成)。相反,我想要最小化的依赖关系、结构和超出完整工具集之外的意见(例如一些构建或任务系统、未使用的框架或库的结构)。我没有找到这样一个平衡的模板,所以我创建了它。
我还发现很难从其他模板中分辨出它们为什么做出这样的选择。因此,我还使用这个模板来尝试不同的选项,并亲自学习。您可以在提交历史中了解我的发现以及我做出选择的原因。
最重要的是,我从未找到一种令人满意的方法来随着时间的推移保持项目结构的更新。因此,主要的动机是提供一个上游远程模板,将结构更新合并到实际项目中,在其整个生命周期中。
参考文献
project-structure-1.0.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 639c4a4ff5d4b6a2b2e086560af422848a9d5db946951d1d340ccf560e332b3c |
|
MD5 | 8074b0f2b42383de5460980ba17d1dfb |
|
BLAKE2b-256 | 01854d7db3e29b6edb9aeb9b7331e1d608b1f0e97958a3423c5e6093c15dc977 |
project_structure-1.0.1-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f7a2937d2e8f81f02ccb27c64f8cc4d105460ec034615c4c6d9691330cd66516 |
|
MD5 | 9a60772f228df904d5fe054712c882bd |
|
BLAKE2b-256 | 476ec1ff4b36f53c613c7d85306faf0c86c6bcde66a9c17289b4540be0b614f6 |