跳转到主要内容

Python包发布器

项目描述

mkrelease 是一个简洁的Python包发布器。它旨在简化构建和分发Python包的过程。发布器支持源分发、egg和wheel格式。

动机

在为发布准备包(更新版本字符串、日期)之后,我们通常需要

  1. 提交修改后的文件。

  2. 标记发布。

  3. 构建源分发和wheel。

  4. 通过scp分发结果或将它们上传到索引服务器。

如果我们经常这样做,自动化需求就变得明显。

内容

安装

mkrelease与Python 2.7 - 3.11以及所有已发布的setuptools版本兼容。

使用 pip install jarn.mkrelease 安装 mkrelease 脚本。

从版本4.4开始,mkrelease需要twine来进行注册和上传操作。Twine可以安装为系统PATH上的全局工具,或者与jarn.mkrelease相同的环境中。 [1]

使用pip install jarn.mkrelease[twine]来安装mkrelease + twine。

从版本5.0开始,文件查找扩展不再默认安装。如果您仍然想使用文件查找器,请指定filefinder附加组件。

使用pip install jarn.mkrelease[filefinder]来安装mkrelease + 文件查找器扩展。

使用pip uninstall setuptools-subversion setuptools-hg setuptools-git来卸载文件查找器扩展。

用法

mkrelease [options] [scm-sandbox|scm-url [rev]]

选项

-C, --no-commit

不要提交沙箱中的修改文件。

-T, --no-tag

不要在SCM中标记发布。

-P, --no-push

不要将提交和标记推送到上游。

-R, --no-register

不要将发布注册到dist-location。

-S, --no-upload

不要将发布上传到dist-location。

-n, --dry-run

干运行;相当于-CTPRS。此标志将mkrelease转换为简单的包构建器。

--svn, --hg, --git

选择SCM类型。只有在无法从参数猜测SCM类型时才需要。

-d dist-location, --dist-location=dist-location

scp目标指定,配置在~/.pypirc中的索引服务器,或两者的别名。此选项可以指定多次。

-s, --sign

使用GnuPG对发布进行签名。

-i identity, --identity=identity

使用GnuPG标识进行签名。暗示-s

-z, --zip

发布zip存档。

-g, --gztar

发布tar.gz存档(默认)。

-b, --egg

发布二进制egg。

-w, --wheel

发布wheel文件(默认)。

-m, --manifest-only

忽略setuptools文件查找器扩展,仅通过MANIFEST.in收集文件。

-e, --develop

允许setuptools构建标记。暗示-T

-q, --quiet

抑制setuptools命令的输出。

-t twine, --twine=twine

覆盖使用的twine可执行文件。

-c config-file, --config-file=config-file

使用config-file代替默认的~/.mkrelease

-l, --list-locations

列出已知的dist-locations并退出。

-h, --help

打印帮助信息并退出。

-v, --version

打印版本字符串并退出。

--no-color

禁用输出颜色。

--non-interactive

如果缺少所需的凭据,则不提示用户名和密码。

参数

scm-sandbox

本地SCM沙箱。默认为当前工作目录。

scm-url [rev]

远程SCM仓库的URL。可选的rev参数指定要检出分支或标记。

配置

mkrelease 从 distutils 配置文件 ~/.pypirc 中读取可用的索引服务器。此文件应包含您的 PyPI 账户信息:[2]

[distutils]
index-servers =
    pypi

[pypi]
repository = https://upload.pypi.org/legacy/
username = fred
password = secret

接下来,mkrelease 读取其自己的配置文件 ~/.mkrelease。它可以用来更改默认设置并定义位置别名

[mkrelease]
# Release steps
commit = yes
tag = yes
push = yes
register = no
upload = yes

# One or more of: zip gztar egg wheel
formats = gztar wheel

# Setuptools options
manifest-only = yes
develop = no
quiet = no

# Sign with GnuPG
sign = no
identity =

# Default dist-location
dist-location =

[aliases]
# Map name to one or more dist-locations
customerA =
    jarn.com:/var/dist/customerA/
public =
    jarn.com:/var/dist/public/
world =
    pypi
    public

使用SCP上传

最简单的分发位置是通过 ssh 可达的服务器目录。发布一个软件包意味着将它通过 scp 复制到服务器上的适当位置

$ mkrelease -d customerA
$ mkrelease -d jarn.com:/var/dist/customerB/
$ mkrelease -d scp://jarn.com/var/dist/customerC/
$ mkrelease -d stefan@jarn.com:eggs -C -e -q

要使用 sftp 而不是 scp 上传,请使用 sftp URL 方案

$ mkrelease -d sftp://jarn.com/var/dist/customerD/

注意:与 scp 不同,sftp 客户端不会提示输入登录凭据。这意味着必须在目标服务器上配置非交互式登录,否则上传将失败。

上传到索引服务器

另一种发布 Python 软件包的方式是将它上传到专门的索引服务器,如 PyPI。给定上面的 ~/.pypirc 文件,我们可以简单地通过键入来发布到 PyPI

$ mkrelease -d pypi

索引服务器不仅限于 PyPI。有 TestPyPI,还有像 devpi 这样的替代索引服务器。我们扩展了 ~/.pypirc[2]

[distutils]
index-servers =
    pypi
    testpypi

[pypi]
repository = https://upload.pypi.org/legacy/
username = fred
password = secret

[testpypi]
repository = https://test.pypi.org/legacy/
username = fred
password = secret

现在我们可以使用以下命令发布到 TestPyPI

$ mkrelease -d testpypi -C -e

使用GnuPG

发布一个软件包并用 GnuPG 签名分发

$ mkrelease -d pypi -s -i fred@bedrock.com

-i 标志是可选的,如果未指定,GnuPG 将选择默认密钥。

需求

以下命令必须在系统 PATH 中可用(您只需使用您计划使用的部分)

  • svn

  • hg

  • git

  • scp

  • sftp

  • gpg

  • twine [1]

脚注

变更日志

5.3 - 2023-09-23

  • 更新 tox.ini 以使用最新的 tox。 [stefan]

  • 过滤已弃用的配置警告。 [stefan]

  • 修复无效的转义序列。 [stefan]

  • Git URLs 的 rev 部分不再默认为 ‘master’。 [stefan]

5.2 - 2023-01-20

  • 支持 setuptools >= 65.6.0。 [stefan]

5.1 - 2022-11-13

  • 支持 Python 2.7 - 3.11。 [stefan]

  • 如果存在 pyproject.toml,则不需要 setup.py 或 setup.cfg。 [stefan]

  • 过滤一些弃用警告。 [stefan]

  • 在非交互式模式下禁用 twine 进度条。 [stefan]

5.0 - 2022-02-26

  • 新增:文件查找扩展默认不再安装。 [stefan]

  • 新增:默认启用 push。 [stefan]

  • 新增:默认禁用 register。 [stefan]

  • 新增:默认格式为 gztar + wheel。 [stefan]

  • 如果存在 setup.cfg,则不需要 setup.py。 [stefan]

  • 切换到 nose2 测试运行器,因为它具有快速的并行插件。 [stefan]

4.4 - 2022-02-26

  • 支持 Python 2.7 - 3.10。 [stefan]

  • 支持 setuptools >= 60.0.0 的本地 distutils。 [stefan]

  • 添加输出颜色。[stefan]

  • 需要 twine 以进行注册和上传操作。[stefan]

  • 将元数据移动到 setup.cfg。[stefan]

  • 将测试移动出 jarn.mkrelease 命名空间。[stefan]

  • 在 sdist 中包含测试,但在 wheel 中不包含。[stefan]

4.3 - 2019-01-28

  • 修复问题 #10:无法从 zc.buildout 运行。[stefan]

  • 支持 python -m jarn.mkrelease。[stefan]

4.2 - 2019-01-25

  • 停止支持 Python 2.6,添加 Python 3.7。[stefan]

  • 更新 wheel 和 keyring 依赖项。[stefan]

  • 将完整的配置文件示例添加到 README 中。[stefan]

  • 在配置文件中将 dist-location 作为 distdefault 的别名接受。[stefan]

  • 在配置解析器选项 xform 中将破折号转换为下划线。[stefan]

4.1 - 2017-10-06

  • 添加 -m 选项以跳过 setuptools 扩展。[stefan]

  • 永远不要读取现有的 SOURCES.txt 文件。[stefan]

  • 允许将 –egg 作为 –binary 的别名。[stefan]

4.0.1 - 2017-07-20

  • 修复 keyring 条件包含问题。[stefan]

4.0 - 2017-07-20

  • 添加对 gztar 格式源分发的支持。[stefan]

  • 添加对 wheel 文件的支持。[stefan]

  • 允许每个版本包含多个存档格式。[stefan]

  • 防止不良或不完整的区域设置。[stefan]

  • 在 Python 2 中,有时次要线程不会终止。[stefan]

3.10 - 2017-02-01

  • 支持 setuptools >= 33.1.0。[stefan]

3.9 - 2017-01-31

  • 赶上 2016 年后期 PyPI API 的变化。[stefan]

  • 添加 -R 选项以跳过注册步骤。[stefan]

  • 支持 Python 2.6 - 3.6,无需 2to3。[stefan]

  • 处理 Mercurial 3.1.1 中的返回码变化。[stefan]

3.8 - 2013-11-21

  • 支持 Python 3.x。[stefan]

3.7 - 2012-08-22

  • 修复当给出 -b 选项时 Python 源文件的编译问题。[stefan]

  • 将检查命令作为 sdist 和注册命令的一部分运行。[stefan]

  • 添加 SFTP 支持。[stefan]

  • 允许 sftp://scp:// URL 作为 dist-locations。[stefan]

3.6 - 2012-07-11

  • 处理 Mercurial 2.1 中的返回码变化。[stefan]

  • 添加 setuptools-subversion 依赖项。[stefan]

  • 借助 setuptools-subversion 支持 Subversion 1.7。[stefan]

3.5 - 2011-11-25

  • 允许配置文件选项 distdefault 有多个值。[stefan]

  • 在解析所有参数之后延迟 list-locations。[stefan]

  • 通过避免 Subversion 检出,使测试运行速度提高两倍。[stefan]

3.4 - 2011-11-10

  • 如果给出 -p 但找不到上游位置,则发出警告。[stefan]

  • 在 Mercurial 中始终推送默认设置。[stefan]

  • 避免从终止的子进程中读取空行。[stefan]

  • 修复处理 distbase 的错误。[stefan]

3.3 - 2011-10-31

  • 将 setuptools 添加到子进程的 PYTHONPATH 中。[stefan]

  • 在执行 SCM 命令时取消设置任何 PYTHONPATH。[stefan]

  • 支持 Git 的短形式 ssh:// URL。[stefan]

  • 添加 -c 选项以指定除 ~/.mkrelease 之外的配置文件。[stefan]

3.2 - 2011-10-21

  • 修复传递给子进程的环境;Mercurial 不喜欢混乱的 PYTHONPATH。[stefan]

  • 允许指定从 Git 和 Mercurial 存储库中检出的分支或标记。[stefan]

  • 适应 Subversion 1.6 中的新状态输出。[stefan]

  • 始终在 list-locations 中包含 distdefault。[stefan]

  • file:// URL 检测 Subversion 仓库。[stefan]

  • file:// URL 检测裸 Git 仓库。[stefan]

3.1 - 2011-07-19

  • 将 PYTHONPATH 传递给子进程,以便 mkrelease 在 zc.buildout 环境中工作。[stefan]

  • 在嵌套一个或多个 SCM 的情况下改进 SCM 检测。[stefan]

  • 添加对相对 file: URL 的支持。[stefan]

  • 依赖于 lazy 而不是携带本地实现。[stefan]

3.0.10 - 2011-07-07

  • 添加 -l 选项以列出已知的 dist-locations(即服务器和别名)。[stefan]

  • 放弃对服务器 URL 作为 dist-locations 的支持。服务器 URL 不是唯一的。[stefan]

  • 更新 Mercurial 测试仓库,以确保在 Mercurial 1.8 下标签测试不会失败。[stefan]

3.0.9 - 2010-12-31

  • [defaults] 配置文件部分重命名为 [mkrelease]。[stefan]

  • 进行各种内部代码清理。[stefan]

3.0.8 - 2010-08-13

  • 避免在依赖名称中使用下划线。[stefan]

  • 处理 Mercurial 1.6 中的返回代码变化。[stefan]

3.0.7 - 2010-07-07

  • 改进文档和错误信息。[stefan]

3.0.5 - 2010-03-23

  • 允许对每个服务器配置 -s 和 -i 的默认值。[stefan]

  • 支持 codespeak.net Subversion 仓库布局。[stefan]

3.0.4 - 2010-03-16

  • 状态检查没有使用与提交(Mercurial 和 Git)相同的路径限制。[stefan]

3.0.3 - 2010-03-16

  • 更改检查 Subversion 仓库中现有标签的方式。[stefan]

  • 使所有三个 SCMs 中的沙箱状态检查更加稳健。[stefan]

3.0.2 - 2010-03-12

  • 添加对 Git 1.7 的支持。[stefan]

3.0.1 - 2010-02-07

  • 当给定 -d pypi 但找不到配置时停止。[stefan]

  • 使用 gnu_getopt 解析命令行。[stefan]

3.0 - 2010-01-15

  • 将 dry-run 切换到 -n 以与其他工具保持一致。[stefan]

  • 出于相同的原因,将 –skip-* 长选项重命名为 –no-*。[stefan]

  • 修复 Mercurial 和 Git 沙箱检测中的错误。[stefan]

  • 为独立 distutils 准备。[stefan]

2.0.4 - 2010-01-10

  • 改进 Git 支持,以处理除 origin 之外的其他远程仓库。[stefan]

  • 修复 ssh:// URL 中的 SCM 检测。[stefan]

2.0.3 - 2010-01-03

  • 添加 -b 选项以发布二进制 eggs。[stefan]

  • 在 dry-run 时不要在脏沙箱上卡住。[stefan]

2.0.2 - 2009-08-29

  • 过滤元文件(.svn*.hg*.git*)并确保它们从不包含在版本中。[stefan]

  • 确保清理所有临时文件。[stefan]

2.0.1 - 2009-07-24

  • 修复了可能导致 mkrelease 发布具有损坏清单文件的 eggs 的错误(症状:数据文件未安装)。[stefan]

  • -e 标志现在隐含 -T。我们永远不希望标记开发版本。[stefan]

2.0 - 2009-07-16

  • 允许命令行选项出现在参数之后。例如:mkrelease src/mypackage -q -d pypi。[stefan]

2.0b2 - 2009-07-09

  • 改进 SCM 检测部分的用户反馈。[stefan]

  • 记录 -e 标志。[stefan]

  • 放弃 YAGNI 的全局配置文件。[stefan]

  • 允许在 ~/.mkrelease 中设置 -s 和 -i 的默认值。[stefan]

2.0b1 - 2009-07-03

  • 默认情况下,忽略 setup.cfg 中可能配置的所有版本号扩展(dev-r12345)。传递 -e 标志将禁用此保护。[witsch, stefan]

  • 在重新签名之前删除任何现有的签名文件。这可以防止 GnuPG 对现有(但多余的)文件进行抱怨。[stefan]

2.0a2 - 2009-06-27

  • 放弃可配置的 Python 并使用 sys.executable。这也意味着我们现在需要 Python 2.6。[stefan]

  • 强制 setuptools 仅使用所选 SCM 类型的文件查找器。这是支持多 SCM 沙箱(例如 git-svn)所必需的。[stefan]

  • 将 Subversion 沙箱视为其他沙箱并避免临时检出步骤。[stefan]

  • 删除 -u 标志,因为它没有意义。[stefan]

2.0a1 - 2009-06-14

  • 添加了对 Mercurial 和 Git 的支持。[stefan]

  • 添加了 250 多个单元测试。[stefan]

1.0.2 - 2009-06-13

  • 记录了长选项。[stefan]

  • 在标记之前打印“标记…”行。[stefan]

1.0 - 2009-05-14

  • 将帮助和版本信息打印到 stdout,而不是 stderr。[stefan]

1.0b4 - 2009-04-30

  • 由于 distutils 命令可能会返回 0,成功或失败,我们必须检查它们的输出以查找失败迹象。[stefan]

  • 允许传递参数列表到 main()。[stefan]

1.0b3 - 2009-03-23

  • 不再依赖grep。[stefan]

  • 使用subprocess.Popen代替os.system和os.popen。[stefan]

  • 防止无限别名递归。[stefan]

  • 删除-z选项,从现在起始终创建zip文件。[stefan]

1.0b2 - 2009-03-19

  • 检查所有已修改的内容,而不仅仅是“相关”文件。[stefan]

  • 递归展开别名。[stefan]

1.0b1 - 2009-03-18

  • distbase和distdefault配置文件选项不再有默认值。[stefan]

  • 从~/.pypirc读取索引服务器,并允许它们与-d一起使用。[stefan]

  • -d选项可以指定多次。[stefan]

  • 删除-p选项。使用-d pypi代替。[stefan]

  • 删除-c选项。如果您有非标准SVN仓库,您必须手动标记。[stefan]

0.19 - 2009-02-23

  • 使临时目录路径绝对化。[stefan]

0.18 - 2009-01-26

  • 在long_description中包含README.txt和CHANGES.txt。[stefan]

  • 删除未使用的导入和局部变量。[stefan]

0.17 - 2009-01-23

  • 添加-c选项以启用codespeak支持。codespeak.net仓库使用branchtag而不是branchestags。[gotcha, stefan]

0.16 - 2009-01-13

  • 将正则表达式构造折叠到find中,并使find成为一个方法。[stefan]

  • 更新README.txt。[stefan]

0.15 - 2009-01-13

  • 支持从配置文件中读取默认选项。[fschulze, stefan]

0.14 - 2009-01-08

  • 添加-s和-i选项以使用GnuPG对PyPI上传进行签名。[stefan]

  • 在任何失败步骤后停止执行。[stefan]

0.13 - 2009-01-05

  • 在检查in步骤失败时停止执行。[stefan]

0.12 - 2009-01-02

  • setup.cfg可能不存在。[stefan]

0.11 - 2008-12-02

  • 将setup.cfg添加到要检查in的文件列表。[stefan]

0.10 - 2008-10-21

  • 不要将GetOptError消息大写。[stefan]

0.9 - 2008-10-16

  • 添加-v选项以打印脚本版本。[stefan]

0.8 - 2008-10-16

  • 取消仅允许发布svn trunk的限制。[stefan]

0.7 - 2008-10-09

  • 修复必须与sdist在同一命令行中发生的PyPI上传。[stefan]

0.6 - 2008-10-08

  • 更新README.txt。[stefan]

0.5 - 2008-10-08

  • 同时定位并检查in HISTORY.txt以支持ZopeSkel的egg。[stefan]

0.4 - 2008-10-08

  • 使用svn checkout代替svn export,因为这对setuptools有影响。[stefan]

  • 添加-p选项,用于将上传到PyPI而不是dist-location。[stefan]

0.3 - 2008-10-06

  • 同时定位并检查in version.txt。[stefan]

0.2 - 2008-10-01

  • 添加-z选项以创建zip存档而不是默认的tar.gz。[stefan]

0.1 - 2008-10-01

  • 初始发布 [stefan]

项目详情


下载文件

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

源分布

jarn.mkrelease-5.3.tar.gz (102.9 kB 查看哈希值)

上传时间

构建分布

jarn.mkrelease-5.3-py2.py3-none-any.whl (36.6 kB 查看哈希值)

上传时间 Python 2 Python 3

支持者