> Le Mon, 11 May 2009 21:44:09 +0100 (BST), > man...@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: /general __init__.py >> from address_book import AddressBook address_book.py /groups __init__.py >> from contact_group import ContactGroup contact_group.py 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@python.org >> http://mail.python.org/mailman/listinfo/tutor >> > > > ------ > la vita e estrany > _______________________________________________ > Tutor maillist - Tutor@python.org > http://mail.python.org/mailman/listinfo/tutor > _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor