Here is a simplified example that exhibits the problem.
Parent is the parent package to sub-packages A and B.
Sub-Package A:
Parent/A/__init__.py contains "import a"
Parent/A/a.py contains:
from __future__ import absolute_import
from ..B import b
class aClass(b.bClass):
def __init__(self):
b.bClass.__init__(self)
def foo(self):
print self.x
print self.y
print self.z
Sub-Package B:
Parent/B/__init__.py contains "import b"
Parent/B/b.py contains:
class bClass:
def __init__(self):
self.x = 0
self.y = []
self.z = ''
The Parent package is located in my sys.path. The above code runs just
fine:
>>> import Parent.A
>>> a = Parent.A.a.aClass(1)
>>> a.foo()
0
However, when I run pylint for A/a.py it gives me
F0401: 9: Unable to import 'B.b' (No module named B)
and therefore of course the ensuing errors:
E1101: 14:aClass.foo: Instance of 'aClass' has no 'x' member
E1101: 15:aClass.foo: Instance of 'aClass' has no 'y' member
E1101: 16:aClass.foo: Instance of 'aClass' has no 'z' member
If I change the import syntax in Parent/A/a.py to use "from Parent.B
import b" all errors go away. This seems to indicate a problem with
intra-sub-package relative imports.
|