How to use flake8 for Python 3 ?

Question:

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?

Asked By: Cody

||

Answers:

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

Answered By: James Mills

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. 🙂

Answered By: ZyusAn

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
Answered By: Legolas Bloom

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
Answered By: tom-james-watson

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.

Answered By: Tom Hundt

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

$ python --version
Python 3.8.3

$ python -m pip install flake8
Answered By: Azam
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.