= Release()
rel # print(rel.changelog(debug=True))
发布
概述
nbdev.release
提供了 3 个命令,您可以在 shell 中运行这些命令来管理您的更新日志文件和 Git 发布版本
nbdev_changelog
: 从已关闭并标记的 GitHub 问题创建 CHANGELOG.md 文件nbdev_release_git
: 为当前版本在 GitHub 中标记并创建一个发布版本nbdev_release_gh
: 调用nbdev_changelog
,允许您编辑结果,然后推送到 Git 并调用nbdev_release_git
它提供了另外 3 个用于在 pypi 或 conda 上发布包的命令
nbdev_pypi
: 创建并上传 pypi 安装程序nbdev_conda
: 创建并上传 conda 安装程序nbdev_release_both
: 同时创建并上传 pypi 和 conda 安装程序
这里有一个简短的演示,说明如何在 nbdev.release
中使用更新日志和 Git 发布工具。这个演示首先使用 gh
命令行工具创建一个问题,然后使用 git
关闭它;您也可以使用 GitHub 的网页界面完成这两项任务。(请注意,这个功能以前在一个叫做 fastrelease
的项目中,所以在视频中,命令行工具的名称不同,以 fastrelease_
开头而不是 nbdev_
)。
设置
如果您还没有 GitHub 个人访问令牌,则需要获取一个。为此,请点击这里并在“Note”部分输入“nbdev”,然后点击 repo
复选框。
然后点击屏幕底部的“Generate Token”,并复制该令牌(显示的一长串字母和数字)。您可以通过点击令牌旁边的小剪贴板图标轻松完成此操作。
最简单的方法是将令牌保存为一个环境变量 GITHUB_TOKEN
,以便自动访问。我们建议您通过将以下内容添加到您的 .bashrc
或 .zshrc
文件末尾来实现这一点
export GITHUB_TOKEN=xxx
...然后用您刚刚复制的令牌替换 xxx
。这样,当您启动一个新的 shell 时,它将自动可用(但更改后别忘了 source
该文件或打开一个新的 shell)。
创建发布说明
现在您可以创建发布说明了。这些说明会保存在一个名为 CHANGELOG.md
的文件中。这里有一个创建示例:nbdev 更新日志。
自上次发布以来,所有在您的仓库中已关闭且带有 bug、enhancement 或 breaking 标签的问题都将添加到此文件顶部。如果您之前没有进行过任何发布,那么所有带有这些标签的问题都将包含在内。
因此,在创建或更新 CHANGELOG.md
之前,请前往您的 GitHub 问题页面,从过滤器中移除 is:open
,并为您希望包含的任何问题打上上述标签之一。完成这些操作后,您可以通过在终端中运行以下命令来创建或更新您的发布说明
nbdev_changelog
每个问题的标题和正文都将被添加。在编辑器中打开 CHANGELOG.md
并进行您想要的任何修改,然后将文件提交到您的仓库(别忘了 git add
它!)
标记发布
您现在应该标记一个发布版本。这将在 GitHub 中创建一个带有您在 settings.ini
中当前版本号的标签,然后将其转换为一个发布版本,使用您最新的发布说明作为该发布版本的描述
nbdev_release_git
运行此命令后,请务必在 settings.ini
中增加您的版本号。您可以手动编辑,或者如果您使用 nbdev,可以通过运行以下命令自动完成
nbdev_bump_version
同时执行两项操作(创建发布说明和标记发布)
要完成以上两个步骤,请运行
nbdev_release_gh
有关此内容的演示,请参阅上面的截屏视频。
Python API
Release
Release (owner=None, repo=None, token=None, **groups)
从 GitHub 问题创建 CHANGELOG.md
要创建 markdown 格式的更新日志,首先创建一个 Release
对象,可以选择传入一个将 GitHub 标签映射到 markdown 标题的映射。将您的 github token 放在仓库根目录下名为 token
的文件中。Release
在未提供参数值时会尝试从以下位置获取:
- owner: 从
settings.ini
中的user
字段获取。这是 GitHub 仓库的所有者名称。例如,对于仓库fastai/fastcore
,所有者是fastai
。 - repo: 从
settings.ini
中的lib_name
字段获取。这是 GitHub 仓库的名称。例如,对于仓库fastai/fastcore
,名称是fastcore
。 - token: 从仓库根目录下名为
token
的文件获取。在设置部分讨论了如何创建令牌。 - groups: (可选)从
settings.ini
中的label_groups
字段获取,该字段是一个 JSON 字符串。这是一个将标签名称映射到发布说明中标题的映射。如果未指定,则默认为
"breaking": "Breaking Changes", "enhancement":"New Features", "bug":"Bugs Squashed"} {
Release.changelog
Release.changelog (debug=False)
创建 CHANGELOG.md 文件,如果 debug
为 True
则返回建议的文本
类型 | 默认值 | 详情 | |
---|---|---|---|
debug | bool | False | 只打印最新更改,而不更新文件 |
Release.release
Release.release ()
为当前版本在 GitHub 中标记并创建一个发布版本
这使用您的 settings.ini
中的版本信息。
Release.latest_notes
Release.latest_notes ()
最新更新日志条目
所有相关的 pull request 和问题都从 GitHub API 获取,并根据用户提供的从标签到 markdown 标题的映射进行分类。
CLI 函数
changelog
changelog (debug:<function store_true>=False, repo:str=None)
从已关闭并标记的 GitHub 问题创建 CHANGELOG.md 文件
类型 | 默认值 | 详情 | |
---|---|---|---|
debug | store_true | False | 打印要添加到更新日志的信息,而不更新文件 |
repo | str | None | 要使用的仓库,而不是从 settings.ini 获取的 lib_name |
release_git
release_git (token:str=None)
为当前版本在 GitHub 中标记并创建一个发布版本
类型 | 默认值 | 详情 | |
---|---|---|---|
token | str | None | 可选的 GitHub 令牌(否则使用 token 文件) |
release_gh
release_gh (token:str=None)
调用 nbdev_changelog
,允许您编辑结果,然后推送到 Git 并调用 nbdev_release_git
类型 | 默认值 | 详情 | |
---|---|---|---|
token | str | None | 可选的 GitHub 令牌(否则使用 token 文件) |
发布包
pypi_json
pypi_json (s)
PYPI 路径 s
的字典解码 JSON
latest_pypi
latest_pypi (name)
name
在 pypi 上的最新版本
pypi_details
pypi_details (name)
name
从 pypi 获取的版本、URL 和 SHA256
conda_output_path
conda_output_path (name, build='build')
Conda 构建的输出路径
write_conda_meta
write_conda_meta (path='conda')
将 meta.yaml
文件写入当前目录的 conda
子目录
此函数用于 conda_package
CLI 命令。
注意:在创建 conda 包之前,您首先需要将您的包上传到 PyPi。
write_requirements
write_requirements (path:str='')
根据 settings.ini 将 requirements.txt
文件写入 directory
目录。
在需要为项目生成 requirements.txt
文件的情况下,可以使用此函数。
anaconda_upload
anaconda_upload (name, loc=None, user=None, token=None, env_token=None)
将 name
上传到 anaconda
from fastcore.xtras import globtastic
release_conda
release_conda (path:str='conda', do_build:<function bool_arg>=True, build_args:str='', skip_upload:<function store_true>=False, mambabuild:<function store_true>=False, upload_user:str=None)
创建一个准备构建成包的 meta.yaml
文件,并可选地构建和上传它
类型 | 默认值 | 详情 | |
---|---|---|---|
path | str | conda | 包将被创建的路径 |
do_build | bool_arg | True | 运行 conda build 步骤 |
build_args | str | 发送给 conda build 的额外参数(字符串形式) |
|
skip_upload | store_true | False | 跳过 anaconda upload 步骤 |
mambabuild | store_true | False | 使用 mambabuild (需要 boa ) |
upload_user | str | None | 可选的上传包的用户 |
chk_conda_rel
chk_conda_rel (nm:str, apkg:str=None, channel:str='fastai', force:<function store_true>=False)
仅当 PyPI 上存在比 Anaconda 仓库更新的发布版本时,才打印 GitHub 标签。
类型 | 默认值 | 详情 | |
---|---|---|---|
nm | str | pypi 上的包名称 | |
apkg | str | None | Anaconda 包(默认为 {nm}) |
channel | str | fastai | Anaconda 频道 |
force | store_true | False | 总是返回 github 标签 |
要构建和上传 conda 包,请 cd 到您的仓库根目录,然后
nbdev_conda_package
或者更手动地操作
nbdev_conda_package --do_build false
cd conda
conda build --no-anaconda-upload --output-folder build {name}
anaconda upload build/noarch/{name}-{ver}-*.tar.bz2
向 conda build command
添加 --debug
以调试发生的任何问题。请注意,构建步骤需要几分钟。如果您希望上传到组织,请向 anaconda upload
命令添加 -u {org_name}
,或者将 upload_user
传递给 nbdev_conda_package
。
注意:在创建 conda 包之前,您首先需要将您的包上传到 PyPi。
release_pypi
release_pypi (repository:str='pypi')
创建并上传 Python 包到 PyPI
类型 | 默认值 | 详情 | |
---|---|---|---|
repository | str | pypi | 要上传到的仓库(在 ~/.pypirc 中定义) |
使用 --repository
标志可以上传到 TestPypi(例如 nbdev_pypi --repository testpypi
)以及自定义/私有仓库。
可以更新 ~/.pypirc 文件来配置额外的仓库,请参见下面的示例
[distutils]
index-servers =
pypi
testpypi
private-repository
[pypi]
username = __token__
password = <PyPI token>
[testpypi]
username = __token__
password = <TestPyPI token>
[private-repository]
repository = <private-repository URL>
username = <private-repository username>
password = <private-repository password>
使用 nbdev_pypi --repository private-repository
上传到私有仓库。
release_both
release_both (path:str='conda', do_build:<function bool_arg>=True, build_args:str='', skip_upload:<function store_true>=False, mambabuild:<function store_true>=False, upload_user:str=None, repository:str='pypi')
发布 conda 和 PyPI 包
类型 | 默认值 | 详情 | |
---|---|---|---|
path | str | conda | 包将被创建的路径 |
do_build | bool_arg | True | 运行 conda build 步骤 |
build_args | str | 发送给 conda build 的额外参数(字符串形式) |
|
skip_upload | store_true | False | 跳过 anaconda upload 步骤 |
mambabuild | store_true | False | 使用 mambabuild (需要 boa ) |
upload_user | str | None | 可选的上传包的用户 |
repository | str | pypi | 要上传到的 Pypi 仓库(在 ~/.pypirc 中定义) |
增加版本号
bump_version
bump_version (version, part=2, unbump=False)
nbdev_bump_version
nbdev_bump_version (part:int=2, unbump:bool=False)
将 settings.ini 中的版本号增加一
类型 | 默认值 | 详情 | |
---|---|---|---|
part | int | 2 | 要增加的版本部分 |
unbump | bool | False | 减小版本号而不是增加 |