如何在Python 3中使用flake8?

29 投票
6 回答
20787 浏览
提问于 2025-04-18 06:15

在这个代码片段中,

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。

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来运行 pyflakesflake8,而不是Python 2.x。这样做是有道理的 :)

所以可以这样做:

/usr/bin/python3 -m pyflakes foo.py

请查看:http://codepad.org/9BKxSZaD

撰写回答