kar*_*lip 15 python packages cmake deb cpack
到目前为止,我的项目只有.cpp 文件被编译成不同的二进制文件,我设法配置CPack来构建一个正确的debian包,没有任何问题.
最近我写了几个python应用程序并将它们添加到项目中,以及一些我想要合并到包中的自定义模块.
编写setup.py脚本之后,我想知道如何将这些文件添加到CPack配置中,setup.py以便在用户在系统上安装软件包时自动执行dpkg -i package.deb.
我很难找到有关如何配置CPack以安装自定义python应用程序/模块的相关信息.有没人试过这个?
kar*_*lip 13
我想出了一种方法,但这不是很简单.我会尽力解释这个程序,所以请耐心等待.
在定义项目的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)
Run Code Online (Sandbox Code Playgroud)
其中一些变量是可选的,但我正在填写信息用于教育目的.
现在,我们来看看脚本:
postinst:
#!/bin/sh
# postinst script for fake_python_app
set -e
cd /usr/share/pyshared/fake_package
sudo python setup.py install
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
如果你注意到,脚本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"
)
Run Code Online (Sandbox Code Playgroud)
你可以告诉我,除了我要安装的python应用程序之外,还有我编写的2个自定义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']
)
Run Code Online (Sandbox Code Playgroud)
_ init _.py:是一个空文件.
fake_python_app:将安装在/ usr/local/bin中的python应用程序
这就是它!
| 归档时间: |
|
| 查看次数: |
3713 次 |
| 最近记录: |