Python文件的两种用途
1 . 当脚本直接使用,直接当脚本运行调用即可
def func():
print("from func1")
func()
2 . 当做模块被导入使用,但是又想测试当前脚本是否能正常运行就是用if name == 'main':
def func():
print("from func1")
if __name__ == '__main__':
func()
绝对导入和相对导入
我们在创建包时,是给别人导入引用的,而在包的内部也会有彼此之间的互相导入的需求,这时候就有了,相对导入和绝对导入
绝对导入:以包名做为起始
相对导入:用.或者..的方式作为起始(只能在一个包中使用,不能用于不同的目录内)
目录关系:
glance/ # 顶层包目录
├── __init__.py
├── api # 子层 api
│ ├── __init__.py
│ ├── policy.py
│ └── versions.py
├── cmd # 子层 cmd
│ ├── __init__.py
│ └── manage.py
└── db # 子层 db
├── __init__.py
│
└── models.py
run.py
文件内容:
#policy.py
def get():
print('from policy.py')
#versions.py
def create_resource(conf):
print('from version.py: ',conf)
#manage.py
def main():
print('from manage.py')
#models.py
def register_models(engine):
print('from models.py: ',engine)
例如:我们在glance/api/version.py中想要导入glance/cmd/manage.py
在glance/api/version.py
#绝对导入
from glance.cmd import manage
manage.main()
#相对导入..上两层目录
from ..cmd import manage
manage.main()
当模块包的路径不在一起时,可以直接将模块包glance_v1的上级路径加入到环境sys.path路径中
import sys
sys.path.append(r"C:UsersDpadPycharmProjectspythonmodule")
import glance_v1
glance_v1.get()
软件开发规范:
一个项目应该由多个目录文件组成,每个目录存在配置的不同意义:
├── ATM
│ ├── bin # 程序启动目录 (start.py执行程序文件)
│ │ ├── start.py
│ ├── core # 程序主逻辑目录
│ │ └── src.py
│ ├── conf # 程序配置目录
│ │ ├── settings.py
│ ├── db # 程序数据目录
│ │ ├── mysql
│ ├── lib # 程序包管理目录
│ │ ├── glance_v1
│ │ └── common.py
│ ├── log # 程序日志目录
│ │ ├── acess.log
└───────└
在bin执行start.py文件下,想调用所有项目目录下的程序需要将ATM的路径加入到sys.path路径中:
cat /ATM/bin/start.py
import sys,os
# os.path.abspath(__file__) # 表示当前程序文件start.py所在位置;
# os.path.dirname(os.path.abspath(__file__)) # start.py所在位置的上级目录
# os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # start.py所在位置的上上级目录,也就是ATM所在目录
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)