How to use flake8 for Python 3 ?
Asked Answered
E

6

29

In this code snippet,

def add(x:int, y:int) -> int:
    return x + y

there are function annotations that are only supported after python 3.0

When I execute flake8 for this python code:

$ 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

I got the invalid syntax error, but it should be valid syntax. How can I use flake8 to check the syntax that is only supported in Python 3.x?

Ecumenical answered 12/5, 2014 at 3:27 Comment(1)
See: bugs.launchpad.net/pyflakes/+bug/989203Spotless
S
20

See: https://bugs.launchpad.net/pyflakes/+bug/989203

NB: Whilst this bug report indicates some level of resolution, testing the latest version of pyflakes 0.8.1 this lack of Python 3 Annotations still exists.

I guess you'd have to file a separate new feature request to pyflakes.

pyflakes Bugs

$ 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:
         ^

UPDATE (20140514):

As it turns out the actual answer to this problem is to run pyflakes or flake8 under Python 3.x instead of Python 2.x. It makes sense :)

So do something like this:

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

See: http://codepad.org/9BKxSZaD

Spotless answered 12/5, 2014 at 4:4 Comment(3)
Thanks, I have submitted a bug report: bugs.launchpad.net/pyflakes/+bug/1318497Ecumenical
I got the feedback from pyflakes. We need to execute pyflakes in Python 3 to rid of that error. That is, pyflakes in python 2 can't be used fro python 3 scripts.Ecumenical
That actually makes sense! Not sure why I didn't think of that! I'll update the answer to include this! Thanks!Spotless
B
9

I've got the answer on reddit(here):

It uses whatever flake8 is installed in the Python in your path.

so you need to install flake8 by pip3, not pip.

on OSX for me,

pip3 install flake8

this works for me. :)

Brochu answered 4/6, 2017 at 12:28 Comment(1)
This worked for me too. Also i had to uninstall the homebrew version.Sidelight
U
3

worked for Mac + py2 + py3 + venv:

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
Uncritical answered 9/5, 2018 at 5:53 Comment(1)
worked with Distributor ID: Ubuntu Description: Ubuntu 18.04.1 LTS Release: 18.04 Codename: bionicLithoid
H
1

You need to ensure you are using python3's flake8. On linux you'll want to do:

sudo pip uninstall flake8
sudo pip3 install flake8
Hesketh answered 19/8, 2019 at 9:44 Comment(0)
A
0

Y'all probably should be using virtual environments (python3 -m venv venv; source venv/bin/activate)... That way, 'python' and 'pip' use the ones you want, by default... Just saying.

Aargau answered 28/2, 2020 at 18:19 Comment(0)
O
0

I had a similar issue and solved it by installing flake8 through python.

$ python --version
Python 3.8.3

$ python -m pip install flake8
Orgy answered 29/6, 2020 at 22:23 Comment(2)
this is not a valid answer to this question.Katmandu
I have same error as in the original question. I tried an accepted answer and it didn't work. I found installing through python resolved the module version conflict.Orgy

© 2022 - 2024 — McMap. All rights reserved.