Lots of E1101 in standard modules after upgrading pylint to 1.4.0
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? Thanks!
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?
Hi, this might be a bug in astroid, I'll have a look at it later this week. // Torsten 2014-11-26 15:41 GMT+01:00 Paul Smith <paul@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@python.org https://mail.python.org/mailman/listinfo/code-quality
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')
Thanks! // Torsten 2014-11-26 22:00 GMT+01:00 Torsten Marek <shlomme@gmail.com>:
Hi,
this might be a bug in astroid, I'll have a look at it later this week.
// Torsten
2014-11-26 15:41 GMT+01:00 Paul Smith <paul@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@python.org https://mail.python.org/mailman/listinfo/code-quality
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@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@python.org https://mail.python.org/mailman/listinfo/code-quality
On Wed, 2014-11-26 at 17:04 -0500, Paul Smith wrote:
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
OK, if I apply the patch below to astroid it seems to fix the problem... not sure if this is correct or not. --- a/astroid/modutils.py 2014-11-26 17:07:17.110110766 -0500 +++ b/astroid/modutils.py 2014-11-26 17:07:47.846275548 -0500 @@ -66,7 +66,7 @@ # off the detection logic for standard library modules, thus the # workaround. STD_LIB_DIRS = [ - get_python_lib(standard_lib=True, prefix=sys.prefix), + get_python_lib(standard_lib=True, prefix=sys.exec_prefix), get_python_lib(standard_lib=True)] if os.name == 'nt': STD_LIB_DIRS.append(os.path.join(sys.prefix, 'dlls'))
On Wed, 2014-11-26 at 17:14 -0500, Paul Smith wrote:
if os.name == 'nt': STD_LIB_DIRS.append(os.path.join(sys.prefix, 'dlls'))
Also, I don't use this on Windows but this looks odd to me: wouldn't the "dlls" directory appear underneath exec_prefix, not prefix?
Yeah, that looks like the problem. Let me play around with this a little bit, there are some subtleties with virtualenvs. We'll have an official fix soon. // Torsten 2014-11-26 23:27 GMT+01:00 Paul Smith <paul@mad-scientist.net>:
On Wed, 2014-11-26 at 17:14 -0500, Paul Smith wrote:
if os.name == 'nt': STD_LIB_DIRS.append(os.path.join(sys.prefix, 'dlls'))
Also, I don't use this on Windows but this looks odd to me: wouldn't the "dlls" directory appear underneath exec_prefix, not prefix?
Fixed at head. Until there's a new release, you can also use the hidden pylint option --unsafe-load-any-extension=y // Torsten 2014-11-27 19:35 GMT+01:00 Torsten Marek <shlomme@gmail.com>:
Yeah, that looks like the problem. Let me play around with this a little bit, there are some subtleties with virtualenvs. We'll have an official fix soon.
// Torsten
2014-11-26 23:27 GMT+01:00 Paul Smith <paul@mad-scientist.net>:
On Wed, 2014-11-26 at 17:14 -0500, Paul Smith wrote:
if os.name == 'nt': STD_LIB_DIRS.append(os.path.join(sys.prefix, 'dlls'))
Also, I don't use this on Windows but this looks odd to me: wouldn't the "dlls" directory appear underneath exec_prefix, not prefix?
participants (2)
-
Paul Smith
-
Torsten Marek