Import redirects

Discussion in 'Python' started by Isaac To, Feb 11, 2013.

  1. Isaac To

    Isaac To Guest

    I have a package (say "foo") that I want to rename (say, to "bar"), and for
    compatibility reasons I want to be able to use the old package name to
    refer to the new package. Copying files or using filesystem symlinks is
    probably not the way to go, since that means any object in the modules of
    the package would be duplicated, changing one will not cause the other to
    be updated. Instead, I tried the following as the content of
    `foo/__init__.py`:

    import sys
    import bar
    sys.modules['foo'] = bar

    To my surprise, it seems to work. If I `import foo` now, the above will
    cause "bar" to be loaded and be used, which is expected. But even if I
    `import foo.baz` now (without first `import foo`), it will now correctly
    import "bar.baz" in its place.

    Except one thing: it doesn't really work. If I `import foo.baz.mymod` now,
    and if in "bar.baz.mymod" there is a statement `import bar.baz.depmod`,
    then it fails. It correctly load the file "bar/baz/depmod.py", and it
    assigns the resulting module to the package object bar.baz as the "depmod"
    variable. But it fails to assign the module object of "mymod" into the
    "bar.baz" module. So after `import foo.baz.mymod`, `foo.baz.mymod` results
    in an AttributeError saying 'module' object has no attribute 'mymod'. The
    natural `import bar.baz.mymod` is not affected.

    I tested it with both Python 2.7 and Python 3.2, and I see exactly the same
    behavior.

    Anyone knows why that happen? My current work-around is to use the above
    code only for modules and not for packages, which is suboptimal. Anyone
    knows a better work-around?
     
    Isaac To, Feb 11, 2013
    #1
    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.
Similar Threads
  1. Mark
    Replies:
    0
    Views:
    305
  2. Mark Lawrence

    Re: Import redirects

    Mark Lawrence, Feb 11, 2013, in forum: Python
    Replies:
    0
    Views:
    112
    Mark Lawrence
    Feb 11, 2013
  3. Chris Angelico

    Re: Import redirects

    Chris Angelico, Feb 11, 2013, in forum: Python
    Replies:
    0
    Views:
    106
    Chris Angelico
    Feb 11, 2013
  4. Oscar Benjamin

    Re: Import redirects

    Oscar Benjamin, Feb 11, 2013, in forum: Python
    Replies:
    0
    Views:
    126
    Oscar Benjamin
    Feb 11, 2013
  5. Isaac To

    Re: Import redirects

    Isaac To, Feb 12, 2013, in forum: Python
    Replies:
    0
    Views:
    89
    Isaac To
    Feb 12, 2013
Loading...

Share This Page