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

Colin W. cjwilliams43 at gmail.com
Mon Nov 2 00:32:14 CET 2009


Robert Kern wrote:
> 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 .
> 
Doesn't it make sense to avoid the use of names like module or package, 
even though they are permitted.

Colin W.



More information about the Python-list mailing list