内容提要
最近使用PDM作为Python环境管理工具,搭配Anaconda使用。PDM提供了自动生成项目配置文件、解决依赖问题等功能。可以使用PDM构建Python包并发布到PyPI。使用PDM与GitHub Actions发布Python包的方法。初始化项目后,项目文件夹结构包括.gitignore、.pdm-python、pyproject.toml、README.md、.venv、src和tests。可以通过PDM构建项目并生成压缩包。可以将已有项目迁移到PDM中。准备发布到PyPI,需要注册PyPI和TestPyPI账号。可以借助GitHub Actions完成构建和自动发布。可以创建多个workflow实现不同的发布需求。
延伸解读
PDM 构建的包内容控制
PDM 默认会将 tests 目录打包进发布包,这可能包含不必要的测试数据,增大包体积。文章指出可以在 pyproject.toml 的 [tool.pdm.build] 中添加 excludes = ["tests/"] 来排除 tests 目录。对于从已有项目迁移的情况,如果源码不在 src 目录下,可以通过 includes 指定要打包的目录,例如 includes = ["main/", "plugins/"]。这提醒开发者发布前应检查包内容,避免包含无关文件。
TestPyPI 作为发布前的测试环节
文章强调在正式发布到 PyPI 前,应先在 TestPyPI 上测试发布和安装流程。TestPyPI 是 PyPI 的测试仓库,账号和数据独立,需要单独注册。通过 TestPyPI 可以验证包是否能正常构建、上传和安装,避免正式发布时出现问题。使用 pip install -i https://test.pypi.org/simple/ 可以安装测试包。这为开发者提供了一个安全的预发布环境。
GitHub Actions 工作流的分层设计
文章展示了如何根据发布需求设计多个 workflow。基础 workflow 在每次 push 时触发构建和发布到 TestPyPI;更复杂的场景则拆分为两个 workflow:一个在 push 时构建,并在有版本 tag 时发布到 TestPyPI 和 GitHub pre-release;另一个在手动创建 release 时发布到 PyPI。这种分层设计实现了从测试到正式发布的自动化流程,同时通过条件判断(如 tag 以 v 开头)控制发布时机。
跨平台构建与文件传递
在复杂 workflow 中,文章使用 strategy.matrix 和 include 为不同操作系统指定 wheel 平台标签,例如在 Ubuntu 上生成 manylinux_2_35_x86_64 的 wheel,在 Windows 上生成 win_amd64 的 wheel。由于每个 job 运行在独立的容器中,文件不互通,因此使用 upload-artifact 和 download-artifact 在不同 job 间传递构建产物。这确保了多平台 wheel 和源码包能正确收集并用于后续发布。
Q&A
PDM是什么,它的主要功能有哪些?
PDM是一款Python环境管理工具,主要功能包括自动生成项目配置文件、解决依赖问题以及构建和发布Python包到PyPI。
如何使用PDM初始化一个Python项目?
使用PDM初始化项目时,需在终端中执行`pdm init`命令,按照提示选择Python解释器和项目配置,最终生成项目文件夹结构。
在发布Python包到PyPI之前需要做哪些准备?
在发布之前,需要注册PyPI和TestPyPI账号,并确保项目已构建完成,生成的压缩包位于dist目录中。
如何通过GitHub Actions自动发布Python包?
可以在项目中添加GitHub Actions配置文件,设置触发条件和步骤,使用`pdm publish`命令将包发布到TestPyPI或PyPI。
如何将已有项目迁移到PDM中?
可以调整项目结构,将源码放入src目录中,或在pyproject.toml中手动设置打包的源码目录,然后使用`pdm build`进行构建。
PDM构建的Python包的文件结构是什么样的?
PDM构建的Python包文件结构包括`.pdm-build`、`dist`、`src`、`tests`等目录,`dist`目录中包含可发布的压缩包。