Python包发布器
项目描述
mkrelease 是一个简洁的Python包发布器。它旨在简化构建和分发Python包的过程。发布器支持源分发、egg和wheel格式。
动机
在为发布准备包(更新版本字符串、日期)之后,我们通常需要
提交修改后的文件。
标记发布。
构建源分发和wheel。
通过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仓库使用branch和tag而不是branches和tags。[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]
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。