Understanding python imports

后端 未结 3 1739
有刺的猬
有刺的猬 2021-01-06 21:10

In the process of learning Django and Python. I can\'t make sense of this.

(Example Notes:\'helloworld\' is the name of my project. It has 1 app called \'app\'.)

相关标签:
3条回答
  • 2021-01-06 21:55

    Python imports can import two different kinds of things: modules and objects.

    import x
    

    Imports an entire module named x.

    import x.y
    

    Imports a module named y and it's container x. You refer to x.y.

    When you created it, however, you created this directory structure

    x
        __init__.py
        y.py
    

    When you add to the import statement, you identify specific objects to pull from the module and move into the global namespace

    import x # the module as a whole
    x.a # Must pick items out of the module
    x.b
    
    from x import a, b # two things lifted out of the module
    a # items are global
    b
    

    If helloworld is a package (a directory, with an __init__.py file), it typically doesn't contain any objects.

    from x import y # isn't sensible
    import x.y # importing a whole module.
    

    Sometimes, you will have objects defined in the __init__.py file.

    Generally, use "from module import x" to pick specific objects out of a module.

    Use import module to import an entire module.

    0 讨论(0)
  • 2021-01-06 22:05
    from helloworld.views import *          # <<-- this works
    from helloworld import views            # <<-- this doesn't work
    from helloworld.app import views        # <<-- but this works.  why?
    

    #2 and #3 are not the same.

    The second one imports views from the package helloworld. The third one imports views from the package helloworld.app, which is a subpackage of helloworld. What it means is that views are specific to your django apps, and not your projects. If you had separate apps, how would you import views from each one? You have to specify the name of the app you want to import from, hence the syntax helloworld.app.

    0 讨论(0)
  • 2021-01-06 22:10

    As sykora alluded, helloworld is not in-and-of-itself a package, so #2 won't work. You would need a helloworld.py, appropriately set up.

    I asked about import a couple of days ago, this might help: Lay out import pathing in Python, straight and simple?

    0 讨论(0)
提交回复
热议问题