O que alguém deve saber sobre o uso de scripts Python no shell?

2

Eu estou querendo saber o que alguém deve saber sobre o Python (o interpretador) ao usá-lo no shell do Linux ? Isso é o que eu tenho no Gentoo :

# ls -al /usr/bin/python*; file /usr/bin/python; /usr/bin/python-wrapper --version
lrwxrwxrwx 1 root root    14 Dec 26 04:49 /usr/bin/python -> python-wrapper
lrwxrwxrwx 1 root root     9 Dec 26 04:51 /usr/bin/python2 -> python2.7
-rwxr-xr-x 1 root root  6144 Jan  8 21:22 /usr/bin/python2.7
-rwxr-xr-x 1 root root  1450 Jan  8 21:22 /usr/bin/python2.7-config
lrwxrwxrwx 1 root root     9 Dec 26 04:49 /usr/bin/python3 -> python3.3
-rwxr-xr-x 1 root root 10304 Jan 19 20:37 /usr/bin/python3.3
-rwxr-xr-x 1 root root  1753 Jan 19 20:37 /usr/bin/python3.3-config
-rwxr-xr-x 1 root root   217 Dec 26 04:49 /usr/bin/python-config
lrwxrwxrwx 1 root root    16 Jan  8 21:22 /usr/bin/python-config-2.7 -> python2.7-config
lrwxrwxrwx 1 root root    16 Jan 19 20:37 /usr/bin/python-config-3.3 -> python3.3-config
-rwxr-xr-x 1 root root 10384 Dec 26 05:24 /usr/bin/python-wrapper
/usr/bin/python: symbolic link to 'python-wrapper'
Python 3.3.3

Então, no meu caso, chamar python lança a versão 3.3. Na maioria das distribuições que usei, havia mais de uma versão instalada. E a versão mais recente não é compatível com versões anteriores, e alguns de seus recursos foram backportados para o "antigo". Eu pensei que a situação das duas versões era algo temporário? Agora, toda vez que eu preciso executar um script Python, eu tento com as duas versões do Python apenas para ter certeza.

Devo saber mais alguma coisa sobre o uso do Python no shell, ou seja, para executar scripts; se sim, o que? Alguém que faz um script python e usa env python na primeira linha, ele quer dizer que deve ser compatível com as duas versões? Qual é o uso para o wrapper python em tudo isso?

    
por jus cogens prime 03.04.2014 / 07:34

3 respostas

3

PEP 394 especifica como o Python deve ser instalado e o que usar em linhas shebang. Use #!/usr/bin/env python2 para scripts do Python 2 e #!/usr/bin/env python3 para scripts do Python 3 (e #!/usr/bin/env python se seus scripts forem compatíveis com ambos).

Na prática, as pessoas têm usado #!/usr/bin/env python em shebang lines há anos, então se você encontrar um script que peça python , é provável que seja um script do Python 2.

Como o Python 2 e o Python 3 não são compatíveis, as duas versões coexistirão por um longo tempo. São duas linguagens diferentes que, por acaso, são semelhantes, mas não a ponto de serem compatíveis para a maioria dos programas. A maioria dos sistemas tem mantido python como Python 2 por enquanto, mas o Arch Linux trocou python para Python 3; essa inconsistência é o motivo pelo qual o PEP 394 recomenda usar uma versão explícita no shebang. Infelizmente, como a vida não é simples, alguns sistemas mais antigos ainda podem não ter python2 (o wheezy do Debian só o adquiriu in extremis).

Observe que, embora “o Python 2.x seja legado, o Python 3.x seja o presente e o futuro da linguagem” do ponto de vista dos designers de linguagem, há um enorme corpo de código do Python 2 por aí. Do ponto de vista de alguém que usa bibliotecas de terceiros (cuja abundância é uma das vantagens do Python), o presente é o Python 2.

Quanto a python-wrapper , é um wrapper para selecionar entre implementações em Python . É o invólucro de ontem; O wrapper de hoje é python-exec . Eu não sei o que eles fazem.

    
por 04.04.2014 / 02:12
3

Resposta curta: use o Python 3! Sério, é ótimo! Eu queria que todas as distribuições tornassem o Python 3 o padrão.

A questão de saber se você deve usar o Python 2 ou o Python 3 não é fácil de responder sem saber sobre os usuários de seus programas e quais bibliotecas você usa. A prática de fazê-lo funcionar em ambos é um ótimo exercício.

Use o Python 2 se um desses casos se aplicar:

  1. Você usa uma biblioteca que ainda não foi portada. Não existem muitas bibliotecas que requerem o Python 2.
  2. Seus destinos de implantação ou clientes ainda estão presos no Python 2.

Para respostas mais detalhadas, consulte Wiki do Python e uma página da web sobre essa questão .

A linha #!/usr/bin/env python (como a outra resposta diz) procura o primeiro python em seu $PATH . Virtualenvs são muito populares para isolar projetos e instalações Python, então eu uso #!/usr/bin/env python ao invés de simples #!/usr/bin/python para que meu virtualenvs funcione. Os documentos on-line do Python mencionam apenas em um lugar e usam exatamente essa invocação. Parece que você pode precisar de um virtualenv para seus projetos que contém um interpretador do Python 2. A questão #!/usr/bin/env foi discutida aqui e aqui .

    
por 03.04.2014 / 08:09
1

Quando alguém usa #!/usr/bin/env python na primeira linha, ele / ela significa que o intérprete para executar o script é o primeiro encontrado em $PATH , eles não assumem que o script é compatível com as duas versões.

Se você quiser especificar a versão do Python para usar no script, você pode fazer assim:

#!/usr/bin/env python2.7

ou

#!/usr/bin/env python3.3
    
por 03.04.2014 / 08:33

Tags