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.