Instalación de Pylint para Python3 en Ubuntu

31

Tengo entendido que la última versión de Pylint (1.0.0 en el momento de escribir este artículo) es compatible con Python 3, pero no puedo hacer que funcione en Ubuntu 13.04 de 64 bits con Python 3.3.

Seguí las instrucciones de instalación en el sitio de PyPi , y Pylint 1.0.0 parece estar instalado con éxito ( pylint --versiondevuelve pylint 1.0.0), y funciona con el código Python 2.7, pero informa un error de sintaxis cuando ve declaraciones no locales y demás.

¿Lo que da? ¿Hay instrucciones especiales de instalación para Pylint en Ubuntu?

Jerrad Genson
fuente

Respuestas:

27

Python 2 y 3 son bestias separadas. Si instala un script en los paquetes del sitio de una versión, no lo está instalando en el otro.

Lo instalaría a través de pip, pero necesitará la versión correcta de pip.

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

Esto reemplazará su versión 2.7. Podemos confirmar esto marcando 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
fuente
Excelente. Eso funciona. Sin embargo, notaré que esos comandos no reemplazaron la versión 2.7 en mi máquina. Tuve que eliminarlo de los paquetes dist 2.7 y luego volver a ejecutar los comandos.
Jerrad Genson
3
@Oli, así que si instalo pylint para python 3, ¿la versión predeterminada de python 2 no funciona?
dice
55
Me di cuenta de que con las nuevas versiones (a partir de Python 3.5, etc. Nov 2016) también hay un pylint3 que se puede instalar con: sudo apt install pylint3.
Rick Henderson el
21

El comentario de @sayth a la respuesta aceptada fue lo que me atrajo aquí: escribo los scripts python 2 y python 3, y quiero poder verificarlos con el conjunto de reglas correcto. la instalación de pylint usando pip3 install pylintescribe una secuencia de comandos corta en la /usr/local/binque se invoca el intérprete de python3 y, por lo tanto, parece suponer que todos los archivos que se verificarán son secuencias de comandos de python 3.

para solucionar esto, ahora tengo los siguientes archivos:

~/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')()
    )

y ~/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')()
    )

y luego, como me gusta usar pylint directamente desde el menú "Build Commands" de Geany, y no puedo especificar diferentes comandos para los scripts python 2 y python 3, también tengo ~/bin/pylint:

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

que distribuye la versión correcta olfateando el shebang.

No perfecto, ciertamente, pero funcional y, quizás, útil para otros.

simon
fuente
11

El ecosistema de pylint ha cambiado desde entonces (después de que se hizo esta pregunta), y ahora hay un pylint separado para python3. Se puede instalar con:

sudo apt install pylint3

Me funcionó en Ubuntu 16.04.2 LTS

Phil
fuente
1
Esto también funciona para mí. Instalé pylint para python3 y aún conserva pylint para python 2.
zhihong
Esta respuesta es la correcta para la instalación en todo el sistema.
jII
7

Como otro método para ejecutar pylint en Python 2 y 3, tenga en cuenta que puede usar el -minterruptor de Python para ejecutar un módulo instalado en el sistema en la versión actual de Python, por lo que puede hacer

$ python2 -m pylint
$ python3 -m pylint

para seleccionar explícitamente cuál quieres. Puede convertirlos en alias o scripts de shell si lo desea.

Soren Bjornstad
fuente
2

La raíz del problema es que pylint debería venir con scripts de consola de punto de entrada para / usr / local / bin / pylint2 y / usr / local / bin / pylint3. Esto debería considerarse un error.

Lo siguiente no funciona; todavía ejecuta pylint2:

python3 -m pylint p3file.py

Lo siguiente es lo que he estado usando con éxito:

python2 /usr/local/bin/pylint p2file.py
python3 /usr/local/bin/pylint p3file.py
Brusco
fuente
0

Esto es en respuesta a la buena respuesta de Simon. Simplemente lo pensé de una manera diferente y pensé que podría ser útil para aquellos que buscan soluciones para múltiples versiones de python / pylint.

Instalar pylint para 3.xy mantener 2.7 por defecto o viceversa se hace fácilmente usando virtualenv.

Crea tu entorno virtual. en tu env mientras corres activado

    pip install pylint

aquí puede averiguar dónde su entorno ha puesto su python y pylint por

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

y entonces

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

Entonces es solo una cuestión de configurar su ide para usar esa ruta de enlace y / o ruta de python. Sé que funciona con Sublime3, así que lo usaré en el siguiente ejemplo.

en Sublime en el menú del encabezado superior, seleccione Preferencias> Configuración del paquete> Pylinter> Configuración - Usuario.

Es solo un objeto json. Selecciona el

    "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.

Guarda el archivo. También hago una copia del archivo y la guardo en ese directorio venv para poder cambiar fácilmente copiando y pegando esta configuración cuando necesito esta interfaz. Cuando no lo hago, simplemente restablezco la configuración de Pylinter.sublime a los valores predeterminados para el usuario y esa es la forma más fácil que he encontrado. Lo siento, no conozco los comandos de Windows o los habría puesto allí.

tldr
fuente