Попытка запустить Pylint в Windows 7 и Python 3.3
Я знал, что этот общий вопрос не нов, но, похоже, моя личная проблема с ним.
Я пытаюсь установить pylint под Windows 7 для Python 3.3 (Да, я знаю, что он не поддерживается, но я знаю, что это возможно - потому что мой коллега сделал это, но, к сожалению, его обход известных проблем не работал на моем компьютере - и у него Windows 8...)
В это время я установил python 3.3 и сначала попытался установить pylint через pip, но это не удалось.
Поиск и некоторые разговоры с моим коллегой принесли этот ответ: Не повезло, что pylint для Python 3 был установлен.
Мне удалось установить pylint с этими инструкциями, но одна из зависимостей (logilab-astng) не удалась.
Я проверил скрипт setup.py и понял, что преобразование "2to3" не запускается на моем компьютере (думаю, из-за проблем с путями) - я перенастроил преобразование, и оно запустилось.
После этого все процессы установки (pylint, logilab-astng, logilab-common) завершились успешно, но если я запустил pylint, я получил следующее сообщение:
G:\Path\to\project>pylint --rcfile .\pylint.rc modulename
Traceback (most recent call last):
File "C:\Program Files (x86)\Python33\Scripts\pylint-script.py", line 9, in <module>
load_entry_point('pylint==0.27.0', 'console_scripts', 'pylint')()
File "C:\Program Files (x86)\Python33\lib\site-packages\pylint-0.27.0-py3.3.egg\pylint\__init__.py", line 21, in run_pylint
Run(sys.argv[1:])
File "C:\Program Files (x86)\Python33\lib\site-packages\pylint-0.27.0-py3.3.egg\pylint\lint.py", line 991, in __init__
linter.check(args)
File "C:\Program Files (x86)\Python33\lib\site-packages\pylint-0.27.0-py3.3.egg\pylint\lint.py", line 587, in check
self.check_astng_module(astng, walker, rawcheckers)
File "C:\Program Files (x86)\Python33\lib\site-packages\pylint-0.27.0-py3.3.egg\pylint\lint.py", line 666, in check_astng_module
walker.walk(astng)
File "C:\Program Files (x86)\Python33\lib\site-packages\pylint-0.27.0-py3.3.egg\pylint\utils.py", line 600, in walk
self.walk(child)
File "C:\Program Files (x86)\Python33\lib\site-packages\pylint-0.27.0-py3.3.egg\pylint\utils.py", line 597, in walk
cb(astng)
File "C:\Program Files (x86)\Python33\lib\site-packages\pylint-0.27.0-py3.3.egg\pylint\checkers\variables.py", line 510, in visit_import
module = next(node.infer_name_module(parts[0]))
File "C:\Program Files (x86)\Python33\lib\site-packages\logilab_astng-0.24.2-py3.3.egg\logilab\astng\bases.py", line 304, in wrapped
for res in _func(node, context, **kwargs):
File "C:\Program Files (x86)\Python33\lib\site-packages\logilab_astng-0.24.2-py3.3.egg\logilab\astng\inference.py", line 181, in infer_imp
ort
yield self.do_import_module(name)
File "C:\Program Files (x86)\Python33\lib\site-packages\logilab_astng-0.24.2-py3.3.egg\logilab\astng\mixins.py", line 117, in do_import_mo
dule
return mymodule.import_module(modname, level=level)
File "C:\Program Files (x86)\Python33\lib\site-packages\logilab_astng-0.24.2-py3.3.egg\logilab\astng\scoped_nodes.py", line 342, in import
_module
return MANAGER.astng_from_module_name(absmodname)
File "C:\Program Files (x86)\Python33\lib\site-packages\logilab_astng-0.24.2-py3.3.egg\logilab\astng\manager.py", line 136, in astng_from_
module_name
return self.astng_from_file(filepath, modname, fallback=False)
File "C:\Program Files (x86)\Python33\lib\site-packages\logilab_astng-0.24.2-py3.3.egg\logilab\astng\manager.py", line 107, in astng_from_
file
return ASTNGBuilder(self).file_build(filepath, modname)
File "C:\Program Files (x86)\Python33\lib\site-packages\logilab_astng-0.24.2-py3.3.egg\logilab\astng\builder.py", line 129, in file_build
node = self.string_build(data, modname, path)
File "C:\Program Files (x86)\Python33\lib\site-packages\logilab_astng-0.24.2-py3.3.egg\logilab\astng\builder.py", line 135, in string_buil
d
module = self._data_build(data, modname, path)
File "C:\Program Files (x86)\Python33\lib\site-packages\logilab_astng-0.24.2-py3.3.egg\logilab\astng\builder.py", line 162, in _data_build
module = self.rebuilder.visit_module(node, modname, package)
File "C:\Program Files (x86)\Python33\lib\site-packages\logilab_astng-0.24.2-py3.3.egg\logilab\astng\rebuilder.py", line 616, in visit_mod
ule
newnode.body = [self.visit(child, newnode) for child in node.body]
File "C:\Program Files (x86)\Python33\lib\site-packages\logilab_astng-0.24.2-py3.3.egg\logilab\astng\rebuilder.py", line 616, in <listcomp
>
newnode.body = [self.visit(child, newnode) for child in node.body]
File "C:\Program Files (x86)\Python33\lib\site-packages\logilab_astng-0.24.2-py3.3.egg\logilab\astng\rebuilder.py", line 137, in visit
return self._visit_meths[cls](node, parent)
File "C:\Program Files (x86)\Python33\lib\site-packages\logilab_astng-0.24.2-py3.3.egg\logilab\astng\rebuilder.py", line 471, in visit_fun
ction
newnode.body = [self.visit(child, newnode) for child in node.body]
File "C:\Program Files (x86)\Python33\lib\site-packages\logilab_astng-0.24.2-py3.3.egg\logilab\astng\rebuilder.py", line 471, in <listcomp
>
newnode.body = [self.visit(child, newnode) for child in node.body]
File "C:\Program Files (x86)\Python33\lib\site-packages\logilab_astng-0.24.2-py3.3.egg\logilab\astng\rebuilder.py", line 137, in visit
return self._visit_meths[cls](node, parent)
File "C:\Program Files (x86)\Python33\lib\site-packages\logilab_astng-0.24.2-py3.3.egg\logilab\astng\rebuilder.py", line 450, in visit_for
newnode.body = [self.visit(child, newnode) for child in node.body]
File "C:\Program Files (x86)\Python33\lib\site-packages\logilab_astng-0.24.2-py3.3.egg\logilab\astng\rebuilder.py", line 450, in <listcomp
>
newnode.body = [self.visit(child, newnode) for child in node.body]
File "C:\Program Files (x86)\Python33\lib\site-packages\logilab_astng-0.24.2-py3.3.egg\logilab\astng\rebuilder.py", line 137, in visit
return self._visit_meths[cls](node, parent)
File "C:\Program Files (x86)\Python33\lib\site-packages\logilab_astng-0.24.2-py3.3.egg\logilab\astng\rebuilder.py", line 540, in visit_if
newnode.body = [self.visit(child, newnode) for child in node.body]
File "C:\Program Files (x86)\Python33\lib\site-packages\logilab_astng-0.24.2-py3.3.egg\logilab\astng\rebuilder.py", line 540, in <listcomp
>
newnode.body = [self.visit(child, newnode) for child in node.body]
File "C:\Program Files (x86)\Python33\lib\site-packages\logilab_astng-0.24.2-py3.3.egg\logilab\astng\rebuilder.py", line 137, in visit
return self._visit_meths[cls](node, parent)
File "C:\Program Files (x86)\Python33\lib\site-packages\logilab_astng-0.24.2-py3.3.egg\logilab\astng\rebuilder.py", line 391, in visit_dis
card
newnode.value = self.visit(node.value, newnode)
File "C:\Program Files (x86)\Python33\lib\site-packages\logilab_astng-0.24.2-py3.3.egg\logilab\astng\rebuilder.py", line 141, in visit
visit_method = getattr(self, visit_name)
AttributeError: 'TreeRebuilder3k' object has no attribute 'visit_yieldfrom'
Я с нетерпением жду ваших идей!
1 ответ
Проблема в том, что logilab-astng, который содержит представление ast, используемое pylint, еще не поддерживает узлы "yieldfrom", которые были введены в python 3.3.
Вы можете попробовать патч ниже, это должно решить проблему:
diff --git a/rebuilder.py b/rebuilder.py
--- a/rebuilder.py
+++ b/rebuilder.py
@@ -877,10 +877,12 @@ class TreeRebuilder3k(TreeRebuilder):
newnode.handlers = [self.visit(child, newnode) for child in node.handlers]
newnode.orelse = [self.visit(child, newnode) for child in node.orelse]
newnode.set_line_info(newnode.last_child())
return newnode
+ def visit_yieldfrom(self, node, parent):
+ return self.visit_yield(node, parent)
if sys.version_info >= (3, 0):
TreeRebuilder = TreeRebuilder3k