Pylint не указывает на virtualenv python

Я новичок в python и currenty. Я пытаюсь использовать pylint для проверки качества кода. У меня проблема. Моя пилинга не указывает на virtualenv python interpreter. Вот результат, который я получаю, когда запускаю pylint -version

 $ pylint --version
   pylint 0.21.1,
   astng 0.20.1, common 0.50.3
   Python 2.6.6 (r266:84292, Jul 10 2013, 22:48:45)
   [GCC 4.4.7 20120313 (Red Hat 4.4.7-3)]

В virtualenv у меня установлен python 2.7. Будете ли вы прибегать к помощи, если кто-то может указать мне, как это решить.

Ответы

Ответ 1

Дешевый трюк - запустить (глобальную) пилингу, используя виртуальный питон. Вы можете сделать это, используя python $(which pylint) вместо pylint. На zsh вы также можете сделать python =pylint.

Ответ 2

Я достаточно уверен, что вам нужно установить pylint под свою виртуальную среду, а затем запустить этот экземпляр.

Обновление - упростите жизнь:

Я бы предположил, что любой, кто много работает в виртуальных средах, создает командный файл (в известном месте или на пути) или bash script с чем-то вроде следующего: getlint.bat:

pip install pylint

Вызов этой после активации виртуальной среды установит pylint в эту виртуальную среду. Если вы, вероятно, будете в автономном режиме или имеете плохое подключение к Интернету, которое вы можете, один раз, когда у вас есть хорошее интернет-соединение (возможно, один раз для каждого из python 2 и 3):

mkdir C:\Some\Directory\You\Will\Leave\Alone
pip download --dest=C:\Some\Directory\You\Will\Leave\Alone pylint

Что загрузит pylint и его зависимости в C:\Some\Directory\You\Will\Leave\Alone, и вы можете изменить getlint.bat следующим образом:

pip install pylint --find-links=C:\Some\Directory\You\Will\Leave\Alone

Затем он будет использовать предварительно загруженные версии.

Ответ 3

Я столкнулся с этой проблемой. Моим решением было просто отредактировать программу pylint shebang, например... (ваш путь к pylint может отличаться от моего, хотя)

$ sudo vim /usr/bin/pylint

Замена:

#!/usr/bin/python

С

#!/usr/bin/env python

Ответ 4

Ответ Noufal Ibrahim работает, если вы выполняете pylint вручную.

Если вы выполняете pylint из вашего редактора /IDE, вам нужно правильно настроить плагин.

Это может показаться сложным. Это можно считать ошибкой каждого IDE/плагина, но это как.

Изменение /usr/bin/pylint для записи #!/usr/bin/env python, как предложено в другом ответе, исправляет это для каждого использования pylint (ручное использование или любая интеграция редактора).

Однако, по крайней мере, в Debian использование #!/usr/bin/python является выбором дизайна, а не ошибкой. Ссылка, которую я предоставляю, не объясняет обоснования. Составитель пакета pylint не хочет перемещаться в #!/usr/bin/env python.

Чтобы избежать изменения этого системного файла, можно создать копию /usr/bin/pylint в /usr/local/bin:

cp /usr/bin/pylint /usr/local/bin/pylint
vi usr/local/bin/pylint # Edit the file to use /usr/bin/env python

Это не будет нарушено обновлением pylint, но все равно нарушает "предпочтительный выбор" Debian.

Этот метод требует прав root. Непривилегированный пользователь может создать псевдоним

alias pylint='/usr/bin/env python $(which pylint)'.

Вероятно, существуют веские причины, по которым #!/usr/bin/python является предпочтительной формой, хотя я их не понимаю.

В настоящее время я готов пойти на компромисс с этим. Использование непривычной формы (создание /usr/local/bin/pylint или использование псевдонима) позволяет мне не вытягивать мои волосы, выясняя, как правильно настроить свой лингер (если это возможно даже).

Ответ 5

Проблема была решена в чате (ссылка в комментариях).

Проблема заключалась в использовании sudo yum install pylint, поскольку она установила pylint в глобальном env. Решение заключалось в использовании следующей команды:

pip install -i http://f.pypi.python.org/simple pylint

Обратите внимание на использование -i, поскольку регулярный индекс, по-видимому, был сломан для искателя.

Ответ 6

Я знаю, что прошло некоторое время, поскольку на этот вопрос был дан ответ, но я просто подумал, что я должен оставить этот пост здесь, если кто-то другой столкнется с той же проблемой.

Если по какой-то причине вам нужно сохранить pylint в глобальном пространстве вместо вашей виртуальной среды, вы можете использовать здесь рекомендацию: PyLint + VirtualEnv.

В основном говорится о настройке pylint с помощью init-hook и версии кодировки программы Python, которая будет использовать глобальную pylint и загружать остальную среду.

Ответ 7

Вы можете добраться туда, вызвав интерпретатор целевого python:

./env/bin/python -m pylint ...

# or in an already active env
python -m pylint ...

Ответ 8

Я использую комбинацию Syntastic + Pylint, и, поскольку у меня есть много разных virtualenv, над которыми я могу работать в любой момент времени, я создал оболочку над командой virtualenv, которая, помимо прочего, устанавливает pylint после все требования.

Таким образом, всякий раз, когда я активирую virtualenv, я получаю свою собственную версию pylint.

Надеюсь, что это поможет, и спасибо за отзыв об удалении глобального из @briford-wylie

Ответ 9

Столкнулся с той же проблемой только сегодня. Продолжая ответ ThorSummoner, при использовании Pylint с pylint-django внутри виртуальной среды, такой как Pipenv, обязательно вызовите pylint, используя целевой интерпретатор python -m pylint (python -m pylint)

Хороший подход, который будет работать локально и на вашем CI, - это записать команду lint в разделе сценариев вашего Pipfile:

[scripts]
lint = "python -m pylint [--options] all-my-modules-names..."

Тогда вызвать Pylint так же просто, как:

pipenv run lint