Installation de Pylint pour Python3 sur Ubuntu

31

Ma compréhension est que la dernière version de Pylint (1.0.0 au moment de la rédaction de ce document) prend en charge Python 3, mais je ne peux pas le faire fonctionner sur Ubuntu 13.04 64 bits avec Python 3.3.

J'ai suivi les instructions d'installation sur le site PyPi , et Pylint 1.0.0 semble être installé avec succès ( pylint --versionrenvoie pylint 1.0.0), et fonctionne avec le code Python 2.7, mais il signale une erreur de syntaxe lorsqu'il voit des instructions non locales et autres.

Ce qui donne? Existe-t-il des instructions d'installation spéciales pour Pylint sur Ubuntu?

Jerrad Genson
la source

Réponses:

27

Python 2 et 3 sont des bêtes distinctes. Si vous installez un script dans les packages de site d'une version, vous ne l'installez pas dans l'autre.

Je l'installerais via pip, mais vous aurez besoin de la bonne version de pip.

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

Cela remplacera votre version 2.7. Nous pouvons le confirmer en vérifiant 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
la source
Génial. Ça marche. Je noterai cependant que ces commandes n'ont pas remplacé la version 2.7 sur ma machine. J'ai dû le supprimer des dist-packages 2.7, puis réexécuter les commandes.
Jerrad Genson le
3
@Oli donc si j'installe pylint pour python 3 alors la version par défaut de python 2 ne fonctionne pas?
sayth
5
J'ai découvert que des versions plus récentes (comme de Python 3.5 , etc. novembre 2016) il y a aussi une pylint3 que vous pouvez installer avec: sudo apt install pylint3.
Rick Henderson
21

Le commentaire de @sayth à la réponse acceptée est ce qui m'a attiré ici - j'écris des scripts python 2 et python 3, et je veux pouvoir vérifier les deux par rapport au jeu de règles correct. l'installation de pylint en utilisant pip3 install pylintécrit un court script dans /usr/local/binlequel invoque l'interpréteur python3, et semble donc supposer que tous les fichiers à vérifier sont des scripts python 3.

pour contourner ce problème, j'ai maintenant les fichiers suivants:

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

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

et puis, parce que j'aime utiliser pylint directement depuis le menu "Build Commands" de Geany, et que je ne peux pas spécifier de commandes différentes pour les scripts python 2 et python 3, j'ai aussi ~/bin/pylint:

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

qui envoie la version correcte en reniflant le shebang.

Pas parfait, certes, mais fonctionnel et, peut-être, utile pour les autres.

Simon
la source
11

L'écosystème de pylônes a changé depuis (après que cette question a été posée), et il existe maintenant un pylône distinct pour python3. Il peut être installé avec:

sudo apt install pylint3

A travaillé pour moi sur Ubuntu 16.04.2 LTS

Phil
la source
1
cela fonctionne aussi pour moi. Pylint installé pour python3, et toujours garder pylint pour python 2.
zhihong
Cette réponse est la bonne pour une installation à l'échelle du système.
juillet
7

Comme autre méthode pour exécuter pylint sur Python 2 et 3, notez que vous pouvez utiliser le -mcommutateur Python pour exécuter un module installé sur le système dans la version actuelle de Python, vous pouvez donc faire

$ python2 -m pylint
$ python3 -m pylint

pour sélectionner explicitement celui que vous voulez. Vous pouvez en faire des alias ou des scripts shell si vous le souhaitez.

Soren Bjornstad
la source
2

La racine du problème est que pylint devrait venir avec des scripts de console de point d'entrée pour / usr / local / bin / pylint2 et / usr / local / bin / pylint3. Cela devrait être considéré comme un bug.

Ce qui suit ne fonctionne pas ; il exécute toujours pylint2:

python3 -m pylint p3file.py

Voici ce que j'ai utilisé avec succès:

python2 /usr/local/bin/pylint p2file.py
python3 /usr/local/bin/pylint p3file.py
Sec
la source
0

Ceci est en réponse à la bonne réponse de Simon. Je viens d'y penser différemment et j'ai pensé que cela pourrait être utile pour ceux qui recherchent des solutions pour plusieurs versions de python / pylint.

L'installation de pylint pour 3.x et le maintien de 2.7 par défaut ou vice versa se font facilement en utilisant virtualenv.

Créez votre environnement virtuel. dans votre env tout en course activée

    pip install pylint

ici, vous pouvez ensuite déterminer où votre env a mis votre python et votre pylône en

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

et alors

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

Ensuite, il suffit de configurer votre idée pour utiliser ce chemin de peluchage et / ou chemin de python. Je sais que cela fonctionne avec Sublime3, je vais donc l'utiliser dans l'exemple ci-dessous.

dans Sublime dans le menu d'en-tête supérieur, sélectionnez Préférences> Paramètres du package> Pylinter> Paramètres - Utilisateur.

C'est juste un objet json. Met le

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

Enregistrez le fichier. Je fais également une copie du fichier et le garde dans ce répertoire venv afin que je puisse facilement basculer en copiant et collant cette configuration lorsque j'ai besoin de ce linter. Lorsque je ne le fais pas, je réinitialise simplement les paramètres Pylinter.sublime sur la valeur par défaut pour l'utilisateur et cela semble être la manière la plus simple que j'ai trouvée. Désolé, je ne connais pas les commandes Windows ou je les aurais mises dedans.

tldr
la source