Instalando o Pylint para Python3 no Ubuntu

31

Meu entendimento é que a versão mais recente do Pylint (1.0.0 no momento da redação deste artigo) tem suporte para o Python 3, mas não consigo fazê-lo funcionar no Ubuntu 13.04 de 64 bits com o Python 3.3.

Eu segui as instruções de instalação no site do PyPi e o Pylint 1.0.0 parece ter sido instalado com êxito ( pylint --versionretorna o pylint 1.0.0) e funciona com o código Python 2.7, mas ele relata um erro de sintaxe quando vê declarações não locais e outras coisas.

O que da? Existem instruções especiais de instalação para o Pylint no Ubuntu?

Jerrad Genson
fonte

Respostas:

27

Python 2 e 3 são bestas separadas. Se você instalar um script nos pacotes de sites de uma versão, não o estará instalando na outra.

Eu o instalaria através do pip, mas você precisará da versão correta do pip.

sudo apt-get install python3-pip
sudo pip-3.3 install pylint

Isso substituirá a sua versão 2.7. Podemos confirmar isso verificando less $(which pylint):

#!/usr/bin/python3.3
# EASY-INSTALL-ENTRY-SCRIPT: 'pylint==1.0.0','console_scripts','pylint'
__requires__ = 'pylint==1.0.0'
import sys
from pkg_resources import load_entry_point

if __name__ == '__main__':
    sys.exit(
        load_entry_point('pylint==1.0.0', 'console_scripts', 'pylint')()
    )
Oli
fonte
Ótimo. Isso funciona. Observarei, no entanto, que esses comandos não substituíram a versão 2.7 na minha máquina. Eu tive que removê-lo dos pacotes dist 2.7 e, em seguida, execute novamente os comandos.
Jerrad Genson
3
@ Oli, se eu instalar o pylint para python 3, a versão padrão do python 2 não funcionará?
sayth
5
Descobri que com versões mais recentes (a partir de Python 3.5 etc. novembro 2016), há também uma pylint3 que você pode instalar com: sudo apt install pylint3.
Rick Henderson
21

O comentário de @sayth à resposta aceita foi o que me atraiu aqui - eu escrevo os scripts python 2 e python 3 e quero poder verificar o conjunto de regras correto. instalar o pylint usando pip3 install pylintgrava um script curto no /usr/local/binqual chama o interpretador python3 e parece, portanto, assumir que todos os arquivos a serem verificados são scripts python 3.

Para contornar isso, agora tenho os seguintes arquivos:

~/bin/pylint2:

#!/usr/bin/python2
# EASY-INSTALL-ENTRY-SCRIPT: 'pylint','console_scripts','pylint'
__requires__ = 'pylint'
import sys
from pkg_resources import load_entry_point

if __name__ == '__main__':
    sys.exit(
        load_entry_point('pylint', 'console_scripts', 'pylint')()
    )

e ~/bin/pylint3:

#!/usr/bin/python3
# EASY-INSTALL-ENTRY-SCRIPT: 'pylint','console_scripts','pylint'
__requires__ = 'pylint'
import sys
from pkg_resources import load_entry_point

if __name__ == '__main__':
    sys.exit(
        load_entry_point('pylint', 'console_scripts', 'pylint')()
    )

e então, porque eu gosto de usar o pylint diretamente no menu "Build Commands" do Geany e não posso especificar comandos diferentes para scripts python 2 e python 3, também tenho ~/bin/pylint:

#!/bin/bash
if [[ $(head -n 1 "${@: -1}") == *python3* ]]
then
    # python3 file
    pylint3 "$@"
else
    pylint2 "$@"
fi

que envia a versão correta cheirando o shebang.

Não é perfeito, certamente, mas funcional e, talvez, útil para outros.

simon
fonte
11

O ecossistema pylint mudou desde (depois que essa pergunta foi feita), e agora existe um pylint separado para python3. Pode ser instalado com:

sudo apt install pylint3

Trabalhou para mim no Ubuntu 16.04.2 LTS

Phil
fonte
1
isso funciona para mim também. Instalou o pylint para python3 e ainda mantém o pylint para python 2.
zhihong
Esta resposta é a correta para a instalação em todo o sistema.
jII 30/04
7

Como outro método para executar o pylint no Python 2 e 3, observe que você pode usar o -mswitch do Python para executar um módulo instalado no sistema na versão atual do Python, para que você possa

$ python2 -m pylint
$ python3 -m pylint

para selecionar explicitamente qual você deseja. Você pode transformá-los em aliases ou scripts de shell, se desejar.

Soren Bjornstad
fonte
2

A raiz do problema é que o pylint deve vir com scripts de console de ponto de entrada para / usr / local / bin / pylint2 e / usr / local / bin / pylint3. Isso deve ser considerado um bug.

O seguinte faz não funciona; ainda executa o pylint2:

python3 -m pylint p3file.py

A seguir, é o que tenho usado com sucesso:

python2 /usr/local/bin/pylint p2file.py
python3 /usr/local/bin/pylint p3file.py
Curt
fonte
0

Isto é uma resposta à simons fine answer. Eu apenas pensei sobre isso de uma maneira diferente e achei que poderia ser útil para quem procura soluções para várias versões do python / pylint.

A instalação do pylint para 3.xe manter o 2.7 padrão ou vice-versa é fácil com o virtualenv.

Crie seu ambiente virtual. em seu ambiente durante a execução ativada

    pip install pylint

aqui você pode descobrir onde seu env colocou seu python e pylint

    which pylint
    #/home/$USER/Desktop/python/awesomeSauce/bin/pylint

e depois

    which python
    #/home/$USER/Desktop/python/awesomeSauce/bin/python

Então é apenas uma questão de configurar seu ide para usar esse caminho de linting e / ou caminho python. Eu sei que funciona com o Sublime3, então usarei isso no exemplo abaixo.

em Sublime, no menu do cabeçalho superior, selecione Preferências> Configurações do pacote> Pylinter> Configurações - Usuário.

É apenas um objeto json. Colocou o

    "python_bin": "python",
    // to the python path found earlier by 'which python'
    "python_bin": "/home/$USER/Desktop/python/awesomeSauce/bin/python",
    // dont for get the coma if it is the last element.
    // We also change the pylint_path from
    "pylint_path": null,
    // to
    "pylint_path": "/home/$USER/Desktop/python/awesomeSauce/bin/pylint",
    // sorry I cant make the formatting look any better.

Salve o arquivo. Também faço uma cópia do arquivo e o mantenho nesse diretório venv para que eu possa alternar facilmente, copiando e colando essa configuração quando precisar desse linter. Quando não, redefino as configurações do Pylinter.sublime de volta ao padrão de usuário e essa parece ser a maneira mais fácil de encontrar. Desculpe, eu não sei os comandos do Windows ou eu os teria colocado lá.

tldr
fonte