[code-quality] Lots of E1101 in standard modules after upgrading pylint to 1.4.0

Paul Smith paul at mad-scientist.net
Wed Nov 26 23:04:57 CET 2014


On Wed, 2014-11-26 at 22:06 +0100, Torsten Marek wrote:
> Hm, this might be a problem with standard library detection on with
> self-built Python installations.

> Can you give me the output of:

> >>> import sys
> >>> sys.path
> >>> from astroid import modutils

> >>> modutils.STD_LIB_DIRS
> >>> modutils.is_standard_module('time')

See below.  I had a few minutes to play with this and I discovered that
the version of Python and the version of logilab-common don't matter.
If I keep Python 2.7.8 and logilab-common 0.63.0 but down-rev pylint to
1.1.0 and astroid to 1.0.1, then things start to work again.

However if I upgrade EITHER (or both) of pylint (to 1.4.0) or astroid
(to 1.3.2) then I see the bad behavior.  That seems odd to me, but
that's what I see.

Here's the output you asked for from the failing install (this uses
pylint 1.1.0 and astroid 1.3.2):

 Python 2.7.8 (default, Nov 25 2014, 22:45:58)
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/opt/python/lib/python2.7/site-packages/setuptools-7.0-py2.7.egg',
'/opt/python/lib/python2.7/site-packages/docopt-0.6.2-py2.7.egg',
'/opt/python/lib/python2.7/site-packages/paramiko-1.15.1-py2.7.egg',
'/opt/python/lib/python2.7/site-packages/ecdsa-0.11-py2.7.egg',
'/opt/python/lib/python2.7/site-packages/scp-0.8.0-py2.7.egg',
'/opt/python/lib/python2.7/site-packages/boto-2.34.0-py2.7.egg',
'/opt/python/lib/python2.7/site-packages/logilab_common-0.63.0-py2.7.egg', '/opt/python/lib/python2.7/site-packages/six-1.8.0-py2.7.egg', '/opt/python/lib/python2.7/site-packages/astroid-1.3.2-py2.7.egg', '/opt/python/lib/python2.7/site-packages/pylint-1.1.0-py2.7.egg', '/opt/python/lib/python2.7/site-packages/requests-2.4.3-py2.7.egg', '/opt/python/lib/python2.7/site-packages/selenium-2.44.0-py2.7.egg', '/opt/python/lib/python2.7/site-packages/oauthlib-0.7.2-py2.7.egg', '/opt/python/lib/python2.7/site-packages/requests_oauthlib-0.4.2-py2.7.egg', '/opt/python/lib/python2.7/site-packages/jira_python-0.16-py2.7.egg', '/opt/python/lib/python27.zip', '/opt/python/lib/python2.7', '/opt/python/lib/python2.7/plat-linux2', '/opt/python/lib/python2.7/lib-tk', '/opt/python/lib/python2.7/lib-old', '/opt/python/x86_64-linux/lib/python2.7/lib-dynload', '/opt/python/lib/python2.7/site-packages', '/opt/python/x86_64-linux/lib/python2.7/site-packages']

>>> from astroid import modutils
>>> modutils.STD_LIB_DIRS
['/opt/python/lib/python2.7', '/opt/python/lib/python2.7']

>>> modutils.is_standard_module('time')
False

Hm.  Why are both paths in STD_LIB_DIRS the same?  Should one of them be
the execprefix path?

Aha!

If I reset STD_LIB_DIRS like this:

>>> modutils.STD_LIB_DIRS = ['/opt/python/lib/python2.7',
'/opt/python/x86_64-linux/lib/python2.7']

Then I get:

>>> modutils.is_standard_module('time')
True

So the problem appears to be that when I install Python I'm separating
prefix and exec_prefix, and astroid is not grokking that:

>>> sys.prefix
'/opt/python'

>>> sys.exec_prefix
'/opt/python/x86_64-linux'



>         2014-11-26 15:41 GMT+01:00 Paul Smith
>         <paul at mad-scientist.net>:
>                 On Wed, 2014-11-26 at 02:03 -0500, Paul Smith wrote:
>                 
>                 Forgot to say, I'm running on GNU/Linux Ubuntu GNOME
>                 14.10 and I've
>                 built all these tools (including python) myself from
>                 source.
>                 
>                 > Hi all; I just upgraded to a newer version of pylint
>                 and now I'm seeing
>                 > many spurious E1101 errors.
>                 >
>                 > Before I was using:
>                 >       * Python 2.7.6
>                 >       * Pylint 1.1.0
>                 >       * Astroid 1.0.1
>                 >       * logilab-common 0.61.0
>                 >
>                 > Now I've upgraded to:
>                 >       * Python 2.7.8
>                 >       * Pylint 1.4.0
>                 >       * Astroid 1.3.2
>                 >       * logilab-common 0.63.0
>                 >
>                 > Everything about this new install appears to work
>                 fine, EXCEPT pylint.
>                 >
>                 > I'm seeing tons of strange E1101 error on standard
>                 modules, like
>                 > time.sleep() and others (readline, etc.)  For
>                 example:
>                 >
>                 > $ cat sl.py
>                 > import time
>                 > time.sleep(1)
>                 >
>                 > $ python sl.py
>                 > <sleeps for 1s successfully>
>                 >
>                 > $ pylint sl.py
>                 > ************* Module sl
>                 > C:  1, 0: Missing module docstring
>                 (missing-docstring)
>                 > E:  2, 0: Module 'time' has no 'sleep' member
>                 (no-member)
>                 >
>                 > If I run this with my old setup (older
>                 python/pylint/etc.), it doesn't
>                 > complain at all.  Why am I seeing this invalid
>                 error?
>                 
>                 
>                 By "at all" I mean it doesn't complain about
>                 time.sleep(); of course I
>                 still get the missing docstring message in the old
>                 version :-).
>                 
>                 Looking at this it seems like all the members which
>                 are loaded from a
>                 shared library (e.g.,
>                 lib/python2.7/lib-dynload/time.so etc.) have this
>                 problem: I see it with datetime, readline, some socket
>                 stuff, etc.
>                 
>                 Did I break something with my installation of python
>                 or one of the
>                 packages?  How does pylint normally discover module
>                 members when the
>                 implementation is in C rather than python?
>                 
>                 _______________________________________________
>                 code-quality mailing list
>                 code-quality at python.org
>                 https://mail.python.org/mailman/listinfo/code-quality
>                 
>         
>         
> 
> 




More information about the code-quality mailing list