跳转到主要内容

简化您的setup.py

项目描述

简化您的setup.py

Version on pypi Tested with Github Actions Test code codecov Python versions tested (link to github project) Version on conda-forge

编写setup.py通常涉及大量的模板代码,以及在不同项目之间的复制粘贴。

这个包旨在简化这个过程,并将一些DRY原则引入Python的打包中。以下是使用setupmeta的(完整且准备上传到PyPI的)setup.py可能的样子:

from setuptools import setup

setup(
    name="myproject",
    versioning="distance",          # Optional, would activate tag-based versioning
    setup_requires="setupmeta"      # This is where setupmeta comes in
)

这就够了 - setupmeta会从这里开始,从你的项目其余部分提取所有其他内容(遵循常见的惯例)。

你可以使用explain命令(见命令)来查看setupmeta从你的项目中推断出的内容,对于上述内容,它看起来可能如下所示(你可以看到每个设置来自哪个文件和哪一行,请注意,通常可以从你的项目中提取大量信息,如果你遵循通常的惯例)

~/myproject: python setup.py explain

          author: (auto-adjust     ) Your Name
              \_: (myproject.py:7  ) Your Name<your@email.com>
    author_email: (auto-adjust     ) your@email.com
     description: (README.rst:1    ) First line of your README
    entry_points: (entry_points.ini) [console_scripts] ...
install_requires: (requirements.txt) ["click", ...
         license: (auto-fill       ) MIT
long_description: (README.rst      ) Long description would be your inlined README
            name: (explicit        ) myproject
      py_modules: (auto-fill       ) ["myproject"]
  setup_requires: (explicit        ) ["setupmeta"]
         version: (git             ) 1.2.3.post2
      versioning: (explicit        ) distance

更多示例请见这里

注意setupmeta的版本控制基于

git describe --dirty --tags --long --first-parent --match 'v*.*'

# Then, if above yields nothing, we try the more vague '*.*'

git describe --dirty --tags --long --first-parent --match '*.*'

如果你希望使用setupmeta的版本控制功能,则需要git版本 >= 1.8.4

目标

这个项目的目标是

  • 允许编写非常短(但完整)的setup.py,没有模板代码,并鼓励良好的通用打包实践

  • setup.py explain中指出缺少的重要信息(例如:版本)

  • 支持基于标签的版本控制(类似于setuptools_scm,但具有超级简单的配置/默认值和自动bump功能)

  • 提供有用的命令,例如查看元数据(explain)、version(包括版本升级支持)、cleanall

它是如何工作的?

  • 你明确提供给你的原始setuptools.setup()调用中的所有内容都按原样保留(永远不会更改),并在内部标记为explicit。因此,如果你不喜欢setupmeta推断出的某些内容,你总是可以明确地声明它。

  • name将自动填写为你的setup.py__title__(如果有的话,有时使用常量相当方便…)

  • 如果有一个<name>/__init__.pysrc/<name>/__init__.py文件,packagespackage_dir将相应地自动填写

  • 如果有一个<name>.py文件,py_modules将自动填写

  • entry_points将自动从文件entry_points.ini中填写(额外功能:像PyCharm这样的工具为这些内容提供了很好的语法高亮)

  • 如果有requirements.txt(或pinned.txt)文件,install_requires将自动填写,默认情况下将按社区建议将锁定抽象化,有关更多信息,请参阅requirements

  • 如果有tests/requirements.txtrequirements-dev.txtdev-requirements.txttest-requirements.txt文件,tests_require将自动填写

  • 描述将是您的README的第一行(除非第一行太短,或者仅仅是项目的名称),或者扫描到的文件中第一个docstring的第一行(见下文列表)

  • 长描述将自动从您的README文件中填充(查找README.rst,README.md,然后README*,找到的第一个将被采用)。可以使用特殊标记(针对它们的符号旨在易于rst注释

    • 使用.. [[end long_description]]作为结束标记,这样您就不必使用整个文件作为长描述

    • 如果想要包含另一个文件,请使用.. [[include <relative-path>]](例如,人们喜欢添加HISTORY.txt)

    • 这些标记必须出现在行首/行尾,或者至少在空格字符之后/之前

  • version可以明确声明,也可以使用versioning=...从git标签计算(有关更多信息,请参阅版本控制

    • 使用versioning="distance",您的git标签将采用v{major}.{minor}.0的形式,将使用自最新版本标签以来的提交数来自动填充版本号的“补丁”部分

      • 标签“v1.0.0”,自标签以来没有提交 -> 版本为“1.0.0”

      • 标签“v1.0.0”,自标签以来有5个提交 -> 版本为“1.0.5”

      • 如果签出有脏数据,将添加标记 -> 版本将是“1.0.5.post5.dirty”

    • 使用versioning="post",您的git标签将采用v{major}.{minor}.{patch}的形式,如果自最新版本标签以来有提交,则将出现“post”后缀

      • 标签“v1.0.0”,自标签以来没有提交 -> 版本为“1.0.0”

      • 标签“v1.0.0”,自标签以来有5个提交 -> 版本为“1.0.0.post5”

      • 如果签出有脏数据,将添加标记 -> 版本将是“1.0.0.post5.dirty”

    • 使用versioning="build-id",您的git标签将采用v{major}.{minor}.0的形式,将使用自最新版本标签以来的提交数来自动填充版本号的“补丁”部分

      • 标签“v1.0.0”,自标签以来没有提交,BUILD_ID=12 -> 版本为“1.0.0+h12.g123”

      • 标签“v1.0.0”,自标签以来没有提交,BUILD_ID未定义 -> 版本为“1.0.0+hlocal.g123”

      • 标签“v1.0.0”,自标签以来有5个提交,BUILD_ID=12 -> 版本为“1.0.5+h12.g456”

      • 标签“v1.0.0”,自标签以来有5个提交,BUILD_ID未定义 -> 版本为“1.0.5+hlocal.g456”

      • 如果签出有脏数据,将添加标记 -> 版本将是“1.0.5+hlocal.g456.dirty”

    • 使用bump命令(见命令)可以轻松地增加(即:增加主要、次要或补丁 + 应用git标签)

    • 版本格式可以自定义,有关更多信息,请参阅版本控制

  • versionversioningurldownload_urlbugtrack_urllicensekeywordsauthorcontactmaintainerplatforms将自动从

    • 您的模块中的__key__ = "value"行填充(仅限简单常量,表达式将被忽略 - 模块不会被导入,而是使用正则表达式进行扫描)

    • 在您的文档字符串中,形式为 键: 值 的行

    • 按照以下顺序检查文件(先找到的为准)

      • setup.py

      • <package>.py (例如:mccabe

      • <package>/__about__.py (例如:cryptography

      • <package>/__version__.py (例如:requests

      • <package>/__init__.py (例如:changesarrow

      • src/ 也会被检查(对于那些喜欢在 src 下存放包的人来说)

    • URL 可以简化

      • 如果 url 指向您的通用 GitHub 仓库(例如:[https://github.com/codrsquad](https://github.com/codrsquad)),则项目名称将自动附加到它

      • 相对 URL 将自动填充,通过在其前面添加 url

      • URL 可以使用 {name} 和/或 {version} 标记,将相应地展开

    • 作者维护者联系方式 的姓名和电子邮件可以合并到一行(setupmeta 将找出电子邮件部分并自动填充它)

      • 例如:作者: Bob D bob@example.com 将产生正确的 作者作者_email 设置

这应该可以为绝大多数 Python 项目提供良好的支持。如果您需要高级功能,您仍然可以使用 setupmeta 来处理上面提到的所有常规功能,并在需要时明确指定。

下载文件

下载适合您平台的应用程序。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

setupmeta-3.6.0.tar.gz (89.1 kB 查看哈希值)

上传于 源码

构建版本

setupmeta-3.6.0-py2.py3-none-any.whl (41.2 kB 查看哈希值)

上传于 Python 2 Python 3

由以下支持