zoukankan      html  css  js  c++  java
  • cookbook_模块和包

    1把模块按层次结构组织成包

    只需确保每个目录中都定义了__init__.py即可。

    2对所有符号的导入进行精确控制

    当用户使用from module import * 语句时,我们希望对从模块或包中导入的符号进行精确控制。

    在模块中定义一个变量__all__,用来显示列出可导出的符号名。

    __all__ = ["spam","grok"]

    3使用相对名称来导入包中的子模块

    mypackage/
      __init__.py
      A/
        __init__.py
        spam.py
        grok.py
      B/
        __init__.py
        bar.py
        
     #spam.py
     from . import grok
     from ..B import bar

    使用该方法来导入包内模块,可以很好的减少硬编码导入模块,如果使用绝对名称导入,如果最顶端的文件名变化所有的导入都将出现问题。

    ps.

    执行脚本出现导入错误时  python3 -m mypackage

     

    4将模块分解成多个文件

    在不破坏使用结构的情况下,将一个模块分解成多个模块

    首先将模块变成包,在包内__init__.py文件内将子模块导入。

    5让各个目录下的代码在统一的命名空间下导入

    foo_package/
      spam/
        blah.py
    bar_package/
      spam/
        grok.py
        
    import sys
    sys.path.extend(["foo_package","bar_package"])
    import spam.blah
    import spam.grok

    在这两个目录中 spam作为公共的命名空间,注意这两个目录中都没有__init__.py文件。

    6重新加载模块

    开发环境中使用,尽量不在生产环境使用

    import imp
    import math
    imp.reload(math)

    7让目录或zip文件成为可运行的脚本

    myapplication/
      spam.py
      bar.py
      grok.py
      __main__.py
      
      python myapplication
      
      如果包含__main__.py文件,就可以当作脚本来运行,会运行__main__.py里的方法

    8读取包中的数据文件

    mypackage/
      __init__.py
      somedata.dat
      spam.py
      
    import pkgutil
    data = pkgutil.get_data(__package__,"somedata.dat")
    
    # data会得到一个字节串
    
    

    9添加目录到sys.path中

    三种解决方案,第一种是使用PYTHONPATH环境变量来添加。

    env PYTHONPATH = /some/dir:/other/dir python3

    第二种是通过创建.pth文件,将.pth文件放在python的site_packages

    #mtapplication
    /some/dir
    /other/dir

    第三种是硬编码到代码中

    import sys
    sys.path.insert(0,"/some/dir")
    sys.path.insert(0,"/other/dir")

    10使用字符串中给定的名称来导入模块

    import importlib
    math = importlib.import_module("math")
  • 相关阅读:
    spring-boot集成1:起步
    策略模式实现多种支付方式
    自定义切面实现记录系统操作日志
    Spring Kafka
    使用Keepalived实现Nginx高可用
    Centos7桥接网络、DNS、时间同步配置
    jmeter随笔(1)-在csv中数据为json格式的数据不完整
    (续篇3):飞测独家のJmeter秘籍,限量发放
    紧张:飞测独家のJmeter秘籍,限量发放(续篇2)
    紧张:飞测独家のJmeter秘籍,限量发放
  • 原文地址:https://www.cnblogs.com/jiaojianglong/p/11260225.html
Copyright © 2011-2022 走看看