Bugs item #977250, was opened at 2004-06-22 08:55 Message generated for change (Comment added) made by loewis You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=105470&aid=977250&group_id=5470
Category: Parser/Compiler Group: None >Status: Closed >Resolution: Invalid Priority: 5 Submitted By: Alexandre (kuskakus) Assigned to: Nobody/Anonymous (nobody) Summary: Double __init__.py executing Initial Comment: There is some strange feature, looking like a bug. I have 'pkg' dir with 2 files: ./pkg/__init__.py print '__init__.py' ./pkg/test.py print 'test.py' import __init__ Python 2.3.4 (#53, May 25 2004, 21:17:02) >>> import pkg.test __init__.py test.py __init__.py With '-v' option: >>> import pkg.test import pkg # directory pkg # pkg\__init__.pyc matches pkg\__init__.py import pkg # precompiled from pkg\__init__.pyc __init__.py # pkg\test.pyc matches pkg\test.py import pkg.test # precompiled from pkg\test.pyc test.py # pkg\__init__.pyc matches pkg\__init__.py import pkg.__init__ # precompiled from pkg\__init__.pyc __init__.py Why __init__.py executed two times? ---------------------------------------------------------------------- >Comment By: Martin v. Löwis (loewis) Date: 2005-01-30 00:41 Message: Logged In: YES user_id=21627 I agree with that analysis; closing this as invalid. ---------------------------------------------------------------------- Comment By: Paul Moore (pmoore) Date: 2005-01-29 23:02 Message: Logged In: YES user_id=113328 Essentially, because pkg\__init__.py is loaded into sys.modules under *two* names. First, as pkg (as part of the process of importing pkg.test) and then as pkg.__init__ (explicitly in pkg\test.py). As the source is loaded twice, the print is executed twice. While subtle, this is not a bug. To demonstrate: >>> import sys >>> orig = set(sys.modules.keys()) >>> import pkg.test init init test >>> set(sys.modules.keys()) - orig set(['pkg.test', 'pkg', 'pkg.__init__']) You see, both pkg and pkg.__init__ are separately in sys.modules (even though they refer to the same file). In essence, it is incorrect to import __init__ directly - always import the package. If test.py had said "import pkg", you wouldn't have seen this behaviour, but nothing else would have changed. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=105470&aid=977250&group_id=5470 _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com