如何在Python 3中使用flake8?
在这个代码片段中,
def add(x:int, y:int) -> int:
return x + y
有一些函数注释,这些注释在 Python 3.0 之后才被支持。
当我对这段 Python 代码运行 flake8 时:
$ flake8 7.3.py -vv
checking 7.3.py
def add(x: int, y: int) -> int:
return x + y
7.3.py:1:11: E901 SyntaxError: invalid syntax
我收到了无效语法的错误,但这应该是有效的语法。我该如何使用 flake8 来检查只在 Python 3.x 中支持的语法呢?
6 个回答
0
你们可能应该使用虚拟环境(python3 -m venv venv; source venv/bin/activate
)... 这样一来,'python'和'pip'就会默认使用你想要的版本... 只是提个建议。
1
你需要确保你使用的是Python 3的flake8工具。在Linux系统上,你可以这样做:
sudo pip uninstall flake8
sudo pip3 install flake8
3
在Mac上使用Python 2和Python 3以及虚拟环境都能正常工作:
pip install flake8
flake8 --version
3.5.0 (mccabe: 0.6.1, pycodestyle: 2.3.1, pyflakes: 1.5.0) CPython 2.7.14 on Darwin
pip3 install flake8
python3 -m flake8 --version
3.5.0 (mccabe: 0.6.1, pycodestyle: 2.3.1, pyflakes: 1.6.0) CPython 3.6.1 on Darwin
python3 -m flake8 --exclude migrations --max-line-length=121
9
我在reddit上找到了答案(在这里):
它会使用你路径中安装的那个flake8。
所以你需要通过pip3来安装flake8,而不是pip。
在我的OSX上,
pip3 install flake8
这个对我有效。:)
20
请查看:https://bugs.launchpad.net/pyflakes/+bug/989203
注意:虽然这个错误报告显示已经有了一些解决方案,但在测试最新版本的pyflakes 0.8.1
时,仍然发现缺少Python 3的注解功能。
我想你可能需要单独提交一个新的功能请求给pyflakes。
$ cat - > foo.py
def add(x:int, y:int) -> int:
return x + y
^D
$ pyflakes --version
0.8.1
$ pyflakes foo.py
foo.py:1:10: invalid syntax
def add(x:int, y:int) -> int:
^
更新(20140514):
实际上,这个问题的解决办法是使用Python 3.x来运行 pyflakes
或 flake8
,而不是Python 2.x。这样做是有道理的 :)
所以可以这样做:
/usr/bin/python3 -m pyflakes foo.py