Ответ 1
Я понял способ сделать это, но это не очень просто. Я сделаю все возможное, чтобы объяснить процедуру, поэтому, пожалуйста, будьте терпеливы.
Идея этого подхода заключается в использовании 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
Если вы заметили, script postinst входит в /usr/share/pyshared/fake_package
и выполняет setup.py, который кладется там, чтобы установить приложение в систему. Откуда появился этот файл и как он заканчивается? Этот файл создается вами и будет скопирован в это место, когда ваш пакет будет установлен в системе. Это действие настраивается в 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
И это в значительной степени!