Como crio um pacote deb para um único script python?


78

Eu tenho um único script python que quero distribuir como um pacote deb. É um indicador que mostra a data local no painel do Unity. Eu segui a criação de um pacote .deb a partir de scripts ou binários, mas não pude criar um pacote deb porque ele falhou.

Alguém pode me dar instruções passo a passo sobre o que devo fazer? Tanto quanto eu sei, esse script depende python-appindicator.

NOTA:
Não quero links para instruções de empacotamento Debian / Ubuntu. Eu já vi a maioria deles. Não os acho amigáveis ​​para iniciantes.


6
Embora as instruções de empacotamento do Debian e Ubuntu não sejam amigáveis ​​para iniciantes (confie em mim, eu sei), muitos aplicativos de GUI que criam debs para você apenas acham um monte de erros quando você executa um verificador final de pacote, como o lintian. Se você é sério sobre a embalagem, então toughing-lo e trabalhar com as instruções é a melhor maneira de ir :)
Thomas Boxley

Eu não sei sobre embalagem, mas a funcionalidade que você está tentando adicionar está embutida no Unity.
É Willem

Respostas:


84

A seguir, é apresentado um exemplo básico de como um pacote de origem para um script python pode parecer. Embora a maioria dos tutoriais de empacotamento seja um pouco complexa, eles podem realmente ajudar se você encontrar um problema. Dito isto, eu aprendi 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 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 / copyright deve se parecer 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 / compat pode ser apenas:7

debian / rules :

#!/usr/bin/make -f

%:
    dh $@ --with python2

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

debian / control :

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 / install :

myScript usr/bin/

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

Agora construa-o com debuild --no-tgz-check

Isso criará um pacote deb funcional. O 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 tarball, você provavelmente só desejará ignorá-lo por enquanto.


12
Como empacotador (e backporter), empacoto scripts python com bastante frequência. Posso dizer com segurança que esta resposta aqui é a explicação mais completa sobre o que fazer para criar um pacote para um único script python.
Thomas Ward

2
Você também pode atualizá-lo para Python 3? Acho que precisamos fazer alterações no debian/rulese debian/control, mas não tenho certeza disso.
Aditya

1
@ Aditya, talvez uma nova pergunta esteja em ordem para Python3? A resposta não seria muito diferente, mas esta resposta tem como objetivo ser o exemplo mínimo mais simples / simples de como empacotar um script Python. Não tenho certeza se quero desordená-lo com várias implementações.
precisa saber é o seguinte

@andrewsomething: Então você pode estar interessado neste que me levou a deixar esse comentário ... Um pouco de edição é necessária, eu tentaria ...
Aditya

1
E as bibliotecas? Se o script python importa bibliotecas, então não vai funcionar
D.Snap

18
  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' lá.
  4. Abra 'controle' e digite o seguinte e salve-o 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. Voltar 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. Verifique se o terminal está na pasta inicial. digite dpkg -b mypyscript.Em seguida, pressione enter. Em segundos, seu pacote deb está pronto

nota: por favor preencha o arquivo 'control' corretamente. Não use apóstrofos. É apenas para indicar os nomes.


1
Funciona bem! A resposta aceita é complexa.
SuB

Não se esqueça de alterar a permissão do 'myscript' para 755 e o proprietário dele para fazer o root.
SuB

Como crio uma entrada de menu?
Para Fazer

9

Você pode tentar com o Debreate , uma ferramenta da GUI para criar pacotes.


Debcriar é legal. Eu gosto até agora, comecei a usá-lo hoje para construir a partir do código-fonte python.
answerSeeker


2

Tente pkgme . É suposto apenas trabalhar.

Instalar via:

sudo apt install pkgme

Executar por:

pkgme
debuild

(Um novo desenvolvedor pode precisar ser executado gpg --gen-key, consulte Desenvolvimento de chaves para fazer isso corretamente)



0

Você pode tentar usar o Debreate

Esta é uma interface Gui para criar pacotes e outras coisas que você pode usar o PPA também se não quiser baixá-lo no site listado acima.

sudo add-apt-repository ppa:antumdeluge/<ppaname>; sudo apt update; sudo apt install debreate

Eu condenei o ppa para que ele funcione como uma única linha de código! Obrigado pela incrível pergunta e certifique-se de continuar inserindo essas linhas de código no terminal!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.