• python--包的导入


    1,包

    定义:把解决一类问题的模块放在同一个文件夹里 

    导入语法:在import    from...import导入语句中(而不是在使用时)遇到带点

    本质:就是一个包含__init__.py文件的目录,在py2中,必须有__init__.py文件,py3没有也可以执行。包只是模块的一种形式而已,包即模块,是为了导入方便使用,2.

    2,导入包的两种方式:

    使用绝对路径 不管在包内部还是外部 导入了就能用
    不能挪动,但是直观
    绝对路径:以glance作为起始
    可以随意移动包 只要能找到包的位置,就可以使用包里的模块
    包里的模块如果想使用其它模块的内容只能使用相对路径,使用了相对路径就不能在包内直接执行了
    相对路径
    相对导入:用.或者..的方式最为起始(只能在一个包中使用,不能用于不同目录内)
    相对导入只能用from的形式。
    from ..cmd import manage
            manage.main()

    3,自己创建一个包

    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)

    4,创建完包之后,导入模块。但有一种导入模块方式是不对的

    import glance
    glance.cmd.manage.get()
    glance.api.policy.get()
    glance.db.models.get()
    分析错误原因:
    这种导入包的模式是错误的,因为glance导入后,sys.path中只有到glance上一级的目录,
    可以通过sys.path 查看,而在glance.cmd.manage.get() 调用的时候,
    glance执行它的__inint__,找不到cmd/api/db文件, 所以要在每一层的init分别导入关联路径

     解决方发:

    glance/
    
    ├── __init__.py      from glance import api
                                 from glance import cmd
                                 from glance import db
    
    ├── api
    
    │   ├── __init__.py  from glance.api import policy
                                  from glance.api import versions
    
    │   ├── policy.py
    
    │   └── versions.py
    
    ├── cmd                 from glance.cmd import manage
    
    │   ├── __init__.py
    
    │   └── manage.py
    
    └── db                   from glance.db import models
    
        ├── __init__.py
    
        └── models.py
    解决方法

     5,import glance之后直接调用模块中的方法

    glance/
    
    ├── __init__.py     from .api import *
                        from .cmd import *
                        from .db import *
    ├── api
    
    │   ├── __init__.py   __all__ = ['policy','versions']
    
    │   ├── policy.py
    
    │   └── versions.py
    
    ├── cmd               __all__ = ['manage']
    
    │   ├── __init__.py
    
    │   └── manage.py
    
    └── db                __all__ = ['models']
    
        ├── __init__.py
    
        └── models.py
    import glance
    policy.get()
     

     6,软件开发规范

  • 相关阅读:
    Gin框架介绍与使用
    Go并发编程(goroutine)
    Go语言操作数据库及其常规操作
    Julia语言程序基础
    GoLang字符串处理
    在PHP7以上版本使用不了mysql扩展
    Docker基础命令
    Odoo14_Tree视图自定义按钮和自定义面板
    Odoo13_自定义客户端页面
    python_读取.xlsx(电子表格)文件
  • 原文地址:https://www.cnblogs.com/zzy-9318/p/8278938.html
Copyright © 2020-2023  润新知