包的导入

包的导入

  • 导入一个文件夹相当于执行了这个包下的__init__方法,并不相当于把这个包下的所有文件都导进来了

  • 数据准备

    import os
    os.makedirs('glance/api')
    os.makedirs('glance/cmd')
    os.makedirs('glance/db')
    l = []
    l.append(open('glance/__init__.py','w'))
    l.append(open('glance/api/__init__.py','w'))
    l.append(open('glance/api/policy.py','w'))
    l.append(open('glance/api/versions.py','w'))
    l.append(open('glance/cmd/__init__.py','w'))
    l.append(open('glance/cmd/manage.py','w'))
    l.append(open('glance/db/__init__.py','w'))
    l.append(open('glance/db/models.py','w'))
    map(lambda f:f.close() ,l)
    
  • 在demo.py导入glance文件夹下的policy文件

    • 方式一 (from ** import** 这种格式下,import的后面必须是明确的文件夹或文件,不能带点)

      from bao.glance.api import policy 
      policy.get()
      
    • 方式二

      import glance.api.policy as f
      # glance.api.policy.get()
      f.get()
      
    • 方式三 (肢解导入函数名、变量名)

      from bao.glance.api.policy import get
      get()
      
  • 绝对导入

    • demo

      import glance
      
    • glance\init

      from glance import api
      
    • api\init

      from glance.api import policy
      
    • policy

      def get():
          print('from policy.py')
      get()
      
  • 相对导入

    • . 当前目录 .. 父目录

    • 相对路径不能在执行文件中使用

    • 相对导入只能在被导入的模块中使用,使用相对导入,就不需要考虑执行文件是谁了,只需要模块之间路径的关系

    • demo

      import glance
      
    • glance\init

      from . import api
      
    • api\init

      from . import policy
      
    • policy

      def get():
          print('from policy.py')
      get()
      
  • 相对导入和绝对导入的使用场景

    • 相对导入:当你需要写一个功能,这个功能不是直接运行的,而是被别人导入后使用的这种情况如果你的这个独立功能形成文件,文件内的所有文件都需要使用相对导入 如:json
    • 绝对导入:如果我们自己开发一个项目,这些项目有一些文件是需要直接运行的,这种情况使用绝对导入
posted @ 2021-06-04 18:18  刘家小仙女  阅读(59)  评论(0编辑  收藏  举报