[Python-Dev] Import semantics?

Ethan Furman ethan at stoneleaf.us
Sat Jun 9 00:41:06 CEST 2012


Dan Stromberg wrote:
> On Fri, Jun 8, 2012 at 3:16 PM, Ethan Furman wrote:
> Dan Stromberg wrote:
>> Did the import semantics change in cpython 3.3a4?
>> 
>> I used to be able to import treap.py even though I had a treap
>> directory in my cwd.  With 3.3a4, I have to rename the treap
>> directory to see treap.py.
> 
> Check out PEP 420 -- Implicit Namespace Packages
> [http://www.python.org/dev/peps/pep-0420/]
> 
> 
> Am I misinterpreting this?  It seems like according to the PEP, I should 
> have still been able to import treap.py despite having a treap/.  But I 
> couldn't; I had to rename treap/ to treap-dir/ first.
> 
> During import processing, the import machinery will continue to iterate 
> over each directory in the parent path as it does in Python 3.2. While 
> looking for a module or package named "foo", for each directory in the 
> parent path:
> 
>         * If <directory>/foo/__init__.py is found, a regular package is
>           imported and returned.
>         * If not, but <directory>/foo.{py,pyc,so,pyd} is found, a module
>           is imported and returned. The exact list of extension varies
>           by platform and whether the -O flag is specified. The list
>           here is representative.
>         * If not, but <directory>/foo is found and is a directory, it is
>           recorded and the scan continues with the next directory in the
>           parent path.
>         * Otherwise the scan continues with the next directory in the
>           parent path.

I do not understand PEP 420 well enough to say if this is intentional or 
a bug -- thoughts?

~Ethan~


More information about the Python-Dev mailing list