Why 'import module' will not import module.py but the directory module?
Robert Kern
robert.kern at gmail.com
Sat Oct 31 20:29:43 EDT 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