“Deployment” em Windows com Py2Exe e NSIS

2007 Fevereiro 9
by Marcelo Lira

Deployment segundo a wikipedia:

Software deployment é toda atividade que torna um sistema de software disponível para uso.

Como o TagMap é feito em Python+GTK, e pelo que vi o público interessado é composto majoritariamente de usuários de windows, pedir que eles instalem Python, GTK+ e PyGTK pra só então chegar em meu humilde programa, certamente seria uma barreira. Claro que tem o excelente All-in-one PyGTK for windows installer, mas se dá pra facilitar por quê não?

As duas ferramentas necessárias são o Py2Exe, responsável por tornar o script um legítimo executável, e o NSIS, que serve para criar instaladores next-next-finish e que vai fazer todo mundo te olhar como gente grande. ;P

Py2Eexe

O Py2Exe cria o executável a partir de um arquivo de configuração, no caso do TagMap foi o setup_win32.py. Observando o arquivo você verá que não é muito complicado, só substituir alguns valores e pronto; claro que mudanças maiores vão exigir algum estudo, mas se o seu projeto for em PyGTK com Glade pode pegar o meu e apenas trocar os valores (como eu mesmo fiz ;) ).

No prompt do DOS (ugh!) e no diretório do programa execute:

python setup_win32.py py2exe

Depois de algum trabalho por parte do script será gerado um diretório dist contendo (no meu caso) tagmap.exe, alguns DLLs e outros arquivos. Para executar em qualquer computador basta instalar antes GTK, mas ele também pode ser embutido.

Uma bom código para observar e aprender (e copiar) é o do GAJIM.

NSIS

Com o MakeNSIS que vem com o Nullsoft Scriptable Install System você pode ler um script que descreve o roteiro das perguntas feitas pelo instalador next-next-finish. Claro que ninguém vai ler só apertar o botão insistentemente até chegar no final. Meus scripts são o installer.nsi e installer_gtk.nsi, ambos podem ser facilmente adaptados para outros projetos. Como o nome deve indicar, o segundo script cria um instalador que coloca o GTK junto com o programa, pode parecer um desperdício de espaço, mas com as conexões rápidas e os HDs grandes de hoje em dia esse é um problema muito menor que mandar o usuário baixar um monte de dependências manualmente.

Bem, não tem muito mais o que explicar, até porque ainda estou aprendendo, mas um tutorial completo e direto pode ser encontrado em PyGTK and Py2Exe HowTo.

E os instaladores do TagMap (numa versão muito alfafa) pra windows, com e sem GTK:

P.S.: Um agradecimento especial pra minha gatinha que pacientemente me ajudou a testar. :*

10 Respostas leave one →
  1. 2007 Março 16
    janio dias da silva permalink

    estou com um problema e gostaria que me ajudasse.Instalei o NSIS,acontece que não estou sabendo usá-lo,ou seja, configurá-lo,poderia me mandar via E-mail os passos necessários para conf.este programa?desde já agradeço.

  2. 2007 Março 17

    Oi Janio,
    a única vez que usei o NSIS foi essa e tudo que fiz foi pegar um arquivo .nsi e alterá-lo baseado nos comentários no próprio arquivo. Você pode dar uma olhada no meu http://tagmap.googlecode.com/svn/trunk/installer.nsi, que pode ser adaptado pro seu projeto. Lembrando que usando o MakeNSIS para abrir sua versão do installer.nsi já dará início ao processo de criação do instalador.
    Pra ajudar tem a entrada na wikipedia com algum código de exemplo [http://pt.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System] e o tutorial [http://nsis.sourceforge.net/Docs/Chapter2.html].
    Não posso ajudar muito mais do que isso por ter usado pouco, mas se você esbarrar em alguma dúvida no processo pode falar.

  3. 2007 Junho 18

    Se você não quiser instalar o GTK à parte, basta copiar alguns arquivos do seu GTK e adicionar no processo de instalação. Simplifica um pouco. Os diretórios etc, lib e share (locales) são suficientes. Abaixo um script que fiz para copiar o necessário (note que só coloquei algumas localizações). O script assume que o diretório “files” é onde estarão os arquivos para instalar. o py2exe irá gerar meus arquivos dentro deste diretório também. Você deverá ver algo como:

    files/
    files/etc
    files/lib
    files/share

    É claro que você deve considerar os problemas de licença envolvidos.


    @echo off

    set GTKDIR=C:\Program Files\GTK

    if not exist files mkdir files

    if exist files\etc goto gtkcopied

    xcopy /E /Y /I "%GTKDIR%\etc" .\files\etc
    xcopy /E /Y /I "%GTKDIR%\lib" .\files\lib
    xcopy /E /Y /I "%GTKDIR%\share" .\files\share

    rem useless directories

    rmdir /S/Q files\share\gtk-doc
    rmdir /S/Q files\share\doc
    rmdir /S/Q files\share\gtk-2.0

    rem put only common locales

    rmdir /S/Q files\share\locale
    mkdir files\share\locale

    xcopy /E /Y /I "%GTKDIR%\share\locale\pt_BR" .\files\share\locale\pt_BR
    xcopy /E /Y /I "%GTKDIR%\share\locale\pt" .\files\share\locale\pt
    xcopy /E /Y /I "%GTKDIR%\share\locale\de" .\files\share\locale\de
    xcopy /E /Y /I "%GTKDIR%\share\locale\fr" .\files\share\locale\fr
    xcopy /E /Y /I "%GTKDIR%\share\locale\en_GB" .\files\share\locale\en_GB

    :gtkcopied

    del files\*.*

    cd .\src
    c:\python24\python setup.py py2exe
    pause

    Depois, usando o inno setup, inclui estes arquivos do GTK:

    [Files]
    Source: “files\*”; DestDir: “{app}\”; Flags: ignoreversion recursesubdirs createallsubdirs

  4. 2007 Junho 18

    Marcelo, boa essa, não sou muito bom em scriptagem no DOS e isso pode me ser bem util. Valeu.
    Ah, e teu filhinho é bunitão. Parabéns! :D

  5. 2007 Novembro 27

    Muito útil o seu post sobre PyGTK no Windows, muito obrigado! Acabou que no meu caso não funcionou, por causa desse bug no py2exe:

    https://sourceforge.net/tracker/?func=detail&atid=115583&aid=1665413&group_id=15583

    Fazer o quê… :-(

  6. 2008 Junho 8
    Talita permalink

    OI… tentei gerar i intaller para o seu arquivo installer.nsi

    mas no momento de executar o programa nsi ele gerou erros

    Error in macro MUI_PAGE_LICENSE on macroline 21
    Error in script “C:\Documents and Settings\talita\installer.nsi” on line 28 — aborting creation process

    como posso consertar isso..

    Abracos

    Talita

  7. 2008 Junho 13

    Oi Talita,
    cara, infelizmente não mexo com o NSI faz um tempão e estou sem máquina com Windows pra testar.
    Daqui dessa distância mental não me ocorre o que pode ter sido, mas sugiro você testar o script mais simples possível com o projeto mais simples possível pra ver se o erro fica mais evidente.

    Abraços

  8. 2008 Agosto 13
    FeLipe permalink

    Olha só, esse script pro NSIS>>

    ;——————————–

    ; The name of the installer
    Name “Installer”

    ; The file to write
    OutFile “setup.exe”

    ; The default installation directory
    InstallDir $PROGRAMFILES\nome da pasta
    Icon “C:\*LOCAL*\icon.ico”

    ; Request application privileges for Windows Vista
    RequestExecutionLevel user

    ;——————————–

    ; Pages

    Page instfiles

    ;——————————–

    Section “Instalar”

    SetOutPath $INSTDIR

    File “arquive.***”

    SectionEnd

    Caso queiram adicionar mais arquivos é so fazer nova linha com file e o nome.

    esse é um bem simples, só com a página de instalação. Se quiserem entender melhor é so abrir o arquivo “NSIS.chm” q tem esplicação de todas as funções e variaveis.

Trackbacks & Pingbacks

  1. Editor de pistas do Tampycross no Windows « Vale do Trovão
  2. criando um .exe com Python + GTK « ldev

Deixe uma resposta

Note: You can use basic XHTML in your comments. Your email address will never be published.

Assine o feed destes comentários via RSS