目前我正在使用自动工具来构建/安装和打包我的项目,但我真的想转向感觉更“pythonic”的东西。
我的项目包含两个脚本,一个模块,两个glade GUI描述和两个.desktop文件。它目前是一个纯粹的python项目,尽管很快就会改变。
查看setuptools我可以很容易地看到如何处理除.desktop文件之外的所有内容;他们必须最终进入一个特定的目录,以便Gnome能够找到它们。
开始使用distuils / setuptools是一个好主意吗?
答案 0 :(得分:4)
我设法让它发挥作用,但我觉得更像是解决方法。
不知道处理这个问题的首选方法是什么......
我使用了以下setup.py
文件(完整版本为here):
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
放在一个egg文件而不是指定的文件夹中,因此桌面shell无法访问它们。
要解决此问题,我使用了以下setup.cfg
文件:
[install]
single-version-externally-managed=1
record=install.txt
这很有效。两个数据文件都在正确的位置创建,而.desktop
文件由Gnome识别。
答案 1 :(得分:1)
总的来说,是的 - 在构建Python项目时,一切都比autotools好。
到目前为止,我对setuptools有很好的经验。但是,将文件安装到固定位置并不是setuptools的强项 - 毕竟,它不是为Python应用程序构建安装程序,而是分发Python库。
对于安装非应用程序数据文件(如图像,UI文件等)但提供操作系统集成的文件,最好使用真正的打包格式(如RPM或deb)。
也就是说,没有什么可以阻止你使用基于setuptools的构建过程和一个小的make文件来将所有内容安装到正确的位置。
答案 2 :(得分:1)
您可以尝试使用python-distutils-extra。 DistUtilsExtra.auto
模块自动supports .desktop文件,以及Glade / GtkBuilder .ui文件,Python模块和脚本,misc数据文件等。
它应该与Distutils和Setuptools一起使用。
答案 3 :(得分:1)
我创建了https://pypi.python.org/pypi/install-freedesktop。它为gui_scripts入口点自动创建.desktop文件,可以通过设置参数进行自定义,并支持--user
以及系统范围的安装。与DistUtilsExtra
相比,它的范围更窄,恕我直言更加pythonic(显式优于隐式)。