Problematic behavior of the import statement when several module files have the same name.

Discussion in 'Python' started by Xif, Mar 9, 2005.

  1. Xif

    Xif Guest

    Hello Everyone!

    Here's a problem with relative imports:

    Suppose I have a package called some_package (in a separate directory
    included in the PYTHONPATH, with an __init__.py file etc.)

    This package has a module inside the directory, called "database", and
    therefore residing in the file some_package/database.py.

    Now, what if there's another module, for example inside the
    site-packages directory, with the same file name (i.e. database.py)?

    We have a problem. Since although these modules have different absolute
    names ("some_package.database" for the first module, and just
    "database" for the second), when I try to do

    import database

    from inside some_package, it first of all tries to find the matching
    file in the some_package directory (i.e. do a relative import). Since
    it first checks the some_package directory, and finds database.py
    there,

    import database

    in fact imports the module with the absolute name
    some_package.database.

    This is problemat on two levels:

    1) It is surprising and undesirable that "import database" in effect
    may do two completely different things ("import some_package.database"
    or "import database") depending on an external, unpredictable factor:
    the existence of a database.py file inside the some_package directory.

    2) It effectively prevents you from naming a module inside a package
    with the same name of any module in the "root" PYTHONPATH directories.
    In my example, there's no sane way I can see of having
    some_package.database if there's already a database module (database.py
    file) in any PYTHONPATH directory.

    Are my observations correct? Is there something I ignored? Should
    this be posted somewhere else?

    Your comments would be appreciated.

    Xif
     
    Xif, Mar 9, 2005
    #1
    1. Advertising

  2. Re: Problematic behavior of the import statement when several modulefiles have the same name.

    Xif wrote:
    > Hello Everyone!
    >
    > Here's a problem with relative imports:
    >
    > Suppose I have a package called some_package (in a separate directory
    > included in the PYTHONPATH, with an __init__.py file etc.)
    >
    > This package has a module inside the directory, called "database", and
    > therefore residing in the file some_package/database.py.
    >
    > Now, what if there's another module, for example inside the
    > site-packages directory, with the same file name (i.e. database.py)?
    >
    > We have a problem. Since although these modules have different absolute
    > names ("some_package.database" for the first module, and just
    > "database" for the second), when I try to do
    >
    > import database
    >
    > from inside some_package, it first of all tries to find the matching
    > file in the some_package directory (i.e. do a relative import). Since
    > it first checks the some_package directory, and finds database.py
    > there,
    >
    > import database
    >
    > in fact imports the module with the absolute name
    > some_package.database.


    You've just re-discovered the reason you should always use absolute
    imports. Check out:

    http://www.python.org/doc/faq/progr...e-best-practices-for-using-import-in-a-module

    STeVe
     
    Steven Bethard, Mar 9, 2005
    #2
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.

Share This Page