I can run :!flake8 % and get output, but syntastic never shows any errors.
I can set 'makeprg' and 'errorformat' manually and run :lmake, and it seems to parse it correctly. :llist shows the expected error.
Even more info:
:echo executable('flake8') reports true
similar problem using !pyflakes and :echo executable('flake8') reports 1
OK, I got this working in the end using this tip http://stackoverflow.com/a/11444255/366221, with a tweak to the ~dp0 (cf my comment)