- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚启动了一个开放源代码Python项目,希望有一天它会流行起来。目前要发布新版本,我必须做一些事情。
测试所有东西。
编辑mypackage.VERSION
变量,该变量从setup.py
导入。
使用__init__
构建包装和轮子
将更改日志条目写入python setup.py sdist bdist_wheel
文件
提交我的更改,回显一些更改日志
标记为发布的标签,再次复制该变更日志条目。
拖入我的内置文件,以便人们可以从发行版中下载它们
使用Twine将软件包推到PyPI上
通过PyPI在我的登台服务器上再次测试。
如果我必须以九个要点来总结我对项目的所有不满,我想我们会在一个非常相似的列表中找到。切入的是过去我编了一个新版本号并写了commit / changelog消息,这很痛苦。
我是否可以通过某种方式使任何这些任务自动化,例如,让GitHub CI可以仅通过提交完成所有任务?
我已经拥有十年的Python经验和一点CI,但是对于打包Python并与PyPI进行积极交互我还是很陌生。我怀疑我不是唯一一个在这里因手动重复而发疯的人,我只是在寻找可以简化此过程的工具(或服务)。
最佳答案
以下是我对您的清单的看法。您可以实现一定范围的自动化,而我将尝试提供一个合理的起点,然后提供一些提示,告诉您如何进一步发展。
没有CD的CI
采用这一部分应该已经摆脱了大多数烦人的手工工作,并且随着需求的增加,您可以实现越来越多的自动化。如果您不愿意维护大量的CI代码,则应从这里开始。
您需要的是CI(如前所述)和程序包管理器。您无法解决的事情是使用git推送您的更改和新标签,因此第5步和第6步的部分内容仍为手动操作。
包装管理
我将使用poetry来保持内容简洁,因为我喜欢[1],但是也有other options。这将涉及步骤2、3、7、8和未列出的步骤10“更新我的依赖关系并测试它们的兼容性”,一旦发现有问题,这将令人讨厌。
使用诗歌时的坏消息是,您需要将所有打包配置都移到新文件pyproject.toml
中。好消息是,您不再需要单独的setup.py
,setup.cfg
,MANIFEST.in
或requirements.txt
,因为pyproject.toml
是包装和其他工具的临时标准,诗歌也有关于如何移植所有相关信息的walkthrough。
设置就绪后,新的部署工作流程将是:
$ poetry update # update dependencies, may be skipped
$ poetry version # bump version
Bumping version from 1.1.2 to 1.1.3
# finalize git stuff, e.g. add -u, commit -m 'v1.1.3', tag v1.1.3, push
$ poetry publish --build # build and publish to PyPI
Building my_django_lib (1.1.3)
- Building sdist
- Built my_django_lib-1.1.3.tar.gz
- Building wheel
- Built my_django_lib-1.1.3-py3-none-any.whl
Publishing my_django_lib (1.1.3) to PyPI
- Uploading my_django_lib-1.1.3-py3-none-any.whl 100%
- Uploading my_django_lib-1.1.3.tar.gz 100%
.gitignore
文件,请随时在
~/.bashrc
中添加类似此函数的内容并改为调用它:
git_cord () {
version=$(grep pyproject.toml -e '(?<=^version = ")(.*)(?=")' -Po)
git add -u
git commit -m "${version}"
git tag "${version}"
git push -u origin "${version}"
}
.gitlab-ci.yml
来运行测试。流水线中的每个作业(跳过设置和安装命令)也应该在您的开发环境中可执行,这样可以保持更好的维护经验。
image: python:3.7-alpine
stages:
- build
- test
packaging:
stage: build
script:
- pip install poetry
- poetry build
artifacts:
paths:
- dist
pytest:
stage: test
script:
- pip install dist/*.whl
- pip install pytest
- pytest
build
和
test
阶段可一次完成第1步和第9步,同时还针对已安装的软件包而不是源文件运行测试套件。尽管只有在您的项目中有src布局时,它才能正常工作,这会使本地资源无法从项目根目录导入。关于为什么
here和
here是个好主意的一些信息。
poetry new my_django_lib --src
将代码移入其中。
CHANGELOG
文件包含与用户相关的信息,并且仅应包含新功能,重要的错误修正和不推荐使用的信息。
CHANGELOG
中。您可以尝试以某种方式收集它,但是导航这样的
AUTOLOG
可能与筛选我刚才提到的主要资源一样麻烦。
poetry version
,也许运行
poetry update
CHANGELOG
中写发行说明
.gitlab-ci.yml
和
PYPI_USER
,对前
PYPI_PASSWORD
文件的此添加应立即起作用:
stages:
- build
- test
- release
[...] # packaging and pytest unchanged
upload:
stage: release
only:
- tags
# Or alternatively "- /^v\d+\.\d+\.\d+/" if you also use non-release
# tags, the regex only matches tags that look like this: "v1.12.0"
script:
- pip install poetry
- poetry publish -u ${PYPI_USER} -p ${PYPI_PASSWORD} dist/*
.gitlab-ci.yml
documentation
.gitlab-ci.yml
模板的
the long version,以及可能对您有用或不有用的其他阶段。它期望代码的src布局。
lint
:
type checking,
coverage和
code style
security
:检查
your own code和
your dependencies的价差
release.docs
:公共gitlab页面部分,在其中提供自动创建文档的文档
based on your docstrings
build
阶段从
poetry.lock
文件创建一个操舵室,该操舵室可用于以后安装依赖项以支持PyPI。这样可以更快一点,可以节省网络带宽,并且可以在需要调试时声明使用特定版本,但是这样做可能会过大,并且需要使用诗歌预发行版。
关于python - 自动化Python软件包发布过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57628064/
当我做 rpm -qa | grep nano我可以看到 Nano 文本编辑器已安装到我的 CentOS 机器上。 但是当我做 rpm -qpi nano-2.9.8-1.el8.x86_64.rpm
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 4年前关闭。 Improve this qu
我无法使用“yum”命令在RHEL服务器上安装“graphviz” 我下载了graphviz rhel.repo,并将其保存在/etc/yum.repos.d/上,然后使用“yum-y install
我想用 Go 检查 dot 包是否已安装并可在当前 OS 上执行。 我的第一个想法是检查 PATH 变量中的 /dot 字符串?有没有更好的方法来使用 Go 获取可执行/已安装的包? 任何建议都会有所
我已经在我的 ubuntu 上安装了 R(3.4.0)。我想使用 EdgeR 包。我尝试按照 Bioconductor 网站上的安装说明安装 Bioconductor 软件包。 我在 R 中使用了以下
我已经自定义编译了我自己的 ffmpeg 版本,并从这个包中制作了一个 .deb 文件。包描述如下control.txt Package: ffmpeg Version: 4.3-ubuntu1804
我正在尝试构建一个 debian 软件包,它会自动配置我所有的机器以使用相同的配置文件和设置。 例如,我正在尝试设置诸如 alter/etc/default/hostapd 之类的内容。我目前正在通过
我的configuration.nix中有一些要覆盖的软件包。因此,我将代码编写如下: nixpkgs.config = { allowUnfree = true; packageOverri
我想将我的 Ubuntu 从 19.04 升级到 20.04,但在我更新所有软件包之前这是不可能的。 ❯ sudo do-release-upgrade Checking for a new Ubun
我安装了 Homebrew 软件,但是我没有管理员权限。如何在没有管理员访问权限的情况下安装 Homebrew 软件包?是否有本地标签或我一直缺少的东西? 最佳答案 Homebrew 需要 /usr/
我想重建/重新编译具有特定标志的机器的所有 Debian 软件包。 我怎样才能用尽可能少的命令来做到这一点? 我发现 https://debian-administration.org/article
请帮我在 R 中安装 Rmpfr 包。 结果是: 安装包“Rmpfr”的退出状态非零,我无法安装它。 R控制台的代码发布如下: * installing *source* package ‘Rmpfr
有没有办法从这一行下载所有软件包,将它们保存在本地,然后将它们安装到没有互联网连接的机器上? yum install -y qemu-kvm qemu-img virt-manager libvirt
以下 R 命令将安装所有 CRAN 软件包: availablePackages <- available.packages()[,1] install.packages(availablePacka
我正在尝试在 OS X 10.12.6 上安装 RCurl,但出现以下错误: Error: package or namespace load failed for ‘RCurl’ in dyn.lo
我正在尝试自动设置开发人员机器软件安装。当您连接到 Internet 时,Chocolatey 很适合安装软件包。有没有办法离线安装软件包? 我只想将所有包放在共享网络文件夹中并使用该包进行安装。如果
这很奇怪,list-packages 缓冲区将实际安装的某些软件包的状态显示为“可用”。该列不应该为他们显示“已安装”吗?当我单击其中一个时,会打开一个新缓冲区,通知我该软件包已安装,但不提供卸载选项
我刚开始学习 Dart 。 首先,我从https://angular.io/docs/dart/latest/quickstart.html创建了一个基于angular2-dart的项目,它正常工作。
我在 ~/R/i486-pc-linux-gnu-library/2.11 下安装了一些 R 软件包。 我想让它们以及我从现在开始安装的任何其他 R 软件包可供所有 R 用户使用。我不介意在一个中立的
我是Renjin的新手,无法使用AetherPackageLoader安装软件包。我收到与Renjin can't load pckages中相同的错误,但看似正确的Gradle文件(请注意a4Bas
我是一名优秀的程序员,十分优秀!