我想出了一种方法来做,但这不是很简单。我会尽力解释该过程,因此请耐心等待。
这种方法的想法是使用 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_appset -ecd /usr/share/pyshared/fake_packagesudo python setup.py install
prerm :
#!/bin/sh# prerm script## Removes all files installed by: ./setup.py installsudo rm -rf /usr/share/pyshared/fake_packagesudo rm /usr/local/bin/fake_python_app
如果您注意到了,脚本 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应用程序外,我还编写了2个自定义python模块,这些模块也需要安装。下面,我描述最重要的文件的内容:
setup.py :
#!/usr/bin/env pythonfrom distutils.core import setupsetup(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 :将安装在/ usr / local / bin中的python应用程序
就是这样!



