Python não possui nenhum requisito especial no Linux. É o carregador de programas no Unix / Linux que usa a linha "shebang", como é chamado. Isso é realmente um recurso e não uma limitação, mas chegaremos a isso em um momento. A página do Wiki em "shebang" tem mais detalhes, mas vou tentar dar uma visão geral também como uma comparação com o Windows aqui.
Primeiro, vamos analisar a situação no Windows:
- Quando você tenta abrir ou executar um arquivo, o Windows primeiro examina a extensão desse arquivo. Esta é a parte última do nome do arquivo começando com
.
No caso de arquivos Python, isso geralmente é.py
. - O Windows procura a ação a ser tomada com base na extensão do arquivo.
- Essas informações são registradas no registro do Windows; Quando o Python é instalado, ele normalmente diz ao Windows que
.py
arquivos devem ser abertos usando o aplicativo Python recém-instalado (ou seja, o interpretador Python). - Vários tipos de arquivo possuem comportamentos internos; por exemplo, arquivos executáveis (como o próprio interpretador Python) devem terminar em
.exe
e.bat
arquivos são executados como scripts em lotes do Windows. - A ação realizada para um determinado tipo de arquivo é personalizável . Você pode, por exemplo, dizer ao Windows que, em vez de executar
.py
arquivos usandopython.exe
, ele deve abri-los com algum outro programa, como o editor de textonotepad.exe
.- Nesse caso, para executar um script Python, você precisaria manualmente chamar
python <scriptname>.py
(ou gravar um arquivo.bat
para fazer isso para você).
- Nesse caso, para executar um script Python, você precisaria manualmente chamar
- Essas informações são registradas no registro do Windows; Quando o Python é instalado, ele normalmente diz ao Windows que
Agora, o que acontece se houver uma linha shebang ( #!/usr/bin/python
ou #!/usr/bin/env python
) na parte superior do script Python? Bem, como #
é uma linha de comentário em Python, o interpretador Python apenas o ignora. Esse é um dos motivos pelos quais a maioria das linguagens de script usadas no mundo Unix / Linux usa #
para iniciar linhas de comentários.
Portanto, é um pouco enganador dizer que o Windows "não precisa" da linha #!
; O Windows não vê a linha #!
e, de fato, depende da extensão do arquivo para dizer o que fazer. Isso tem algumas desvantagens:
- Você deve nomear scripts Python com
.py
no final para que eles sejam automaticamente reconhecidos como tal. - Não há uma maneira fácil de distinguir os scripts do Python2 dos scripts do Python3.
- Como observado anteriormente, se você alterar o comportamento de inicialização padrão para o tipo de arquivo
.py
, o Windows não executará mais esses scripts automaticamente com o Python. Note que isso pode ser feito de forma não intencional.
Agora, vamos ver como o Unix / Linux lança scripts:
A primeira coisa a notar é que o Unix / Linux, ao contrário do Windows, não está tentando "abrir" scripts Python usando um programa em particular, pelo menos conceitualmente; O sistema operacional sabe que o script é algo que pode ser executado por causa de algo chamado "execute bit" (que está fora do escopo desta resposta). Portanto, se você acidentalmente digitar #!/usr/bin/pthon
em vez de #!/usr/bin/python
, receberá uma mensagem de erro que inclui este texto:
/usr/bin/pthon: bad interpreter: No such file or directory.
A palavra "intérprete" nos dá uma pista sobre o papel da linha shebang (embora tecnicamente o programa especificado possa ser algo diferente de um interpretador, como cat
ou um editor de texto). Quando você tenta executar um arquivo, veja o que acontece:
- O carregador de programas Unix / Linux examina os dois primeiros bytes desse arquivo; se esses dois bytes forem
#!
, o carregador interpretará o restante da linha shebang (excluindo o próprio shebang) como um comando para lançar um interpretador com o qual executar o conteúdo do arquivo como um script. - O carregador de programas inicia o interpretador especificado, alimentando o caminho do arquivo original como um argumento.
Isso tem algumas vantagens:
- O criador de scripts tem mais controle sobre qual interpretador será usado (o que resolve o problema do Python2 / Python3) e às vezes pode passar um argumento extra para o interpretador (consulte a página do Wiki para obter detalhes).
- O nome do arquivo do script é ignorado , então você pode nomear os scripts Python como quiser.
Note, finalmente, que o Unix / Linux não precisa da linha shebang para executar um script Python. Lembre-se de que tudo que a linha shebang realmente faz é permitir que o carregador de programas selecione um intérprete. Mas, assim como no Windows, isso pode ser feito manualmente:
python <myscript>