[code-quality] Importing __version__ / __author__ without causing an unused import error

Ian Cordasco graffatcolmingov at gmail.com
Wed Jul 27 13:30:40 EDT 2016


On Wed, Jul 27, 2016 at 11:05 AM, Jack Wilsdon <jack.wilsdon at gmail.com> wrote:
> Hi,
>
> I'm looking for a way to import __version__ / __author__ into my __init__.py without causing an F401 error.
>
> Defining __version__ normally works fine:
>
>> init.py
>
>     __version__ = '1.0.0'
>     __author__ = 'Jack Wilsdon <jack.wilsdon at gmail.com>
>
> But if I define them in an external file and import them, I get an F401 error:
>
>> __version__.py
>
>     __version__ = '1.0.0'
>     __author__ = 'Jack Wilsdon <jack.wilsdon at gmail.com>
>
>> init.py
>
>     from __version__ import __version__, __author__  # I get an F
>
>> flake8 __init__.py
>
>     __init__.py:1:1: F401 '__version.__author__' imported but unused
>     __init__.py:1:1: F401 '__version.__version__' imported but unused
>
> Is there anything I can do about this? I know I could add "# noqa: F401" to the end of the import, but it just feels like a bit of a "hack" to me.
>
> I could also add __version__ and __author__ to __all__ in init.py, but then they would be imported if anyone used "from my_module import *", which is definitely not what I want.
>
> Is this a bug in flake8/pyflakes or just my understanding of how __version__ and __author__ are exempt from F401 errors normally.

I wouldn't consider it a bug in either. There might be a case for
special-casing some dunder variables but it's not really a bug. I'm
not sure why you think __version__ and __author__ are exempt from F401
errors normally. F401 means they were imported without being used.

If you mean, why don't I see F401 when I define them in __init__.py to
start with, then that's because like all module globals, pyflakes does
not check to see if it's used later because module constants may not
need to be used.


More information about the code-quality mailing list