Etapas básicas para desenvolver API python no ambiente Unix

3

Estou desenvolvendo uma API no ambiente Unix para máquinas virtuais. A maioria dos módulos é desenvolvida em python. Eu tenho algumas perguntas sobre isso.

Eu tenho a extensão de arquivo como abc.py . Eu gostaria de fazer isso como um comando. Por exemplo, virtman dominfo [vmid] deve ser a sintaxe do comando. Agora eu tenho que dar ./virtman.py dominfo [vmid] para conseguir isso. E eu tenho a primeira linha como #!/usr/bin/python no arquivo python. Então, como pode fazer isso como um comando?

Meu echo $ PATH se parece com '/ bin: / usr / kerberos / bin: / usr / local / bin: / bin: / usr / bin0'

Eu li muitos artigos, mas não obtive uma imagem clara, então qualquer sugestão / sugestão seria útil.

    
por Dany 01.11.2014 / 08:56

2 respostas

4

Você parece estar enganado porque abc.py não seria um comando. Se você pode executá-lo, então é apenas um com um ponto no nome. Execute no sentido em que você pode fazer ./abc.py , então os bits de execução devem ser definidos. Se você tiver para fazer python abc.py do que você não é um comando (ainda).

Em geral, para tornar um arquivo python normal abc.py executável, verifique se a primeira linha diz:

#!/usr/bin/env python

(Isso pressupõe que você tenha /usr/bin/env como um programa e que localizará o comando python , que pode estar em /usr/local/bin . Ele também pressupõe que você deseja executar o padrão python (que é normalmente um link para uma versão específica do python como python2.7 ), você também pode usar python3 se estiver disponível como um comando.

Depois disso,

chmod +x abc.py
mv abc.py abc

E então você pode executar ./abc . Se o diretório atual estiver no seu caminho, ou se você mover abc para um diretório em seu caminho, você poderá executar abc de qualquer lugar.¹

Existem no entanto desvantagens de renomear e mover o arquivo:

  • você não pode mais usar from abc import SomeClass , pois o arquivo é renomeado
  • Se o arquivo estiver sob controle de revisão, talvez não seja mais

Então, em vez disso, o que eu faço normalmente é criar um novo arquivo /usr/local/bin/abc :

#!/usr/bin/env python

from abc import main
main()

e tem na parte inferior de abc.py :

def main():
    doing the real stuff

if __name__ == '__main__':
    main()

O diretório abc.py precisa estar nas procuras python PATH para os módulos, mas desta forma não precisa ser alterado, e pode ser usado por qualquer programa como uma importação, e iniciado como python abc.py .

¹ O mv é necessário para se livrar do ponto no nome do comando, mas não é realmente necessário, você pode invocar ./abc.py se você não renomeá-lo.

    
por 01.11.2014 / 09:10
1

A resposta de Anthon está correta, no entanto, para projetos Python não-triviais, você deve dar uma olhada no módulo distutils a biblioteca padrão. É projetado para implantar módulos e executáveis python em um sistema de maneira "correta" e:

  • Os desenvolvedores Python estão familiarizados com este módulo (ou deveria estar) porque ele está na biblioteca padrão e os pacotes Python mais conhecidos (Django, NumPy, Celery, para citar alguns) estão sendo usados. Os recém-chegados saberão instantaneamente como implantar seu projeto.

  • Depois de definir quais arquivos e pacotes você tem em seu projeto, basta executar python setup.py install para implantar e atualizar seu pacote no sistema.

    Não é mais necessário atualizar manualmente os arquivos de cópia variável PATH para /usr/local/bin ou defini-los como executáveis, tudo é feito para você!

  • Você pode usar pip install -e para instalar seu pacote no modo de desenvolvimento.

  • Também é portátil (mais ou menos) em ambientes Windows ou OSX.

Além disso, não posso recomendar o uso de um analisador de argumentos, como argparse , se você está projetando ferramentas de linha de comando.

    
por 01.11.2014 / 16:06