# 把解决一类问题的模块放在同一个文件夹里,这个文件夹就是一个包
# 在python2.7中一个文件夹下有__init__.py才可以称这个文件夹为一个包。
# 导入一个包时,会自动执行这个包下面的__init__.py文件
# 关于包的注意事项
# 1.关于包相关的导入语句也分为import和form...import..两种,但是无论哪种,无论在什么位置
# 在导入时都必须遵循一个原则:凡是在导入时带点的,点的左边都是必须是一个包,否则非法。可以带
# 有一连串的店,如item.subitem.subsubitem,但都必须遵循这个原则
# 2.对于导入后,在使用时就没有这种限制了,点的左边可以是包、模块、函数、类(他们都可以用点的方式调用自己的属性)
# 3.对比import item和from item import name的应用场景
# 如果我们想直接使用name那必须使用
# 使用绝对路径,不管在包内部还是外部,导入了就能用,但是不能挪动文件夹。 绝对路径必须会
# 相对路径
# 可以随意动包,只要能找到包的位置,就可以使用包里的模块
# 包里的模块如果想使用其他模块的内容只能使用相对路径,使用了相对路径就不能再包内直接执行了,但可以在包外面执行
# 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)
import glance
glance.api.policy.get()
glance.api.versions.create_resource('123')
glance.cmd.manage.main()
glance.db.models.register_models(12)
# 软件开发规范(非Web的)
# 目录结构
# soft
# bin # 写开始文件,程序入口,执行这个文件,整个项目程序则整体运行起来,主要给运维人员调用
# start.py
# conf # 配置文件,改变这个文件中的值来改变陈旭的运行结果
# config.ini
# my_log_settings.py
# settings.py
# core # 自己写的所有代码,都放入到这个目录下
# core.py
# db # 数据库
# alex_json
# egon_json
# lib # 放自己写的包、模块等
# read_ini.py
# log # 放执行程序过程中,想要记录下来的log日志
# all2.log
# import os
# import sys
# sys.path.append(os.path.dirname(os.getcwd())) # 将当前路径的上一级路径添加到path中
# from core import core
#
# if __name__ == '__main__':
# core.main()