2009-02-01 9 views
9

В настоящее время я использую автоинструменты для сборки/установки и упаковки моего проекта, но мне бы хотелось перейти к чему-то, что кажется более «питоническим».Как распространять файлы .desktop` и значки для пакета Python в Gnome (с distutils или setuptools)?

Мой проект состоит из двух сценариев, одного модуля, двух описаний графического интерфейса Glade и двух файлов .desktop. В настоящее время это чистый проект python, хотя это, скорее всего, изменится в ближайшее время.

Глядя на setuptools, я могу легко видеть, как бороться со всем, кроме файлов .desktop; они должны попасть в конкретный каталог, чтобы Gnome мог их найти.

С помощью динуил/setuptools есть хорошая идея для начала?

ответ

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, где помещается файл яйца, а не в указанные папки, поэтому они не могут быть доступны оболочке рабочего стола.

Чтобы обойти эту проблему, я использовал следующий setup.cfg файл:

[install] 
single-version-externally-managed=1 
record=install.txt 

Это работает. Оба файла данных создаются в нужном месте, а файл .desktop распознается Gnome.

+1

Это хороший старт, но не работает с --user, так как/usr/bin должен быть жестко закодирован для Exec в файле .desktop , Вы можете оставить путь, но тогда он должен быть в $ PATH среды рабочего стола, в которой ~/.local/bin обычно нет. Кроме того, обратите внимание, что для IPP не требуется отдельная версия с внешним управлением, поскольку она не использует яйца. – jwelsh

1

В общем, да - все лучше, чем autotools при создании проектов Python.

У меня есть хороший опыт установки setuptools. Однако установка файлов в фиксированные местоположения - это не сила setuptools. В конце концов, это не то, что нужно для сборки инсталляторов для приложений Python, а для распространения библиотек Python.

Для установки файлов, которые не являются файлами данных приложения (например, изображениями, файлами пользовательского интерфейса и т. Д.), Но для интеграции в операционную систему вам лучше использовать реальный формат упаковки (например, RPM или deb).

Тем не менее, ничто не мешает вам создать процесс сборки на основе setuptools и небольшой файл make для установки всего в его законное место.

+0

Итак, вы говорите, что нет ничего пифонического для создания/упаковки приложений, написанных на python? Это немного разочаровывает. – Magnus

+1

Приложения для упаковки зависят от операционной системы, а не от языка программирования. Пакет приложений (с установщиком и т. Д.) В Windows должен выполнять различные требования, чем пакет .deb или приложение Mac OS X. –

+0

Упаковка для операционной системы значительно упрощается путем выбора хорошей среды сборки. Многие среды сборки также удваиваются как упрощенные системы упаковки, часто только исходные, например. автоматические инструменты, distutils, рубиновые драгоценные камни, ... может быть, «система распределения» - лучший термин. – Magnus

1

Вы можете использовать python-distutils-extra. DistUtilsExtra.auto модуля автоматически supports .desktop файлов, а также ПОЛЯНА/GtkBuilder .ui файлы, модули и скрипты Python, файлы данные разных и т.д.

Он должен работать как с Distutils и Setuptools.

1

Я создал https://pypi.python.org/pypi/install-freedesktop. Он автоматически создает файлы .desktop для точек входа gui_scripts, которые можно настроить с помощью аргумента настройки и поддерживает --user, а также общесистемную установку.По сравнению с DistUtilsExtra, он более узкий по охвату и IMHO больше pythonic (явный лучше, чем неявный).