[Tutor] Import package module problem

mandel at themacaque.com mandel at themacaque.com
Tue May 12 09:39:00 CEST 2009

> Le Mon, 11 May 2009 21:44:09 +0100 (BST),
> mandel at themacaque.com s'exprima ainsi:
>> Hello there,
>> I have just started working with python and I have some issues
>> understanding how I should be importing modules from packages. Curretly
>> I
>> have the following tree structure:
>> general/
>>     __init__.py
>>     address_book.py
>> groups/
>>     __init__.py
>>     contact_group.py
>> where groups and general are in the same level and all the __init__.py
>> files are empty.
>> In address_book.py I want to import the ContactGroup which is at
>> contact_group.py. I have try the following posibilities:
>> from ..groups.contact_group import ContactGroup
>> from groups.contact_group import ContactGroups
>> from groups.contact_group import *
>> But I cannot get it working. I know that the third option will not work
>> because I have not set up __all__ but I do not understand why it does
>> not
>> work. I have read books and tutorials about it, but I cannot get it.
>> Am I doing something wrong? I would really appreciate a hand or pointer
>> to
>> s step by step example.
> Not sure at all, 'cause python packaging is still rather unclear for me,
> but I guess you should have module (or other names thingies) imported
> inside __init__.py; and that's precisely their main purpose (in addition
> to possibly running startup code). If I'm right, simply writing in
> groups/__init__.py
>    import contact_group
> or
>    from contact_group import ContactGroups
> should do the job. Actually, python does *not* automatically populate
> (sub-)packages' dict of names with the files in the directory (as I would
> also have expected).

Lets see if I understand what you mean, in my example I should add an
import inside __init__.py to be able to use relative imports:

   __init__.py >> from address_book import AddressBook
   __init__.py >> from contact_group import ContactGroup

Lets say I have the above, would I be able to use the following?

from ..groups.contact_group import ContactGroup

I'm trying to use this type of import to be able to bundle my unit tests
with my code and let devels work with it. I have read somewhere that
__all__ can do the trick   but it did not say how.

> [The reason why I still do not understand what python packaging, esp. the
> use of __init__ files, is supposed to bring to the developper and/or the
> user. I've read several docs several times, but they all say the same,
> even using the same examples, and none points to the actual purpose.
> Having a 'normal' py file importing names intended to be exported would do
> the same job. Anyone?]
> Denis
>> Kr,
>> Manuel
>> _______________________________________________
>> Tutor maillist  -  Tutor at python.org
>> http://mail.python.org/mailman/listinfo/tutor
> ------
> la vita e estrany
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor

More information about the Tutor mailing list