단일 Python 스크립트에 대한 deb 패키지를 어떻게 생성합니까?

단일 Python 스크립트에 대한 deb 패키지를 어떻게 생성합니까?

deb 패키지로 배포하려는 단일 Python 스크립트가 있습니다. 이것은지시자Unity 패널에 현지 날짜가 표시됩니다. 나는 따라갔다스크립트나 바이너리에서 .deb 패키지 생성하지만 실패했기 때문에 deb 패키지를 만들 수 없습니다.

내가 무엇을 해야 하는지 단계별 지침을 줄 수 있는 사람이 있나요? 내가 아는 한 이 스크립트는 python-appindicator.

메모:
Debian/Ubuntu 패키징 지침에 대한 링크를 원하지 않습니다. 나는 그들 중 대부분을 보았습니다. 나는 그들이 초보자에게 친숙하지 않다고 생각합니다.

답변1

다음은 Python 스크립트의 소스 패키지가 어떻게 보이는지에 대한 기본 예입니다. 대부분의 패키징 튜토리얼은 약간 복잡하지만 문제가 발생하면 정말 도움이 될 수 있습니다. 즉, 나는 데비안 패키지를 보면서 처음으로 데비안 패키징의 기본을 배웠습니다. apt-get source비슷한 것을 예를 통해 배우십시오.

기본 소스 패키지 레이아웃은 다음과 같습니다.

my-script/
    -- myScript
    -- debian/
        -- changelog
        -- copyright
        -- compat
        -- rules
        -- control
        -- install

dch --create디렉토리에서 실행하여 올바른 형식의 debian/changelog항목을 생성하십시오.

데비안/저작권다음과 같아야 합니다:

Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: myScript
Upstream-Contact: Name, <email@address>

Files: *
Copyright: 2011, Name, <email@address>
License: (GPL-2+ | LGPL-2 | GPL-3 | whatever)
 Full text of licence.
 .
 Unless there is a it can be found in /usr/share/common-licenses

데비안/호환다음과 같을 수 있습니다:7

데비안/규칙:

#!/usr/bin/make -f

%:
    dh $@ --with python2

앞에 "탭"이 있어야 합니다. dh $@ --with python2, 공백이 아닙니다.

참고: Python2는 더 이상 사용되지 않습니다. 단일 Python 파일의 경우 dh $@(없이 --with python)만 작동합니다.

데비안/제어:

Source: my-script
Section: python
Priority: optional
Maintainer: Name, <email@address>
Build-Depends: debhelper (>= 7),
               python (>= 2.6.6-3~)
Standards-Version: 3.9.2
X-Python-Version: >= 2.6


Package: my-script
Architecture: all
Section: python
Depends: python-appindicator, ${misc:Depends}, ${python:Depends}
Description: short description
 A long description goes here.
 .
 It can contain multiple paragraphs

데비안/설치:

myScript usr/bin/

이 파일은 어떤 파일이 어떤 폴더에 설치될 것인지를 나타냅니다.

이제 다음을 사용하여 빌드하세요.debuild --no-tgz-check

그러면 기능적인 deb 패키지가 생성됩니다. Lintian은 orig.tar.gz가 없다는 점에 대해 몇 가지 경고를 던질 예정이지만, tarball 릴리스를 만드는 적절한 업스트림 프로젝트를 만들 계획이 아니라면 지금은 이를 무시하는 것이 좋습니다.

답변2

  1. 집에 임의의 이름으로 폴더를 만듭니다. 예: mypyscript
  2. 폴더를 열고 이름이 'DEBIAN' 및 'usr'인 두 개의 폴더를 만듭니다.
  3. DEBIAN 폴더를 엽니다. 거기에 'control'이라는 이름의 텍스트 파일(확장자 없음)을 만듭니다.
  4. 'control'을 열고 다음과 같이 입력한 후 DEBIAN에 저장합니다.

    Package: mypyscript
    Version: 0.01
    Architecture: all
    Maintainer: your name<your mail id>
    Installed-Size: 2
    Depends: python-appindicator
    Section: extras
    Priority: optional
    Homepage: your homepage
    Description: describe
    
  5. mypyscript라는 폴더로 돌아갑니다. 'usr'을 엽니다. 'bin'이라는 폴더를 만듭니다. 'bin'을 열고 거기에 Pythonscript 파일을 붙여넣습니다.

  6. 메뉴 항목을 만들 수도 있습니다. 그러나 그것은 필수적인 것은 아닙니다.
  7. 'mypyscript' 폴더가 있는 홈 폴더로 돌아가거나 파일 브라우저를 닫습니다.
  8. 터미널을 엽니다. 터미널이 홈 폴더에 있는지 확인하십시오. 을 입력한 다음 dpkg -b mypyscriptEnter를 누르세요. 몇 초 만에 deb 패키지가 준비됩니다.

메모:'control' 파일을 제대로 채워주세요. 아포스트로피를 사용하지 마세요. 이름을 표시하는 용도로만 사용됩니다.

답변3

.deb단일 Python 3 스크립트에서 패키지 만들기 (2021년 업데이트)

이 답변은 다른 답변에 비해 길어 보일 것입니다. 그러나 허용되는 답변과 달리 Python 3 및 2021에서는 작동합니다. 또한 모든 요구 사항을 포함하기 때문에 많은 경고가 생성되지 않습니다. 페이지 처럼요 man.

단일 Python 3 스크립트에서 Debian 패키지(예, Ubuntu에서 작동함)를 만드는 방법은 다음과 같습니다. 먼저 스크립트를 만들어 보겠습니다. 간단한 hello-world 프로그램이 될 것입니다. 이 파일의 이름을 hello-world. 이라는 폴더 안에 넣어주세요 hello-world-1.0.0. hello-world-1.0.0폴더를 이라는 두 번째 폴더 안에 넣으세요 work. 하지만 여기의 디렉토리 구조는 약간... 이상합니다. debuild(패키지를 빌드하는 데 사용하는 도구)는 .deb파일을 빌드한 위치에서 한 디렉터리 위에 파일을 배치하므로 디렉터리 구조는 다음과 같습니다.

이제부터는 달리 언급하지 않는 한 귀하가 해당 work/hello-world-1.0.0디렉토리에 있다고 가정하겠습니다.

work/
├─ hello-world-1.0.0/
│  ├─ hello-world

데비안은 패키지 이름에 밑줄을 원하지 않기 때문에 파일 이름에 밑줄이 아닌 하이픈을 사용했습니다. 파일 확장자도 생략했습니다. 스크립트 상단에 shebang을 추가했기 때문에 괜찮습니다.

다음은 제가 예로 사용할 Python 스크립트입니다. 위에서 언급했듯이 hello-world파일 확장자 없이 이름이 지정됩니다 .

#!/usr/bin/env python3
def hello_world():
    print("Hello world!")

if __name__ == "__main__":
    hello_world()

보다이 스택 오버플로 질문무슨 if __name__ = "__main__:"뜻인지. Shebang은 다음과 같이 포함됩니다.이 질문.

먼저, 코드를 실행하여 코드가 작동하는지 확인하세요.

$ chmod +x ./hello-world
$ ./hello-world
Hello world!

파일 을 빌드하려면 , , , 및 패키지가 설치되어 .deb있어야 합니다 . 나는 이러한 패키지 중 일부가 사전 설치되어 있다는 것을 알고 있지만 이 가이드가 데비안에서도 작동하기를 원했기 때문에 여기에 포함했습니다. 다음 명령을 사용하여 설치할 수 있습니다.gitdevscriptsbuild-essentiallintianpandoc

sudo apt-get update
sudo apt-get install git devscripts build-essential lintian pandoc

폴더 안에 hello-world-1.0.0이라는 폴더를 만듭니다 debian. 그 안에 이라는 폴더를 만듭니다 source. 또한 폴더 내에 직접 debian다음 파일을 만듭니다 changelog. compat, control, copyright, install, 및 rules. debian/source폴더 안에 format.

이제 디렉터리 트리는 다음과 같아야 합니다.

work/
├─ hello-world-1.0.0/
│  ├─ debian/
│  │  ├─ source/
│  │  │  ├─ format
│  │  ├─ changelog
│  │  ├─ compat
│  │  ├─ control
│  │  ├─ copyright
│  │  ├─ install
│  │  ├─ rules
│  ├─ hello-world

이제 이 파일의 내용을 살펴보겠습니다. 나는 당신이 폴더에 직접 있다고 가정합니다 hello-world-1.0.0.

debian/source/format

이 내용은 대부분 무시해도 되지만 궁금하신 경우에는 다음 페이지에 설명되어 있습니다.§5.22데비안 문서에서.

3.0 (native)

debian/changelog

이 파일에는 프로그램의 변경 로그가 포함되어 있습니다 hello-world.

hello-world (1.0.0) unstable; urgency=medium

    * Initial release:
 -- John Doe <[email protected]>  Sun, 28 Nov 2021 10:18:51 -0800

debian/compat

호환성 수준을 설정합니다 debhelper. 보다§5.2데비안 문서에서

10

debian/control

이는 apt패키지 관리에 사용되는 도구와 같은 다양한 값을 설정합니다. 보다§4.1데비안 문서에서

Source: hello-world
Section: python
Maintainer: John Doe <[email protected]>
Build-Depends: debhelper (>= 7),
               python3 (>= 3.5)
Standards-Version: 4.5.1
Priority: optional

Package: hello-world
Architecture: all
Section: python
Depends: python3 (>=3.5), ${misc:Depends}
Description: A simple hello-world program to demenstrate how to package a
 Python 3 script as a deb file

debian/copyright

이 파일에는 소스코드의 저작권 및 라이센스에 대한 정보가 포함되어 있습니다. 여기서는 코드가 MIT 라이센스를 따른다고 가정합니다. 필요에 따라 이를 변경합니다. 보다§4.2데비안 문서에서

Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/

Files: *
Copyright: 2021 John Doe <[email protected]>
License: MIT-License

Files: debian/*
Copyright: 2021 John Doe <[email protected]>
License: MIT-License

License: MIT-License
 MIT License
 .
 Copyright (c) 2021 John Doe
 .
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
 in the Software without restriction, including without limitation the rights
 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 copies of the Software, and to permit persons to whom the Software is
 furnished to do so, subject to the following conditions:
 .
 The above copyright notice and this permission notice shall be included in all
 copies or substantial portions of the Software.
 .
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.

debian/install

이 파일은 패키지의 어디에 설치될 파일을 제어합니다. 보다§5.11데비안 문서에서

hello-world usr/bin/
hello-world.1 usr/share/man/man1/

debian/rules

이것이 데비안이 패키지를 빌드하는 방법입니다. 보다§4.4데비안 문서에서. 주의 사항: 다른 Makefile과 마찬가지로 탭을 사용하여 들여쓰기하세요. 공백은 작동하지 않습니다.

#!/usr/bin/make -f

%:
    dh $@

우리의 멋진 hello-world패키지에는 페이지가 있어야 합니다 man. 그러나 매뉴얼 페이지의 형식은 복잡하고 읽기 어렵습니다. 따라서 대신 Markdown으로 매뉴얼 페이지를 작성하고 pandoc이를 변환해 보겠습니다.

기본 디렉터리(즉, hello-world-1.0.0폴더 바로 내부) 에 hello-world.1.md. 파일 안에 다음을 넣으세요.

% hello-world(1) hello-world 1.0.0
% John Doe
% November 2021

# NAME
hello-world - Prints a file until a null-character is reached

# SYNOPSIS
**hello-world** [*options*]

# DESCRIPTION
**hello-world** prints a file character-by-character until a null character is reached. The null character will not be printed

# OPTIONS

# EXAMPLES
**hello-world**
: Prints the text "Hello world!", followed by a newline, to the screen.

이 패키지와 패키지를 빌드하려면 몇 가지 단계가 필요합니다. 대신에 (Bash) 스크립트를 만들어 보겠습니다. 이라는 파일을 만듭니다 build. 실행 가능하게 만드십시오 chmod +x ./build. 파일에 다음을 넣습니다.

#!/usr/bin/env bash
pandoc hello-world.1.md -s -t man > hello-world.1
debuild --no-tgz-check -uc -us

그러면 매뉴얼 페이지가 생성되어 hello-world.1. 그런 다음 패키지를 빌드합니다. -uc -us GPG 키로 서명하지 않는다는 의미는 복잡하기 때문입니다 . 스크립트( ./build)를 실행하고 모두 잘 진행되면 상위 디렉터리에 생성된 패키지가 있을 것입니다 work.

답변4

빠르게 확인하겠습니다. 빠른 앱을 만들고 Google에서 debs를 생성하는 데 좋습니다. 또는 여기에서 튜토리얼을 찾을 수 있습니다.http://developer.ubuntu.com/

관련 정보