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:\Users\Dpad\PycharmProjects\python\module") 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)
04-15 13:54
查看更多