zoukankan      html  css  js  c++  java
  • Python模块的导入以及软件开发规范

    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)
    
  • 相关阅读:
    如果网站文字不让复制怎么办,谷歌浏览器
    Mac 微信双开
    git 线上一不小心拉取代码了,如何恢复
    php 验证港澳台身份证
    把照片弄成50k以内
    Gson序列化时排除字段
    实战Springboot内置Tomcat配置调优
    svg图标爽使用
    laravel的post请求分页数据
    php的isset函数相关问题
  • 原文地址:https://www.cnblogs.com/baolin2200/p/7282799.html
Copyright © 2011-2022 走看看