Мы были давними поклонниками pylint
. Его статический анализ стал важной частью всех наших проектов python и сэкономил массу времени, преследуя непонятные ошибки. Но после обновления от 1.3 -> 1.4 почти все скомпилированные c-расширения приводят к ошибкам E1101 (без членов).pylint 1.4 сообщает E1101 (не входит) на всех расширениях C
Проекты, которые ранее проходили отлично, через pylint
1.3 теперь жалуются почти на каждый элемент расширения C с E1101. Мы были вынуждены отключить ошибки E1101, но это существенно умаляет полезность pylint
.
Например, это вполне допустимо использование lxml
пакета
r"""valid.py: demonstrate pylint 1.4 error"""
from lxml import etree
print etree.Element('mydoc')
Выполнить это через pylint
, и он сообщает:
$ pylint -rn valid.py
No config file found, using default configuration
************* Module valid
E: 3, 6: Module 'lxml.etree' has no 'Element' member (no-member)
Но это вполне допустимо:
$ python valid.py
<Element mydoc at 7fddf67b1ba8>
Вот где это становится действительно странно. Очень небольшая горстка расширений C, кажется, работают просто отлично через pylint
, например .:
r"""valid2.py: this one works fine"""
import sqlite3
print sqlite3.version
$ pylint -rn valid2.py
No config file found, using default configuration
Мой вопрос, кто-нибудь еще видел это? И если да, согласитесь ли вы поделиться своим обходом/решением?
Мы экспериментировали с попытками создания плагинов для подавления этих предупреждений (http://docs.pylint.org/plugins.html#enter-plugin), но мы возникли трудности изготовления головы или хвосты документы - и astroid
базового класса убер-комплекс и бросает вызов нашей попытки его перехватить.
Для настоящих бонусных баллов (и нашей вечной благодарности) мы хотели бы понять, что изменилось в pylint
. Мы будем рады исправить код (или, по крайней мере, опубликовать документ с лучшей практикой для авторов расширения C), который удовлетворит pylint
.
детали платформы
$ pylint --version
No config file found, using default configuration
pylint 1.4.0,
astroid 1.3.2, common 0.63.2
Python 2.7.5 (default, Jul 1 2013, 18:09:11)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)]
Спасибо очень много. Однако я должен отметить, что вариант 3, к сожалению, не работает с некоторыми пакетами STL, например, «многопроцессорность». – 4ae1e1
Для # 4 эта документация, по-видимому, напрямую касается того, как исправить ложные положительные 'no-member' - http://docs.pylint.org/plugins.html –
@SpainTrain Link мертв. – ppperry