sexta-feira, 24 de dezembro de 2010

Qual a diferença entre #!/usr/bin/python e #!/usr/bin/env python?


Para quem utiliza o Linux como SO e programa em Python, já deve estar familiarizado em colocar um comentário com um caminho para o interpretador.

Este comentário especial na primeira linha faz com que o computador saiba onde está o interpretador da linguagem Python.

Mas, se você já prestou atenção, alguns programadores utilizam #!/usr/bin/python e outros #!/usr/bin/env python. Qual dos dois está certo? E qual a diferença entre eles? Eu também já fiz estas perguntas.

No primeiro caso, quando utilizamos #!/usr/bin/python, estamos especificando a localização do interpretador Python em sua máquina. O caminho está dizendo que o interpretador Python está dentro da pasta /usr/bin, que é onde geralmente ele está.

Mas, imagine se você fosse executar seu script em uma máquina que o interpretador estivesse instalado em /bin? O seu script simplesmente não iria funcionar, pois o caminho para o interpretador é diferente. O comando env resolve este problema.

Quando utilizamos #!/usr/bin/env python, estamos invocando o comando env, que procura o caminho do comando passado como argumento (i. e. python) nas variáveis de ambiente para poder executá-lo. Ou seja, se o interpretador estiver em /usr/local/bin, /bin/, /usr/bin ou em qualquer outro caminho, o comando env irá encontrá-lo e executá-lo, não importa onde ele esteja.

Portanto, quando for criar scripts em Python no Linux, escolha sempre a segunda opção para não ter dores de cabeça posteriormente.