目前我正在使用自动工具来构建/安装和打包我的项目,但我真的很想转向感觉更“pythonic”的东西。
我的项目由两个脚本、一个模块、两个 glade GUI 描述和两个 .desktop 文件组成。它目前是一个纯 python 项目,尽管这可能很快就会改变。
查看 setuptools 我可以轻松了解如何处理除 .desktop 文件之外的所有内容;它们必须最终位于特定目录中,以便 Gnome 可以找到它们。
开始使用 distuils/setuptools 是个好主意吗?
目前我正在使用自动工具来构建/安装和打包我的项目,但我真的很想转向感觉更“pythonic”的东西。
我的项目由两个脚本、一个模块、两个 glade GUI 描述和两个 .desktop 文件组成。它目前是一个纯 python 项目,尽管这可能很快就会改变。
查看 setuptools 我可以轻松了解如何处理除 .desktop 文件之外的所有内容;它们必须最终位于特定目录中,以便 Gnome 可以找到它们。
开始使用 distuils/setuptools 是个好主意吗?
我设法让它工作,但对我来说它更像是一种解决方法。
不知道处理此问题的首选方法是什么...
我使用了以下setup.py
文件(完整版在这里):
from setuptools import setup
setup(
# ...
data_files=[
('share/icons/hicolor/scalable/apps', ['data/mypackage.svg']),
('share/applications', ['data/mypackage.desktop'])
],
entry_points={
'console_scripts': ['startit=mypackage.cli:run']
}
)
启动脚本槽entry_points
有效。但是data_files
放置在一个鸡蛋文件而不是指定的文件夹中,因此桌面外壳无法访问它们。
为了解决这个问题,我使用了以下setup.cfg
文件:
[install]
single-version-externally-managed=1
record=install.txt
这行得通。这两个数据文件都是在正确的位置创建的,并且.desktop
文件被 Gnome 识别。
一般来说,是的——在构建 Python 项目时,一切都比自动工具好。
到目前为止,我在 setuptools 方面有很好的经验。但是,将文件安装到固定位置并不是 setuptools 的强项——毕竟,它不是为 Python 应用程序构建安装程序,而是分发 Python 库。
对于不是应用程序数据文件(如图像、UI 文件等)但提供与操作系统集成的文件的安装,您最好使用真正的打包格式(如 RPM 或 deb)。
也就是说,没有什么能阻止您使用基于 setuptools 的构建过程和一个用于将所有内容安装到正确位置的小型 make 文件。
您可以尝试使用python-distutils-extra。该DistUtilsExtra.auto
模块自动 支持.desktop 文件,以及 Glade/GtkBuilder .ui 文件、Python 模块和脚本、misc 数据文件等。
它应该适用于 Distutils 和 Setuptools。
我创建了https://pypi.python.org/pypi/install-freedesktop。它为 gui_scripts 入口点自动创建 .desktop 文件,可以通过 setup 参数进行自定义,并支持--user
系统范围的安装。与 相比DistUtilsExtra
,它的范围更窄,恕我直言,更 Pythonic(显式优于隐式)。