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")
  • 相关阅读:
    复制带中文的公式贴到通达信公式中显示乱码解决方案
    命令指定线程个数
    随机姓名
    将二维list某列组成新的list
    jenkins配置小结
    jmeter5.0 while controller使用总结
    centos7 桌面化配置
    django study1 数据库
    centos7 安装firefox
    python之self
  • 原文地址:https://www.cnblogs.com/jiaojianglong/p/11260225.html
Copyright © 2011-2022 走看看