Modules, Packages and Developer Confusion. Oh My!

Discussion in 'Python' started by dhable, Nov 10, 2006.

  1. dhable

    dhable Guest

    I think I'm still missing something in how python is handling packages
    and it's mixing me up. I have a package with three files (modules?)
    like so:


    To hide more details of the package structure, I import model and
    search inside of __init__. It also seemed like a good idea to define a
    global function that creates a database connection and I added it to Thus, I have:

    from model import *
    from search import *

    def create_connection():
    # details are unimportant for this example

    When I try to use the create_connection function in model, I get errors
    when I use it as a global function ( just create_connection()). The
    only way to resolve the error was to import OPS inside of model and use
    OPS.create_connection(). This doesn't seem natural. If model is part of
    OPS, why do I need to tell python to import OPS and use this function
    from OPS? I can see doing that from the outside world, but inside?

    Any clarification would be greatly appreciated.
    dhable, Nov 10, 2006
    1. Advertisements

  2. importing everything from "model" into "OPS" isn't the same thing as
    importing everything from "OPS" into "model".

    Fredrik Lundh, Nov 10, 2006
    1. Advertisements

  3. dhable

    Steve Holden Guest

    The def statement binds the name create_connection in the model module's
    namespace to the function it defines. So you write EITHER

    import model # puts model in the current namespace
    conn = model.create_connection( ... )


    from model import * # copies model's namespace into current
    conn = create_connection( ... )

    Hope this helps.

    Steve Holden, Nov 10, 2006
    1. Advertisements

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.