No Linux, o Python pode ou não exigir a #!
linha (shebang). Isso depende de como os códigos Python são manipulados, executando os códigos no modo interativo Python ou em um script Python.
O modo interativo Python permite ao usuário digitar e executar códigos Python diretamente, o que não requer a linha shebang. Para executar o modo interativo, abra um Terminal e digite python
Python 2.X ou python3
Python 3.X.
$ python
Python 2.7.6 (default, Jun 22 2015, 18:00:18)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
$ python3
Python 3.4.3 (default, Oct 14 2015, 20:33:09)
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
O script Python permite que o usuário escreva e salve os códigos Python em um arquivo de texto sem formatação e execute os códigos posteriormente. Isso pode ou não exigir a linha shebang. No entanto, existem dois motivos conhecidos quando a linha shebang é necessária para usar o script Python no Linux.
executar códigos Python em um script executável, ou seja, define como os códigos devem ser executados e usando qual interpretador;
executar códigos Python com relação à versão específica do Python, isto é, executar códigos compatíveis apenas com o Python 2.X ou o Python 3.X
Pratique com scripts Python
Abaixo estão a lista e o conteúdo dos arquivos, que usei para mostrar os casos em que a #!
linha (shebang) é necessária ou não.
$ ls -ln *.py
-rw-rw-r-- 1 1000 1000 94 Dec 14 18:37 hello1.py
-rwxrwxr-x 1 1000 1000 116 Dec 14 18:37 hello2e.py
-rw-rw-r-- 1 1000 1000 116 Dec 14 18:37 hello2.py
-rwxrwxr-x 1 1000 1000 117 Dec 14 18:37 hello3e.py
-rwxrwxr-x 1 1000 1000 120 Dec 14 18:37 hello3m.py
-rw-rw-r-- 1 1000 1000 117 Dec 14 18:37 hello3.py
$ file *.py
hello1.py: ASCII text
hello2e.py: Python script, ASCII text executable
hello2.py: Python script, ASCII text executable
hello3e.py: Python script, ASCII text executable
hello3m.py: Python script, UTF-8 Unicode (with BOM) text executable
hello3.py: Python script, ASCII text executable
hello1.py
contém apenas o código fonte.
import sys
sys.stdout.write("Hello from Python %s\n" % (sys.version,))
print("Hello, World!")
hello2.py
contém código fonte e a linha shebang.
#!/usr/bin/env python
import sys
sys.stdout.write("Hello from Python %s\n" % (sys.version,))
print("Hello, World!")
hello2e.py
contém o mesmo que hello2.py
e tornou executável.
hello3.py
contém o mesmo que hello2.py
, exceto que ele está adaptado para execução no Python 3 renomeando a primeira linha para #!/usr/bin/env python3
.
hello3e.py
contém o mesmo que hello3.py
e tornou executável.
hello3m.py
contém o mesmo que hello3.py
e é executável, exceto salvo com a Write Unicode BOM
opção no editor de texto, ou seja, Mousepad.
Além desse ponto, serão apresentados ao usuário dois métodos para executar os scripts Python. Ambos os métodos foram demonstrados como abaixo.
Método 1: executar com o programa Python
Abaixo estão os comandos e a saída ao executar o código-fonte com Python 2 e Python 3.
$ python hello1.py
Hello from Python 2.7.6 (default, Jun 22 2015, 18:00:18)
[GCC 4.8.2]
Hello, World!
$ python3 hello1.py
Hello from Python 3.4.3 (default, Oct 14 2015, 20:33:09)
[GCC 4.8.4]
Hello, World!
Ambas as versões do Python foram capazes de executar o script com sucesso. Portanto, a linha shebang não é necessária ao executar o script Python via python
ou python3
comando.
Método 2: executar como script Python
Abaixo estão os comandos e a saída ao executar o código-fonte com a linha shebang, que não são adaptados a Python 2 e Python 3, incluindo casos não executáveis e executáveis.
$ ./hello1.py
bash: ./hello1.py: Permission denied
$ ./hello2.py
bash: ./hello2.py: Permission denied
$ ./hello3.py
bash: ./hello3.py: Permission denied
$ ./hello2e.py
Hello from Python 2.7.6 (default, Jun 22 2015, 18:00:18)
[GCC 4.8.2]
Hello, World!
$ ./hello3e.py
Hello from Python 3.4.3 (default, Oct 14 2015, 20:33:09)
[GCC 4.8.4]
Hello, World!
Os três primeiros scripts falharam porque esses scripts não são executáveis, independentemente de terem ou não a linha shebang (para suporte à prova, consulte Exemplo adicional abaixo). Os dois últimos scripts têm linha shebang e são executáveis.
Aparentemente, um script que foi tornado executável é essencialmente inútil sem a linha shebang. Portanto, a linha shebang é necessária e o script deve ser executável ao executar os códigos Python em um script executável.
Quando shebang não funciona
No meu exemplo preparado e testado, a execução hello3m.py
como um script executável falhou e retornou um erro.
$ ./hello3m.py
./hello3m.py: line 1: #!/usr/bin/env: No such file or directory
Essa é uma limitação conhecida de que o shebang não funciona ou se torna inválido. Quando um arquivo é salvo como BOM Unicode (marca de ordem de bytes), ele falha ao executar normalmente como um script Python executável.
Exemplo adicional
Este exemplo adicional deve ser tratado apenas como prova de apoio. O usuário deve evitar executar este exemplo, embora o resultado seja inofensivo.
Eu criei outro arquivo chamado hello1e.py
, que contém o mesmo hello1.py
e que é executável. A execução desse script retornou um erro de sintaxe.
$ ./hello1e.py
./hello1e.py: line 2: syntax error near unexpected token `"Hello from Python %s\n"'
./hello1e.py: line 2: `sys.stdout.write("Hello from Python %s\n" % (sys.version,))'
Ao executar esse script, primeiro, o cursor do mouse será alterado para um sinal de mais e não fará nada na aparência. O erro de sintaxe não será mostrado até eu clicar na janela da área de trabalho ou do terminal. Em seguida, esse script criará um sys
arquivo no mesmo diretório que o script.
$ file sys
sys: PostScript document text conforming DSC level 3.0, Level 1
O sys
arquivo foi identificado como arquivo PostScript, sem extensão de arquivo. Este arquivo pode ser aberto no visualizador de documentos, ou seja, Evince, e o arquivo realmente continha uma captura de tela da janela em que eu havia clicado anteriormente. Na minha experiência, o arquivo pode ser tão grande quanto alguns megabytes.
Mais uma vez, a linha shebang é necessária e o script deve ser executável ao executar o script Python como um script executável. Caso contrário, o script se comportará mal conforme descrito acima.
Notas Adicionais
O termo "tornado executável" ou "deve ser executável" refere-se à permissão para executar o script. Isso é feito executando o chmod +x FILENAME
comando no Terminal ou marcando a opção "Permitir que este arquivo seja executado como um programa" ou algo semelhante na janela Propriedades , em um gerenciador de arquivos.
Enquanto outras respostas existentes cobriram quase tudo, essa resposta adotou uma abordagem diferente, usando exemplos práticos para explicar o assunto. A sintaxe do código foi escrita com cuidado, de modo que os exemplos possam ser executados com o Python 2 ou Python 3, como ele é.
Os códigos Python foram adaptados de Using Python no Windows e Using Python nas plataformas Unix , com código de uma linha adicional do onipresente "Olá, Mundo!" programa.
Todos os códigos e comandos foram totalmente testados e funcionam no sistema Xubuntu 14.04, que tinha o Python 2.7 e o Python 3.4 instalados por padrão.
.
) para determinar que tipo de arquivo é. Até o Windows está se afastando disso: examine as primeiras linhas do arquivo do Microsoft Word e ele indicará que é de fato um arquivo do Microsoft Word.