maneira de verificar um programa instalado na máquina

393 views
Skip to first unread message

Guilherme Loss

unread,
Jan 18, 2014, 5:05:40 PM1/18/14
to python-brasil
Boa tarde pessoal,

esta é uma pergunta bastante simples, mas como, ou qual seria uma maneira elegante de verificar se um software/ biblioteca está instalado na máquina?

fiz um google up, e não achei nada como eu queria...

tenho três situações:

1 - conferir se um módulo específico de python está instalado na máquina. Este eu verifico da seguinte forma:

def check_biopython():
    try:
        import Bio.Seq
        print '\tBiopython installed\n'
    except ImportError:
        print "\tBiopython not installed, please download in\n\
        http://biopython.org/wiki/Download\n"


# sim, não está muito genérica, mas como é só um módulo... fui mais direto...


2 - verificar alguns scripts/executáveis  que estão no diretório atual.
também tranquilo...

faço da seguinte forma:

from os import listdir
from os.path import isfile, join

def check_tool():
    global  tool
    tool_list = ['gff2gtf.py', 'step3.py', 'step2.py',\
    'variant_effect_predictor.tar.gz', 'step1.py',\
    'MarkDuplicates.jar', 'CreateSequenceDictionary.jar', \
    'AddOrReplaceReadGroups.jar', 'GenomeAnalysisTK.jar', \
    'main_samtools_GATK.py','x','a']
    print 'Cheking all necessary tools...\n'
    onlyfiles = [ f for f in listdir(".") if isfile(join(".",f)) ]
   
    for tool in tool_list:
        if tool in onlyfiles:
            print tool, "... ok"
        else:
            print "WARNING", tool, '... is missing'


# estou ciente da variável global...

3 - verificar se um software está instalado, porém o path pode variar de máquina para máquina, logo, eu não procuro o software em um PATh específico (como exemplo acima)... eu chamo a ferramenta e se não der erro, beleza... caso contrário retorna uma mensagem...

A maneira que fiz resolve, porém o default das ferramentas que procuro, ao serem executadas é mostrar um help enorme... que me deixou um pouco frustado..

def checka(tool):
    try:
        os.system(tool)
    except OSError as e:
        if e.errno == os.errno.ENOENT:
            print 'WARNING ',tool,  ' not found'
        else:
            print tool, 'is installed'


Logo, alguém saberia  alguma forma de verificar se um software está instalado, não assumindo um PATH específico??

muito obrigado,

[ ]'s


--


Guilherme Loss de Morais, PhD
Bioinformatics Laboratory-LABINFO
National Laboratory of Scientific Computation
www.labinfo.lncc.br
+55 (24) 2233-6094


Raniere Silva

unread,
Jan 18, 2014, 6:45:42 PM1/18/14
to python-brasil
Olá Guilherme,

> esta é uma pergunta bastante simples, mas como, ou qual seria uma maneira
> elegante de verificar se um software/ biblioteca está instalado na máquina?

Você foi um pouco genérico na sua pergunta.

Se estiver no shell/bash/terminal
---------------------------------

Você pode usar o `pip`:

$ pip list

Ele irá listar todos os pacotes instalados e as respectivas versões.

Se estiver em uma aplicação python
----------------------------------

Vai depender muito do que estiver tentando fazer e de como desejar tentar
resolver o problema ou notificar o usuário. Algumas das opções são as que você
mesmo listou.

Raniere

Guilherme Loss

unread,
Jan 18, 2014, 6:59:00 PM1/18/14
to python-brasil
grato, Raniere,

já tinha tentado o pip, mas não é bem o que eu quero ...
 

sendo mais específico, seria um teste simples de verificar se um dado programa, instalado as vezes em "/usr/local/bin/" ou "/usr/bin/" ou em outro local, está realmente instalado no computador que será utilizado para executar meu sccript.

caso tenha o programa instalado, retorn "ok" ou similar

caso não esteja instalado, retorna 'not ok' ou similar...
A solução 2 resolveria tranquilamente, se a instalação prévia do software fosse sempre no mesmo diretório...

from os import listdir
from os.path import isfile, join

def check_tool():
    global  tool
    tool_list = ['gff2gtf.py', 'step3.py', 'step2.py',\
    'variant_effect_predictor.tar.gz', 'step1.py',\
    'MarkDuplicates.jar', 'CreateSequenceDictionary.jar', \
    'AddOrReplaceReadGroups.jar', 'GenomeAnalysisTK.jar', \
    'main_samtools_GATK.py','x','a']
    print 'Cheking all necessary tools...\n'
    onlyfiles = [ f for f in listdir(".") if isfile(join(".",f)) ]
   
    for tool in tool_list:
        if tool in onlyfiles:
            print tool, "... ok"
        else:
            print "WARNING", tool, '... is missing'

Att,

 

--


Guilherme Loss de Morais, PhD
Bioinformatics Laboratory-LABINFO
National Laboratory of Scientific Computation
www.labinfo.lncc.br
+55 (24) 2233-6094




2014/1/18 Raniere Silva <ra09...@ime.unicamp.br>
--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar

<*> Para visitar o site do grupo na web, acesse:
    http://groups.google.com/group/python-brasil

<*> Para sair deste grupo, envie um e-mail para:
    python-brasi...@googlegroups.com

---
Você está recebendo esta mensagem porque se inscreveu no grupo "Python Brasil" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para python-brasi...@googlegroups.com.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.

Vinicius Assef

unread,
Jan 18, 2014, 9:44:18 PM1/18/14
to python...@googlegroups.com
O comando "which", do shell te diz isso. Mande executar o "which
seu_programa" e pegue o retorno dele.

2014/1/18 Guilherme Loss <guilher...@gmail.com>:

Marcel Caraciolo

unread,
Jan 19, 2014, 6:27:11 AM1/19/14
to python...@googlegroups.com


2014/1/18 Vinicius Assef <vinic...@gmail.com>



--

Guilherme Loss

unread,
Jan 19, 2014, 7:50:37 AM1/19/14
to python-brasil
valeu as dicas pessoal,

pois é....
Eu já tinha pensado no "which" e "whereis"...
fiquei curioso quanto a existencia de outra(s) alternativa(s)... talvez mais elegantes...

Abraços




--


Guilherme Loss de Morais, PhD
Bioinformatics Laboratory-LABINFO
National Laboratory of Scientific Computation
www.labinfo.lncc.br
+55 (24) 2233-6094




2014/1/19 Marcel Caraciolo <mar...@caraciolo.com.br>

Filipe Cifali

unread,
Jan 19, 2014, 8:21:22 AM1/19/14
to python...@googlegroups.com
/usr/bin/env também é uma alternativa


2014/1/19 Guilherme Loss <guilher...@gmail.com>



--
[ ]'s

Filipe Cifali Stangler

Willian Morais

unread,
Jan 20, 2014, 6:46:18 AM1/20/14
to python...@googlegroups.com
Outra alternativa caso use uma distribuição derivada do Debian:

dpkg-query -W -f='${Status}' <package>



Derivado Red Hat:

rpm -qa <package>

ou

yum -q list installed <package>


Willian de Morais
São José - Santa Catarina
Reply all
Reply to author
Forward
0 new messages