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 source
algo 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 --create
no diretório para criar uma debian/changelog
entrada 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
- crie uma pasta com qualquer nome em sua casa, por exemplo: mypyscript
- Abra a pasta e crie duas pastas com os nomes 'DEBIAN' e 'usr'
- Abra a pasta DEBIAN. Crie um arquivo de texto (sem extensão) com o nome ‘control’.
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
Volte para a pasta chamada mypyscript. Abra 'usr'. Crie uma pasta chamada 'bin'. Abra 'bin' e cole seu arquivo pythonscript lá.
- Você também pode fazer uma entrada no menu. Mas isso não é essencial.
- Volte para a pasta inicial onde está a pasta 'mypyscript' ou feche o navegador de arquivos.
- 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 .deb
pacote 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 man
pá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.0
pasta 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 .deb
arquivo 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.0
diretó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 .deb
arquivo, você precisa dos pacotes git
, devscripts
, build-essential
, lintian
e pandoc
instalados. 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.0
pasta, crie uma pasta chamada debian
. Dentro dele, crie uma pasta chamada source
. Também diretamente dentro da debian
pasta, crie os seguintes arquivos changelog
, compat
, control
, copyright
, install
e rules
. Dentro da debian/source
pasta, 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.0
pasta.
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-world
programa.
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 debhelper
nível de compatibilidade. Ver§5.2na documentação do Debian
10
debian/control
Isso define vários valores que ferramentas como apt
usam 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-world
pacote deve ter uma man
pá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 pandoc
convertê-la para nós.
No diretório principal (ou seja, diretamente dentro da hello-world-1.0.0
pasta), 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/