Как построить пакет debian с CPack для выполнения setup.py?

До сих пор в моем проекте были только файлы .cpp, которые были скомпилированы в разные двоичные файлы, и мне удалось настроить CPack для создания надлежащего debian-пакета без каких-либо проблем.

Недавно я написал несколько приложений python и добавил их в проект, а также некоторые пользовательские модули, которые я также хотел бы включить в пакет.

  • Деинсталляция пакета с помощью «pip» также удаляет зависимые пакеты?
  • Как написать хороший / правильный пакет __init__.py
  • Установка пакетов Python в Windows
  • Пакеты Python - импорт по классам, а не файл
  • Как сделать пакет python, содержащий только шаблоны jinja
  • Как ссылаться на модуль верхнего уровня в Python внутри пакета?
  • После написания сценария setup.py мне интересно, как добавить эти файлы в конфигурацию CPack так, чтобы setup.py get выполнялся автоматически, когда пользователь устанавливает пакет в системе с помощью dpkg -i package.deb .

    Я пытаюсь найти релевантную информацию о том, как настроить CPack для установки пользовательских приложений / модулей python. Кто-нибудь пробовал это?

  • У меня есть 2 версии python, но cmake использует более старую версию. Как заставить cmake использовать более новую версию?
  • Установка пакетов Python в Windows
  • Пакеты Python - импорт по классам, а не файл
  • Поддерживает ли CMake Python3?
  • Структура пакета Python
  • Как обновить пакет Python?
  • 2 Solutions collect form web for “Как построить пакет debian с CPack для выполнения setup.py?”

    Я понял способ сделать это, но это не очень просто. Я сделаю все возможное, чтобы объяснить процедуру, поэтому, пожалуйста, будьте терпеливы.

    Идея этого подхода заключается в использовании postinst и prerm для установки и удаления приложения python из системы.

    В CMakeLists.txt, который определяет проект, вам нужно указать, что CPACK будет использоваться для создания пакета .deb . Есть некоторые переменные, которые необходимо заполнить информацией, связанной с самим пакетом, но один из них с именем CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA очень важен, поскольку он используется для указания местоположения postinst и prerm , которые являются стандартными сценариями системы упаковки debian , которые автоматически выполняются dpkg когда пакет установлен / удален.

    В какой-то момент вашего основного CMakeLists.txt вас должно быть что-то вроде этого:

     add_subdirectory(name_of_python_app) set(CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE 1) set(CPACK_PACKAGE_NAME "fake-package") set(CPACK_PACKAGE_VENDOR "ACME") set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "fake-package - brought to you by ACME") set(CPACK_PACKAGE_VERSION "1.0.2") set(CPACK_PACKAGE_VERSION_MAJOR "1") set(CPACK_PACKAGE_VERSION_MINOR "0") set(CPACK_PACKAGE_VERSION_PATCH "2") SET(CPACK_SYSTEM_NAME "i386") set(CPACK_GENERATOR "DEB") set(CPACK_DEBIAN_PACKAGE_MAINTAINER "ACME Technology") set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.3.1-6), libgcc1 (>= 1:3.4.2-12), python2.6, libboost-program-options1.40.0 (>= 1.40.0)") set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_SOURCE_DIR}/name_of_python_app/postinst;${CMAKE_SOURCE_DIR}/name_of_python_app/prerm;") set(CPACK_SET_DESTDIR "ON") include(CPack) 

    Некоторые из этих переменных являются необязательными , но я заполняю их информацией для образовательных целей.

    Теперь давайте посмотрим на скрипты:

    postinst :

     #!/bin/sh # postinst script for fake_python_app set -e cd /usr/share/pyshared/fake_package sudo python setup.py install 

    prerm :

     #!/bin/sh # prerm script # # Removes all files installed by: ./setup.py install sudo rm -rf /usr/share/pyshared/fake_package sudo rm /usr/local/bin/fake_python_app 

    Если вы заметили, скрипт postinst входит в /usr/share/pyshared/fake_package и выполняет setup.py, который /usr/share/pyshared/fake_package там, чтобы установить приложение в систему. Откуда появился этот файл и как он заканчивается? Этот файл создается вами и будет скопирован в это место, когда ваш пакет будет установлен в системе. Это действие настраивается в name_of_python_app/CMakeLists.txt :

     install(FILES setup.py DESTINATION "/usr/share/pyshared/fake_package" ) install(FILES __init__.py DESTINATION "/usr/share/pyshared/fake_package/fake_package" ) install(FILES fake_python_app DESTINATION "/usr/share/pyshared/fake_package/fake_package" ) install(FILES fake_module_1.py DESTINATION "/usr/share/pyshared/fake_package/fake_package" ) install(FILES fake_module_2.py DESTINATION "/usr/share/pyshared/fake_package/fake_package" ) 

    Как вы, вероятно, можете сказать, помимо приложения python, которое я хочу установить, есть также два настраиваемых модуля python, которые я написал, которые также необходимо установить. Ниже я описываю содержимое наиболее важных файлов:

    setup.py :

     #!/usr/bin/env python from distutils.core import setup setup(name='fake_package', version='1.0.5', description='Python modules used by fake-package', py_modules=['fake_package.fake_module_1', 'fake_package.fake_module_2'], scripts=['fake_package/fake_python_app'] ) 

    _ init _.py : это пустой файл.

    fake_python_app : ваше приложение python, которое будет установлено в / usr / local / bin

    И это в значительной степени!

    Файл setup.py эквивалентен configure && make && make install dance для стандартного дистрибутива исходного кода unix и поэтому не подходит для запуска как часть процесса установки пакета дистрибутивов. См. Это обсуждение различных способов включения модулей Python в пакет .deb .

    Python - лучший язык программирования в мире.