Python¶
使用受支持的构建系统(如Meson,CMake或Autotools)的Python应用程序可以使用标准方法构建。 但是,许多Python应用程序使用自定义安装脚本,或者希望通过Setuptools和``pip`` 安装。
对于这些情况,flatpak-builder
提供了 simple
构建系统。和自动化构建过程不同, simple
接受一个 build`-commands
的字符数组,将按顺序执行。
举个例子,用如下的JSON构建流行的模块非常简单:
{
"name": "requests",
"buildsystem": "simple",
"build-commands": [
"pip3 install --prefix=/app --no-deps ."
],
"sources": [
{
"type": "archive",
"url": "https://files.pythonhosted.org/packages/source/r/requests/requests-2.18.4.tar.gz",
"sha256": "9c443e7324ba5b85070c4a818ade28bfabedf16ea10206da1132edaa6dda237e"
}
]
}
这里,build-commands
是一个数组,包含了构建和安装模块的命令。可以看到,在这种情况下 pip
被用来安装模块。--prefix=/app
选项很重要,因为原本 pip
会尝试将模块安装到 /usr/
目录下,又由于 /usr/
在沙箱中是挂载为只读的,安装会失败。
注意 --no-deps
仅仅用于实例——一旦依赖的模块有它自己的依赖,构建就会失败。如果存在许多依赖,最好是用下一章节的方法来安装。
构建多个python依赖¶
尽管上述的例子被安装了,它实际上也不能正常运行。正式因为它有大量的依赖没有安装:
- certifi
- chardet
- idna
- urllib3
四个依赖不是很多,可以用上述的 simple
的方法来安装。但是,任何比这个复杂的很快都会变得冗长。
在这种情况下,flatpak-pip-generator 可以用来产生必要的清单JSON。这是一个Python脚本,可以获取包名和使用``pip``来确定依赖,以及依赖包的压缩包URL和hashes值。
使用 flatpak-pip-generator
是简单的:
$ python3 flatpak-pip-generator requests
这将输出一个名为 python3-requests.json
的文件,包含了必要的清单JSON,这个JSON可以放在应用的清单文件里。