question about import

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Jonathan Vanasco

    question about import

    I'm a little unclear about import / __import__

    I'm exploring dynamically importing modules for a project, and ran
    into this behavior

    works as expected:
    app = __import__( myapp )
    appModel = __import__( myapp.model )

    but...
    appname= 'myapp'
    app = __import__( "%s" % appname )
    appModel = __import__( "%s.model" % appname )

    In the latter example, app and appModel will always seem to be
    imported as 'myapp' , and I've yet to find a way to address the .model
    namespace

    I know 'dynamically importing modules' is cursed upon -- and I'm
    likely rewriting hundreds of line of codes so I can work around this
    with a registration system -- however I'd like to understand why this
    occurs and know if what i'm trying is even possible.
  • Diez B. Roggisch

    #2
    Re: question about import

    Jonathan Vanasco schrieb:
    I'm a little unclear about import / __import__
    >
    I'm exploring dynamically importing modules for a project, and ran
    into this behavior
    >
    works as expected:
    app = __import__( myapp )
    appModel = __import__( myapp.model )
    >
    but...
    appname= 'myapp'
    app = __import__( "%s" % appname )
    appModel = __import__( "%s.model" % appname )
    >
    In the latter example, app and appModel will always seem to be
    imported as 'myapp' , and I've yet to find a way to address the .model
    namespace
    >
    I know 'dynamically importing modules' is cursed upon -- and I'm
    likely rewriting hundreds of line of codes so I can work around this
    with a registration system -- however I'd like to understand why this
    occurs and know if what i'm trying is even possible.
    Is it cursed upon? Didn't know that.

    However, __import__ only gives you the topmost module - in your case myapp.

    So you need to do it like this (untested):

    name = "a.b.c.d"
    mod = __import__(name )
    for part in name.split(".")[1:]:
    mod = getattr(mod, part)
    print mod

    Diez

    Comment

    • Jonathan Vanasco

      #3
      Re: question about import

      On Jun 11, 1:45 pm, "Diez B. Roggisch" <de...@nospam.w eb.dewrote:
      Is it cursed upon? Didn't know that.
      I didn't either. Until I asked some people how to do it, and was
      admonished for even suggesting the concept.

      However, __import__ only gives you the topmost module - in your case myapp..
      ah, i didn't know that! thanks!

      So you need to do it like this (untested):
      >
      name = "a.b.c.d"
      mod = __import__(name )
      for part in name.split(".")[1:]:
           mod = getattr(mod, part)
      print mod
      interesting approach. unfortunately, it raises AttributeError: 'a'
      object has no attribute 'b'

      i think i'm going to table this approach. sigh.

      Comment

      Working...