15

これまで、私のプロジェクトには異なるバイナリにコンパイルされた.cpp ファイルしかなく、問題なく適切なdebianパッケージを構築するようにCPackを構成することができました。

最近、いくつかのPythonアプリケーションを作成してプロジェクトに追加しました。また、パッケージに組み込みたいカスタムモジュールもいくつか追加しました。

スクリプトを作成した後、ユーザーが。を使用してシステムにパッケージをインストールしたときに自動的に実行されるようsetup.pyに、これらのファイルをCPack構成に追加する方法を考えています。setup.pydpkg -i package.deb

カスタムPythonアプリケーション/モジュールをインストールするようにCPackを構成する方法に関する関連情報を見つけるのに苦労しています。誰かがこれを試しましたか?

4

2 に答える 2

13

私はそれを行う方法を考え出しましたが、それはそれほど単純ではありません。手順を説明するために最善を尽くしますので、しばらくお待ちください。

このアプローチの考え方は、postinstprermを使用して、Pythonアプリケーションをシステムにインストールおよび削除することです。

プロジェクトを定義するCMakeLists.txtで、CPACKを使用して.debパッケージを生成することを指定する必要があります。パッケージ自体に関連する情報を入力する必要のある変数がいくつかありますが、名前が付けられたものは、 postinstprermCPACK_DEBIAN_PACKAGE_CONTROL_EXTRAの場所を指定するために使用されるため、非常に重要です。これらは、 dpkgによって自動的に実行されるdebianパッケージングシステムの標準スクリプトです。パッケージがインストール/削除されます。

メイン のある時点で、次の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はそこにある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アプリケーションの他に、私が作成した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']
     )

_ init _.py:は空のファイルです。

fake_python_app:/ usr / local/binにインストールされるPythonアプリケーション

そして、それはほとんどそれです!

于 2011-10-27T16:06:57.377 に答える
0

setup.pyファイルは、標準のUNIXソースディストリビューションのダンスに相当するためconfigure && make && make install、ディストリビューションパッケージのインストールプロセスの一部として実行するには不適切です。Pythonモジュールをパッケージに含めるさまざまな方法についてのこの説明を参照してください。.deb

于 2011-09-06T13:53:54.797 に答える