跳转到: 导航, 搜索

Neutron/VendorSplitPackaging

Neutron 供应商拆分:打包者视角

Neutron 已经开始将供应商库从其代码树中拆分到独立的、由供应商管理的仓库中。现在供应商负责发布 Python (PyPI) 包供公众使用。最近的观察表明,在某些情况下,供应商发布的 Python 包对于分发使用来说并不理想。以下是一些关于如何通过增强供应商库包内容来帮助打包者完成工作的随机笔记。

Oslo 模块

Neutron 在 neutron.openstack.common.* 命名空间中维护了一些从 oslo-incubator 复制的 Oslo 模块。该代码树不应该被 neutron 核心和 *aas 仓库之外的任何代码使用。尽管如此,多个(如果不是大多数)供应商库仍然依赖于代码树中的代码。

供应商方面的解决方案可以是以下之一:

  • 停止使用 neutron.openstack.common.* 模块,而是将所需的模块维护在供应商库内部。更多细节请参见 相应的 Oslo 策略
  • 切换到使用从 oslo-incubator 毕业的 oslo.* 库。
  • 在 requirements.txt 中固定 neutron 修订版本,以避免随机时间出现中断。请注意,在这种情况下,供应商还应确保他们经常更新固定版本,以跟上 neutron 的开发。请注意,修订版本固定除了 Oslo 模块的使用之外,还有其自身的优点。

PyPI 包内容

观察到一些已经发布在 PyPI 上的供应商库缺少存在于相应 Git 仓库中的一些文件,这些文件对于打包很有用。具体来说,以下文件应包含在 PyPI 包中,以帮助打包者:

  • requirements.txt 和 test-requirements.txt:用于引用供应商期望与其库一起使用的依赖项。
  • LICENSE 文件:大多数发行版都要求其包中包含许可证文本。
  • 运行测试所需的全部文件,无需 virtualenv:包可以在其构建过程中运行单元测试。

依赖项

  • 依赖关系通过 requirements.txttest-requirements.txt 传达给打包者,因此这些文件应包含运行时和运行单元测试时所需的正确且完整的依赖关系。建议供应商库不要依赖 neutron 依赖项来获取它们所需的所有依赖项,而是将明确用于其代码中的包放入这些文件中。其背后的原因是 neutron 可能会删除其中一些依赖项,并且供应商库将损坏。
  • 请确保您的依赖关系与 requirements 仓库中列出的依赖关系相符(请参阅 global-requirements.txttest-requirements.txt),以支持您想要支持的 OpenStack 版本(例如,对于 Kilo,请使用该仓库中 Kilo 分支中的依赖项)。这对于避免 OpenStack 整体需求与您的项目需求之间的冲突非常重要,并且可以使发行版的生活更轻松。请注意,您还可以将您的 stackforge 项目添加到 projects.txt 文件中,以自动更新您的需求。

Git 仓库

建议供应商库除了 PyPI 发布之外,还维护一个包含代码的公共 Git 仓库。在分发运行打包 CI 针对 master 分支时,这很有用(作为参考,RDO 用于 master 分支的 Delorean 这样做)。