I'm stil totally stuck with relative imports, i' ve tried the example tree
from PEP 328 without any result:
package/
__init__.py
subpackage1/
__init__.py
moduleX.py
moduleY.py
subpackage2/
__init__.py
moduleZ.py
moduleA.py
Assuming that the current file is either moduleX.py or
subpackage1/__init__.py, following are correct usages of the new
syntax:
from .moduleY import spam
from .moduleY import spam as ham
from . import moduleY
from ..subpackage1 import moduleY
from ..subpackage2.moduleZ import eggs
from ..moduleA import foo
from ...package import bar
from ...sys import path
I always get:
Traceback (most recent call last):
File "moduleY.py", line 1, in <module>
from ..moduleA import a
ValueError: Attempted relative import in non-package
2011/2/27 Frank Millman <[email protected]>
>
> "Steven D'Aprano" <[email protected]> wrote in message
> news:[email protected]...
>
> On Sun, 27 Feb 2011 12:08:12 +0200, Frank Millman wrote:
>>
>> Assume the following structure -
>>>
>>> main.py
>>> /pkg
>>> __init__.py
>>> mod1.py
>>> mod2.py
>>>
>>> main.py
>>> from pkg import mod1
>>>
>>> mod1.py
>>> import mod2
>>>
>>> mod2.py
>>> import mod1
>>>
>>
>>
>> If you change the "import mod*" lines to "import pkg.mod*" it works for
>> me in Python 3.1 and 3.2.
>>
>> According to my understand of PEP 328, "from . import mod*" should work,
>> but I agree with you that it doesn't.
>>
>> If you get rid of the circular import, it does work. So I suspect a bug.
>>
>>
>>
> Thanks, Steven.
>
> I confirm that 'import pkg.mod* works. Unfortunately I am using
> sub-packages as well, which means that to refer to an object in the
> sub-package I need to use w.x.y.z every time, which gets to be a lot of
> typing! I will stick to my hack of putting the package name in sys.path for
> now, unless someone comes up with a better idea.
>
> Frank
>
>
>
> --
> http://mail.python.org/mailman/listinfo/python-list
>
--
http://mail.python.org/mailman/listinfo/python-list