Why 'import module' will not import module.py but the directory module?

Robert Kern robert.kern at gmail.com
Sun Nov 1 01:29:43 CET 2009


On 2009-10-31 19:16 PM, Peng Yu wrote:
> On Sat, Oct 31, 2009 at 7:02 PM, Robert Kern<robert.kern at gmail.com>  wrote:
>> On 2009-10-31 18:51 PM, Peng Yu wrote:
>>>
>>> If I have both the directory 'module' and the file 'module.py' in a
>>> directory in $PYTHONPATH, python will import 'module' rather than
>>> 'module.py'. I'm wondering what is the design rationale of setting
>>> higher priorities to directories. Is there a way to reverse the
>>> priority?
>>
>> You mean that you have a package "module/"? With an __init__.py? Plain
>> directories that aren't packages shouldn't be imported by Python.
>
> Yes. I mean a pakcage 'module/' with an __init__.py.
>
>> No, you can't reverse the priority between packages and modules. I'm not
>> sure why that would help you. The package would then be inaccessible if you
>> did. If it's inaccessible, then why have it at all?
>
> Why the package 'module' has to be inaccessible? I can 'import
> module.part1' to access the component of the package.

No, it wouldn't. It's a moot point because Python picks the package first, but 
if it did pick modules before packages, then sys.modules['module'] would point 
to the module from module.py and not module/__init__.py . "import module.part1" 
first executes "import module", then looks in there to determine who to resolve 
"module.part1". Since sys.modules['module'] is a regular module and not the 
package, it wouldn't find module/part1.py .

-- 
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma
  that is made terrible by our own mad attempt to interpret it as though it had
  an underlying truth."
   -- Umberto Eco




More information about the Python-list mailing list