Como funciona (exemplos para python2
, para python3
, substituem todas as ocorrências de python
por python3
):
-
%código%
- funciona se o arquivo for executável ou não
- shebang (
python /path/to/script.py
) na cabeça do script é uma boa prática, mas não é necessário
-
%código%
- funciona se o script for executável
- shebang é necessário (
#!/usr/bin/env python
)
-
%código%
- funciona se o script estiver em $ PATH O script
- precisa ser executável
- nome do arquivo precisa ter extensão
- shebang é necessário (
/path/to/script.py
)
-
%código%
- funciona se o script estiver em $ PATH O script
- precisa ser executável
- nome do arquivo não deve ter extensão
- shebang é necessário (
#!/usr/bin/env python
)
Um pouco mais de informação: precedência de comando, shebang ou extensão?
O shell pode obter suas informações sobre como executar um script de duas origens (em ordem de precedência):
- As informações de idioma no comando:
script.py
- O shebang, na primeira linha do script:
#!/usr/bin/env python
A extensão de idioma, no entanto, não desempenha nenhum papel (!).
Alguns exemplos:
-
Um script
script
, informações corretas (idioma) no comando, incorreto shebang, extensão incorreta :#!/usr/bin/env python echo 'Monkey eats banana'
correu com:
$ sh /path/to/script.py > Monkey eats banana
é executado corretamente, as informações no comando têm precedência sobre o shebang e a extensão.
-
Um script (executável)
#!/usr/bin/env python
, executado com extensão incorreta , mas com uma explicação correta:#!/usr/bin/env/python print "Monkey eats banana"
correu com:
$ /path/to/script.sh > Monkey eats banana
é executado corretamente, as informações no shebang têm precedência sobre a extensão.
-
Um script (executável)
python <script>
, com uma extensão correta, mas sem shebang (e sem informações de idioma no comando):print "Monkey"
Ran com o comando:
$ /path/to/script.py > Error: no such file "Monkey"
não funciona corretamente, apesar da extensão de idioma!