Search code examples
pythonmodulepackagepython-importoperator-precedence

Python: what does "import" prefer - modules or packages?


Suppose in the current directory there is a file named somecode.py, and a directory named somecode which contains an __init__.py file. Now I run some other Python script from this directory which executes import somecode. Which file will be imported - somecode.py or somecode/__init__.py?

Is there even a defined and reliable search order in which this is resolved?

Oh, and does anyone have a reference to official documentation for this behavior? :-)


Solution

  • Packages will be imported before modules. Illustrated:

    % tree .
    .
    |-- foo
    |   |-- __init__.py
    |   `-- __init__.pyc
    `-- foo.py
    

    foo.py:

    % cat foo.py 
    print 'you have imported foo.py'
    

    foo/__init__.py:

    % cat foo/__init__.py
    print 'you have imported foo/__init__.py'
    

    And from interactive interpreter:

    >>> import foo
    you have imported foo/__init__.py
    

    I have no idea where this is officially documented.

    Edit per comment: This was performed with Python 2.7 on Mac OS X 10.6.7. I also performed this using Python 2.6.5 on Ubuntu 10.10 and experienced the same result.