Установка Pylint для Python3 в Ubuntu


31

Насколько я понимаю, последний выпуск Pylint (1.0.0 на момент написания этой статьи) имеет поддержку Python 3, но я не могу заставить его работать на 64-битной Ubuntu 13.04 с Python 3.3.

Я следовал инструкциям по установке на сайте PyPi , и Pylint 1.0.0, кажется, успешно установлен ( pylint --versionвозвращает pylint 1.0.0) и работает с кодом Python 2.7, но сообщает о синтаксической ошибке, когда видит нелокальные операторы и тому подобное.

Что дает? Существуют ли специальные инструкции по установке Pylint в Ubuntu?

Ответы:


27

Питон 2 и 3 - отдельные звери. Если вы устанавливаете скрипт в пакеты сайтов одной версии, вы не устанавливаете его в другой.

Я бы установил его через pip, но вам понадобится правильная версия pip.

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

Это заменит вашу версию 2.7. Мы можем подтвердить это, проверив 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')()
    )

Отлично. Это работает. Однако я отмечу, что эти команды не заменили версию 2.7 на моей машине. Мне пришлось удалить его из 2.7 dist-пакетов, а затем снова запустить команды.
Джеррада Генсона

3
@ Оли, так что, если я установлю Pylint для Python 3, то версия Python 2 по умолчанию не будет работать?
скажем

5
Я обнаружил, что с новыми версиями (на Python 3.5 и т.д. Nov 2016) есть также pylint3 который можно установить с: sudo apt install pylint3.
Рик Хендерсон

21

Комментарий @sayth к принятому ответу привел меня сюда: я пишу скрипты как на python 2, так и на python 3, и я хочу иметь возможность проверить любой из них на правильный набор правил. установка pylint с использованием pip3 install pylintзаписи короткого сценария, к /usr/local/binкоторому вызывается интерпретатор python3, и, следовательно, предполагается, что все проверяемые файлы являются сценариями python 3.

Чтобы обойти это, у меня теперь есть следующие файлы:

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

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

и затем, потому что мне нравится использовать pylint непосредственно из меню Geany «Build Commands», и я не могу указать разные команды для сценариев python 2 и python 3, у меня также есть ~/bin/pylint:

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

который отправляет правильную версию, нюхая Шебанг.

Не идеальный, конечно, но функциональный и, возможно, полезный для других.


11

С тех пор экосистема Pylint изменилась (после того, как был задан этот вопрос), и теперь для Python3 существует отдельная Pylint. Может быть установлен с:

sudo apt install pylint3

Работал у меня на Ubuntu 16.04.2 LTS


1
это работает и для меня. Установил pylint для python3 и сохранил pylint для python 2.
zhihong

Этот ответ является правильным для общесистемной установки.
ИСИ

7

В качестве другого метода запуска pylint на Python 2 и 3, обратите внимание, что вы можете использовать -mпереключатель Python для запуска модуля, установленного в системе в текущей версии Python, поэтому вы можете сделать

$ python2 -m pylint
$ python3 -m pylint

явно выбрать, какой вы хотите. Вы можете превратить их в псевдонимы или сценарии оболочки, если хотите.


2

Корень проблемы в том, что pylint должен поставляться с консольными сценариями точки входа для / usr / local / bin / pylint2 и / usr / local / bin / pylint3. Это следует считать ошибкой.

Следующее не работает; по-прежнему работает pylint2:

python3 -m pylint p3file.py

Вот то, что я успешно использовал:

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

0

Это в ответ на прекрасный ответ Саймонса. Я просто подумал об этом по-другому и подумал, что это может быть полезно для тех, кто ищет решения для нескольких версий python / pylint.

Установить pylint для 3.x и сохранить 2.7 по умолчанию или наоборот легко с помощью virtualenv.

Создайте свою виртуальную среду. в вашем env во время активированного запуска

    pip install pylint

здесь вы можете выяснить, где ваш env поставил ваш python и pylint

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

а потом

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

Тогда вам просто нужно настроить свой идеал на использование этого пути и / или пути Python. Я знаю, что это работает с Sublime3, поэтому я буду использовать это в примере ниже.

в Sublime в верхнем меню заголовка выберите «Настройки»> «Настройки пакета»> «Пилинтер»> «Настройки» - «Пользователь».

Это просто объект JSON. Установить

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

Сохраните файл. Я также делаю копию файла и сохраняю его в этом каталоге venv, чтобы я мог легко переключаться, копируя и вставляя этот конфиг, когда мне нужен этот линтер. Когда я этого не делаю, я просто сбрасываю Pylinter.sublime-settings обратно по умолчанию для пользователя, и это, кажется, самый простой способ, который я нашел. Извините, я не знаю команд Windows, или я бы их там ввел.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.