将软件从任何包管理器打包到任何发行版
upt的Python项目详细描述
通用包装工具(UPT)
一个统一的cli工具,它可以从特定于语言的包转换包 一个几乎可以免费使用的包的管理器(如pypi或npm) 基于Unix的操作系统(如GNU/Linux发行版或*BSD)。
安装
请注意,运行upt需要python 3.6或更新版本。
您可以从pypi安装upt:
$ pip install upt
您也可以从git存储库或tarball安装它:
$ python setup.py install
就其本身而言,upt是无用的。它需要前端和/或后端提供 有用的功能。请参阅此页末尾的可用前端/后端列表 文件。您可以通过运行以下命令安装它们:
$ pip install upt-pypi
$ pip install upt-openbsd
$ pip install ...
您也可以通过运行以下命令安装upt及其所有前端:
$ pip install upt[frontends]
您也可以通过运行以下命令安装upt及其所有后端:
$ pip install upt[backends]
您也可以通过运行以下命令安装upt及其所有前端和后端:
$ pip install upt[frontends,backends]
用法
您可以通过运行获得帮助:
$ upt --help
upt使用前端收集有关包的数据并编写包 使用后端定义。您可以列出所有已安装的前端和 运行的后端:
$ upt list-frontends
cpan
pypi
$ upt list-backends
guix
openbsd
将请求库打包到 Pypi用于GNU guix,只需写:
$ upt package --frontend pypi --backend guix requests
或者,使用较短的选项:
$ pip install upt
0
您还可以递归地打包它的所有要求:
$ pip install upt
1
包定义将写入标准输出。
发动机罩下
安装软件包的地方有两种:
- 特定于语言的包存储库(cpan、cran、ctan、hackage、npm、pypi, rubygems等)
- 传统的、与语言无关的包管理器(适用于debian,dnf适用于 fedora、nix、guix、pkgsrc、openbsd端口等)
前者提供的包通常也打包在后者中。 由于打包是一项单调而重复的任务,打包人员已经编写了工具 为了帮助他们这样做:guix有"guix导入",一个脚本集合 解析cpan、pypi和其他特定于语言的包存储库 生成一个guix包定义;debian有pypi2deb等工具, NPM2DEB…基于RPM的发行版和其他操作系统也是如此 系统:
我们来谈谈皮皮。似乎每个发行版都有 将拥有)一个解析pypi的工具。无论分配是什么(Debian, fedora,guix…,解析pypi基本上总是一样的:它只是 正在读取json文档。但此代码不在发行版之间共享, 这意味着他们最终都会写同样的代码。同样的道理 对于其他语言特定的包管理器。
特定于发行版的代码通常在不同的 所述分发提供的工具。编写openbsd端口总是涉及 创建一个目录,将维护者的名字写入makefile,等等。 操作对所有包都是通用的:它们不应该重写 openbsd开发人员最终可能会使用每一个工具。同样的道理 对于Debian:创建Debian包涉及很多操作 真正针对正在打包的软件。
我们还可以注意到,所有这些工具都有自己的接口:packagers 使用多个包存储库和/或多个分发版 因此,必须使用不同的界面来执行类似的任务。
通用打包工具(UPT)旨在为软件包维护人员提供 统一的cli,利用模块化基础架构的强大功能,旨在 尽可能多地分解代码。upt是项目的"核心"。它暴露 一个cli和一个小的python库,它定义了 包装。有两种物体与upt交谈:
- 前端,解析包存储库并返回有关 使用UPT的内部表示的给定包;
- 后端,将包的内部表示转换为有效的 语言不可知包管理器的包定义。
这基本上是其他常用工具所做的:gcc 编译器的前端用于语言,后端用于CPU 建筑。类似地,pandoc可以从 一种标记语言与另一种标记语言之间使用不同的前端和后端。
$ pip install upt
2
在这里,我们可以看到,使用upt pypi upt cpan的前端,upt能够 检索有关托管在cpan上的包的信息 pypi。然后,使用 upt guix后端,它可以生成 适合于gnu guix的包定义;使用 upt openbsd后端可以 生成适合于OpenBSD端口的生成文件。
使用这种模块化方法,我们解决了两个问题:
- 我们只需要一个pypi解析器,一个cpan解析器等。
- 每个发行版只有一个后端。后端不会是真正的 语言不可知:python包的构建系统将不同 例如,ruby包。尽管如此,很多代码还是可以分解为: 创建所需的目录,编写一些通用元数据…
最后但并非最不重要的是,前端和后端不是upt核心项目的一部分。 每一个后端,每一个前端都是一个独立的项目 存储库,由其自己的团队编写。这样,没人能控制全部 项目,不同的社区可能会做出不同的技术选择(测试 工具、编码标准、版本控制系统……)无需强制 其他人都有。
对upt的贡献
您可以将补丁发送到tipecaml@gmail.com或打开一个pull 请求,
你的补丁不应该破坏任何东西,所以,在发送它们之前,一定要 运行:
$ pip install upt
3
您可能还希望为其中一个前端/后端做出贡献:它们是 单独的项目,所以您不应该将补丁发送到upt。
添加前端或后端
使用CookieCutter的新前端/后端
您可以使用 库克科特。这也会写 编写一些代码并创建第一个git提交,包括需要获得的所有内容 起动。只需键入:
$ pip install upt
4
回答屏幕上提示的问题。接下来的两部分描述 前端和后端的结构。
添加前端
setup.cfg应该使用一个入口点,如下所示:
$ pip install upt
5
或者,如果要使用setup.py:
$ pip install upt
6
现在让我们看看前端的实现:
$ pip install upt
7
这里最有趣的方法是myfrontendparser.parse。它必须返回 package对象(如果 希望)。只有包名及其版本必须传递给构造函数, 所有其他字段都是可选的。
添加后端
setup.cfg应该使用一个入口点,如下所示:
$ pip install upt
8
或者,如果要使用setup.py:
$ pip install upt
9
现在让我们看看后端:
$ python setup.py install
0
日志记录
无论是编写前端还是后端,都可以使用提供的记录器 通过upt运行:
$ python setup.py install
1
请参阅日志模块 文档了解有关 如何使用此记录器。
已知前端和后端
支持的前端
请告诉我们你的前端!
支持的后端
请告诉我们你的后端!
兼容性
<表><广告>类似项目
通用工具
fpm(effing package management)是一个工具 与upt非常相似。它可以将pypi/rubygems/etc中的包转换成包 对于debian/fedora/etc,它具有一个统一的命令行接口 所有目标分布的行为,以及模块化设计。
与upt的主要区别在于它不生成 包,而不是可安装的包:它将生成一个deb文件,而不是 不是Debian/目录,而是RPM文件,而不是spec文件等。请参见 对错误的评论 跟踪器 了解更多信息。
每个分发工具
下面是一些用于将包从特定于语言的存档转换为 适合于通用包管理器的包。我们可以看到,gnu guix,netbsd和 openbsd决定编写一个工具,因此 一个统一的cli来访问所有上游包。
<表><广告>许可证
此项目在3-clause bsd下分发 许可证。请参阅许可证文件。