• 导入模块的方法

    创建目录结构

    复制代码
    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/models.py','w'))
    map(lambda f:f.close() ,l
    复制代码
    复制代码
    glance/                   #Top-level package
    
    ├── __init__.py      #Initialize the glance package
    
    ├── api                  #Subpackage for api
    
    │   ├── __init__.py
    
    │   ├── policy.py
    
    │   └── versions.py
    
    ├── cmd                #Subpackage for cmd
    
    │   ├── __init__.py
    
    │   └── manage.py
    
    └── db                  #Subpackage for db
    
        ├── __init__.py
    
        └── models.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)
    复制代码

    第一种方法

    从包中直接导入模块

    import glance.api.policy  # 最后一个名字一定是模块名
    glance.api.policy.get()  # 使用:import后面的所有内容作为一个整体来使用

    第二种方法

    from glance.api import policy  # 最后import的一定是模块名
    policy.get()

    处理__init__文件
    第三种方法 —— 绝对路径导入的方式
    所有的模块导入都从根节点开始
    根节点的位置由sys.path中的路径决定
    项目的根目录在sys.path中存在是因为pycharm的作用
    如果希望程序能处处执行,需要手动修改sys.path

    复制代码
    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
    复制代码

    第四种方法 —— 相对路径导入的方式
    只关心相对自己当前目录位置的模块位置就好
    不能在包的内部直接执行
    不管根节点在哪,包内的模块相对位置都是正确的

    复制代码
    glance/                   
    
    ├── __init__.py      from . import api  #.表示当前目录
                         from . import cmd
                         from . import db
    
    ├── api                  
    
    │   ├── __init__.py  from . import policy
                         from . import versions
    
    │   ├── policy.py
    
    │   └── versions.py
    
    ├── cmd              from . import manage
    
    │   ├── __init__.py
    
    │   └── manage.py    from ..api import policy   
                         #..表示上一级目录,想再manage中使用policy中的方法就需要回到上一级glance目录往下找api包,从api导入policy
    
    └── db               from . import models
    
        ├── __init__.py
    
        └── models.py
    复制代码

    第五种方法 —— *和__all__的配合
    利用from import * 和__all__的相关性搞出来的一种包定制

    复制代码
    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()
  • 相关阅读:
    Pyinstaller 打包exe遇到的各种问题及解决思路(详细)
    oracle存储过程和存储函数sql
    oracle sql 生成序列
    Python模块与包
    Python模块的使用
    Pyuthon类与对象练习扩展
    Python sys模块
    Python函数
    Python文件操作
    Python常用函数
  • 原文地址:https://www.cnblogs.com/QQ279366/p/7886667.html
Copyright © 2020-2023  润新知