Instalowanie Pylint dla Python3 na Ubuntu


31

Rozumiem, że najnowsze wydanie Pylint (1.0.0 w momencie pisania tego tekstu) obsługuje Python 3, ale nie mogę go uruchomić na 64-bitowym Ubuntu 13.04 z Python 3.3.

Postępowałem zgodnie z instrukcjami instalacji na stronie PyPi , a Pylint 1.0.0 wydaje się być zainstalowany pomyślnie ( pylint --versionzwraca pylint 1.0.0) i działa z kodem Python 2.7, ale zgłasza błąd składniowy, gdy widzi nielokalne instrukcje i tym podobne.

Co daje? Czy istnieją specjalne instrukcje instalacji dla Pylint na Ubuntu?

Odpowiedzi:


27

Python 2 i 3 to osobne bestie. Jeśli instalujesz skrypt w pakietach witryn jednej wersji, nie instalujesz go w drugiej.

Zainstalowałbym go przez pip, ale potrzebujesz odpowiedniej wersji pip.

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

Spowoduje to zastąpienie wersji 2.7. Możemy to potwierdzić, sprawdzając 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')()
    )

Świetny. To działa. Zauważę jednak, że te polecenia nie zastąpiły wersji 2.7 na moim komputerze. Musiałem usunąć go z pakietów dystrybucyjnych 2.7, a następnie ponownie uruchomić polecenia.
Jerrad Genson

3
@Oli, więc jeśli zainstaluję pylint dla Pythona 3, to domyślna wersja Pythona 2 nie działa?
powiedziano

5
I okazało się, że z nowszych wersji (jak Pythona 3.5 itp listopada 2016) jest tam również pylint3 które można zainstalować z: sudo apt install pylint3.
Rick Henderson

21

Przyciągnął mnie komentarz @saytha do zaakceptowanej odpowiedzi - piszę zarówno skrypty python 2, jak i python 3 i chcę mieć możliwość sprawdzenia poprawności zestawu reguł. instalacja pylint przy użyciu pip3 install pylintkrótkiego skryptu /usr/local/binwywołuje interpreter python3 i wydaje się zatem, że zakłada, że ​​wszystkie pliki do sprawdzenia to skrypty python 3.

aby obejść ten problem, mam teraz następujące pliki:

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

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

a następnie, ponieważ lubię używać pylinta bezpośrednio z menu „Buduj komendy” Geany i nie mogę określić różnych poleceń dla skryptów python 2 i python 3, mam również ~/bin/pylint:

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

która wysyła poprawną wersję, wąchając shebang.

Z pewnością nie idealna, ale funkcjonalna i być może przydatna dla innych.


11

Od tego czasu ekosystem pylintów zmienił się (po zadaniu tego pytania) i istnieje teraz osobny pylint dla python3. Można go zainstalować z:

sudo apt install pylint3

Pracował dla mnie na Ubuntu 16.04.2 LTS


1
to też działa dla mnie. Zainstalowałem pylint dla python3 i nadal przechowuję pylint dla python 2.
zhihong 12.09.17

Ta odpowiedź jest poprawna w przypadku instalacji w całym systemie.
jII

7

Jako kolejną metodę uruchamiania pylinta zarówno w Pythonie 2, jak i 3, pamiętaj, że możesz użyć -mprzełącznika Pythona, aby uruchomić moduł zainstalowany w systemie w bieżącej wersji Pythona, więc możesz to zrobić

$ python2 -m pylint
$ python3 -m pylint

aby wyraźnie wybrać, który chcesz. Możesz zrobić z nich aliasy lub skrypty powłoki, jeśli chcesz.


2

Przyczyną problemu jest to, że pylint powinien pochodzić ze skryptów konsoli punktu wejścia dla / usr / local / bin / pylint2 i / usr / local / bin / pylint3. Należy to uznać za błąd.

Następujące nie działa; nadal działa pylint2:

python3 -m pylint p3file.py

Z powodzeniem korzystam:

python2 /usr/local/bin/pylint p2file.py
python3 /usr/local/bin/pylint p3file.py

0

Jest to odpowiedź na dobrą odpowiedź Simonsa. Właśnie pomyślałem o tym w inny sposób i pomyślałem, że może być przydatny dla osób poszukujących rozwiązań dla wielu wersji Pythona / Pylinta.

Instalowanie pylint dla wersji 3.x i utrzymywanie domyślnej wersji 2.7 lub odwrotnie można łatwo wykonać za pomocą virtualenv.

Utwórz swoje wirtualne środowisko. w env podczas aktywowanego biegu

    pip install pylint

tutaj możesz następnie dowiedzieć się, gdzie env umieścił twój python i pylint

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

i wtedy

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

W takim razie wystarczy skonfigurować ide, aby używał tej ścieżki prowadzącej i / lub ścieżki python. Wiem, że działa z Sublime3, więc użyję tego w poniższym przykładzie.

w Sublime w górnym menu nagłówka wybierz Preferencje> Ustawienia pakietu> Pylinter> Ustawienia - Użytkownik.

To tylko obiekt Jsona. Ustaw

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

Zapisz plik. Tworzę również kopię pliku i przechowuję go w tym katalogu venv, dzięki czemu mogę łatwo przełączać się, kopiując i wklejając tę ​​konfigurację, gdy potrzebuję tego lintera. Kiedy tego nie robię, po prostu resetuję ustawienia Pylinter.sublime z powrotem do domyślnych dla użytkownika i wydaje się to najłatwiejszym sposobem, jaki znalazłem. Przykro mi, ale nie znam poleceń systemu Windows lub włożyłbym je tam.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.