Py3: Import relative path module

Peter Otten __peter__ at web.de
Wed Nov 3 10:02:34 EDT 2010


Peter Otten wrote:

> Peter Otten wrote:
> 
>> Gnarlodious wrote:
>> 
>>> On Nov 3, 2:51 am, Peter Otten wrote:
>>> 
>>>> Slightly generalized: have the importing module print its __name__.
>>>> There has to be at least one dot in the name for
>>>>
>>>> from .. import whatever
>>>>
>>>> to succeed.
>>> 
>>> Just spent about 3 hours trying every permutation I could think of,
>>> and searching Google for exactly how to do it, but all I get is:
>>> 
>>> ValueError: Attempted relative import in non-package
>>> 
>>> How do I import a module so that a dot will appear in its name?
>> 
>> Make sure the no path in sys.path leads into a directory that contains an
>> __init__.py. In particular, ensure that you aren't invoking the python
>> interpreter from a working directory that contains an __init__.py and
>> that the main script is in a directory that doesn't contain an
>> __init__.py.
>> 
>> Peter
> 
> Here's a working example that you can use as a starting point:
> 
> $ tree
> .
> |-- alpha
> |   |-- __init__.py
> |   |-- beta
> |   |   |-- __init__.py
> |   |   `-- one.py
> |   `-- two.py
> `-- main.py
> 
> 2 directories, 5 files
> $ cat main.py
> import alpha.beta.one
> $ cat alpha/beta/one.py
> from ..alpha import two
> $ cat alpha/two.py
> print "success!"
> $ python main.py
> success!

Hmm, now I'm puzzled myself. 

> $ cat alpha/beta/one.py
> from ..alpha import two

That line should have been

from .. import two

For some reason (bug?) it seems to work with and without the extra alpha.

Peter



More information about the Python-list mailing list