我正在尝试setuptools
打包一个依赖 gsettings 来存储和检索用户偏好的 Python 应用程序。但是我之前没有使用过该工具,我不确定如何使用该setup.py
脚本来指示它安装和编译架构。
答案1
将您的架构添加到
setup.py
setup(..., data_files=[('/usr/share/glib-2.0/schemas', ['filename.schema.xml'])] )
添加系统调用
setup.py
来运行:glib-compile-schemas /usr/share/glib-2.0/schemas
正如 ntc2 在下面评论的那样,当使用自定义安装路径时,这将失败,例如--user
。
- 一种可能的解决方案是使用相对路径
share/glib-2.0/schemas
,这也意味着glib-compile-schemas
使用sys.prefix
变量重建命令的输入文件夹路径。
答案2
您可以在 中运行glib-copmile-schemas
自定义install_data
子类setup.py
。例如,我们在 中执行的操作如下fluxgui 的setup.py
:
from distutils.core import setup
from distutils.log import info
import distutils.command.install_data, os.path
# On Ubuntu 18.04 both '/usr/local/share/glib-2.0/schemas' (global
# install) and '~/.local/share/glib-2.0/schemas' (local '--user'
# install) are on the default search path for glib schemas. The global
# search paths are in '$XDG_DATA_DIRS'.
gschema_dir_suffix = 'share/glib-2.0/schemas'
data_files = [<other data files>,
(gschema_dir_suffix, ['apps.fluxgui.gschema.xml'])]
class install_data(distutils.command.install_data.install_data):
def run(self):
# Python 3 'super' call.
super().run()
# Compile '*.gschema.xml' to update or create 'gschemas.compiled'.
info("compiling gsettings schemas")
# Use 'self.install_dir' to build the path, so that it works
# for both global and local '--user' installs.
gschema_dir = os.path.join(self.install_dir, gschema_dir_suffix)
self.spawn(["glib-compile-schemas", gschema_dir])
setup(<other setup args>,
cmdclass = {'install_data': install_data})