Como faço para criar um pacote deb para um único script python?

Como faço para criar um pacote deb para um único script python?

Eu tenho um único script python que desejo distribuir como um pacote deb. É umindicadorque mostra a data local no painel Unity. eu seguicrie um pacote .deb a partir de scripts ou bináriosmas não consegui criar um pacote deb porque ele falhou.

Alguém pode me dar uma instrução passo a passo sobre o que devo fazer? Pelo que eu sei, esse script depende do python-appindicator.

OBSERVAÇÃO:
Não quero links para instruções de empacotamento do Debian/Ubuntu. Eu vi a maioria deles. Não os considero amigáveis ​​para iniciantes.

Responder1

O que se segue é um exemplo básico de como pode ser a aparência de um pacote fonte para um script python. Embora a maioria dos tutoriais de empacotamento sejam um pouco complexos, eles podem realmente ajudar se você encontrar algum problema. Dito isto, aprendi pela primeira vez o básico do empacotamento Debian simplesmente olhando os pacotes Debian. apt-get sourcealgo semelhante e aprenda pelo exemplo.

Aqui está o layout básico do seu pacote fonte:

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

Execute dch --createno diretório para criar uma debian/changelogentrada formatada corretamente.

debian/direitos autoraisdeve ser parecido com:

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

debian/compatibilidadepode ser apenas:7

debian/regras:

#!/usr/bin/make -f

%:
    dh $@ --with python2

Observe que deve haver "tab" antes dh $@ --with python2, não espaços.

Nota: Python2 está obsoleto. Para um único arquivo python, apenas dh $@(sem --with python) funciona.

debian/controle:

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

debian/instalar:

myScript usr/bin/

Este arquivo indica qual arquivo será instalado em qual pasta.

Agora construa-o comdebuild --no-tgz-check

Isso criará um pacote deb funcional. Lintian lançará alguns avisos sobre a falta de um orig.tar.gz, mas a menos que você planeje criar um projeto upstream adequado que faça lançamentos de tarball, você provavelmente desejará ignorar isso por enquanto.

Responder2

  1. crie uma pasta com qualquer nome em sua casa, por exemplo: mypyscript
  2. Abra a pasta e crie duas pastas com os nomes 'DEBIAN' e 'usr'
  3. Abra a pasta DEBIAN. Crie um arquivo de texto (sem extensão) com o nome ‘control’.
  4. Abra 'control' e digite o seguinte e salve no 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. Volte para a pasta chamada mypyscript. Abra 'usr'. Crie uma pasta chamada 'bin'. Abra 'bin' e cole seu arquivo pythonscript lá.

  6. Você também pode fazer uma entrada no menu. Mas isso não é essencial.
  7. Volte para a pasta inicial onde está a pasta 'mypyscript' ou feche o navegador de arquivos.
  8. Terminal aberto. Certifique-se de que o terminal esteja na pasta inicial. digite dpkg -b mypyscript.Em seguida, pressione Enter. Em segundos seu pacote deb está pronto

observação:preencha o arquivo 'control' corretamente. Não use apóstrofos. Serve apenas para indicar os nomes.

Responder3

Fazendo um .debpacote a partir de um único script Python 3 (atualizado em 2021)

Esta resposta parecerá (e é) longa em comparação com as outras/Mas, ao contrário da resposta aceita, funcionará para Python 3 e em 2021. Além disso, não produz muitos avisos, porque inclui todos os requisitos, como uma manpágina.

Aqui está como fazer um pacote Debian (sim, funcionará no Ubuntu) a partir de um único script Python 3. Primeiro, vamos fazer o script. Será um programa simples de Olá Mundo. Dê um nome a este arquivo hello-world. Coloque-o dentro de uma pasta chamada hello-world-1.0.0. Coloque a hello-world-1.0.0pasta dentro de uma segunda pasta chamada work. A estrutura de diretórios aqui é um pouco... estranha. debuild(a ferramenta que usamos para construir o pacote) colocará o .debarquivo um diretório acima de onde o construímos, então a estrutura de diretórios ficará assim:

De agora em diante, salvo indicação em contrário, presumirei que você está no work/hello-world-1.0.0diretório.

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

Observe que usei um hífen no nome do arquivo, não um sublinhado, pois o Debian não quer sublinhados nos nomes dos pacotes. Também omiti a extensão do arquivo, o que é bom porque adicionei um shebang no topo do meu script.

Aqui está o script Python que usarei como exemplo. Conforme mencionado acima, ele é nomeado hello-world(sem extensão de arquivo).

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

if __name__ == "__main__":
    hello_world()

Veresta pergunta do Stack Overflowpara que if __name__ = "__main__:"significa. O shebang está incluído conformeessa questão.

Primeiro, certifique-se de que o código funciona executando-o:

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

Para construir o .debarquivo, você precisa dos pacotes git, devscripts, build-essential, lintiane pandocinstalados. Estou ciente de que alguns desses pacotes vêm pré-instalados, mas também queria que este guia funcionasse no Debian, então os incluí aqui de qualquer maneira. Você pode instalá-los com estes comandos.

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

Dentro da hello-world-1.0.0pasta, crie uma pasta chamada debian. Dentro dele, crie uma pasta chamada source. Também diretamente dentro da debianpasta, crie os seguintes arquivos changelog, compat, control, copyright, installe rules. Dentro da debian/sourcepasta, crie um arquivo chamado format.

Sua árvore de diretórios agora deve ficar assim

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

Agora, para o conteúdo desses arquivos. Presumo que você esteja diretamente na hello-world-1.0.0pasta.

debian/source/format

Você pode ignorar isso principalmente, mas se estiver se perguntando, isso é explicado em§5.22na documentação do Debian.

3.0 (native)

debian/changelog

Este arquivo contém o changelog do hello-worldprograma.

hello-world (1.0.0) unstable; urgency=medium

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

debian/compat

Isso define o debhelpernível de compatibilidade. Ver§5.2na documentação do Debian

10

debian/control

Isso define vários valores que ferramentas como aptusam para gerenciar o pacote. Ver§4.1na documentação do Debian

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

Este arquivo contém informações sobre os direitos autorais e licença do código-fonte. Aqui, presumo que o código estará sob a licença do MIT. Altere isso conforme necessário. Ver§4.2na documentação do Debian

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

Este arquivo controla quais arquivos são instalados e onde seu pacote. Ver§5.11na documentação do Debian

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

debian/rules

É assim que o Debian constrói o pacote. Ver§4.4na documentação do Debian. Uma palavra de cautela: como outros Makefiles, use tabulações para recuar. Os espaços não funcionarão.

#!/usr/bin/make -f

%:
    dh $@

Nosso belo hello-worldpacote deve ter uma manpágina. Mas o formato das páginas de manual é complexo e difícil de ler. Então, em vez disso, escreveremos a página de manual no Markdown e vamos pandocconvertê-la para nós.

No diretório principal (ou seja, diretamente dentro da hello-world-1.0.0pasta), crie um arquivo chamado hello-world.1.md. Coloque o seguinte dentro do arquivo:

% 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.

Construir isso e o pacote requer algumas etapas. Então, vamos criar um script (Bash). Crie um arquivo chamado build. Torne-o executável chmod +x ./build. Coloque o seguinte no arquivo:

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

Isso irá gerar a página de manual e armazená-la no arquivo chamado hello-world.1. Em seguida, ele construirá o pacote. Isso -uc -us significa que não iremos assiná-lo com uma chave GPG, pois isso é complexo. Execute o script ( ./build), e se tudo correr bem, o pacote gerado estará no diretório pai work.

Responder4

Eu verificaria rapidamente, ótimo para criar aplicativos rápidos e gerar debs no Google ou você pode encontrar tutoriais aquihttp://developer.ubuntu.com/

informação relacionada