1 # 把解决一类问题的模块会被放在一个文件夹里面,即包 2 3 # import os 4 # os.makedirs('glance/api') 5 # os.makedirs('glance/cmd') 6 # os.makedirs('glance/db') 7 # l = [] 8 # l.append(open('glance/__init__.py','w')) 9 # l.append(open('glance/api/__init__.py','w')) 10 # l.append(open('glance/api/policy.py','w')) 11 # l.append(open('glance/api/versions.py','w')) 12 # l.append(open('glance/cmd/__init__.py','w')) 13 # l.append(open('glance/cmd/manage.py','w')) 14 # l.append(open('glance/db/models.py','w')) 15 # map(lambda f:f.close() ,l) 16 17 # 导入包的原则:.的左边必须是一个包 18 # 导入包的方法和模块的引入一致 19 # 但是如果使用from的方式在最后的import后面不能再有点 20 # import glance.api.policy as police 21 # police.get() 22 # from glance.api import policy 23 # # from glance import api.policy # 报错 24 # policy.get() 25 # 导入一个模块相当于执行了这个模块 26 # 如果导入了包,就会执行包里面的__init__.py 27 # 如果在python2里面没有init就不能导入包,python3不需要init但是功能不健全 28 # import glance 29 # glance.api.policy.get() 30 # # glance.cmd.manage.get() 31 # glance.db.models.register_models("mysql") 32 33 # 绝对路径,不能挪动,但是直观,常规来说最好还是用绝对导入 34 # 相对路径,可以随意移动包,只要找得到包的位置,就可以用 35 # 代价:不能在包里面使用模块,但是在外部是可以调用内部的 36 # 我们很少会考虑去包内部进行操作 37 38 # 最终极的解决方法,将父目录导入到path里面,这样父目录的路径就全部都可以获取到了。