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")
  • 相关阅读:
    改造vant日期选择
    css3元素垂直居中
    npm综合
    (转)网页加水印方法
    Mac下IDEA自带MAVEN插件的全局环境配置
    隐藏注册控件窗口
    High performance optimization and acceleration for randomWalk, deepwalk, node2vec (Python)
    How to add conda env into jupyter notebook installed by pip
    The Power of WordNet and How to Use It in Python
    背单词app测评,2018年
  • 原文地址:https://www.cnblogs.com/jiaojianglong/p/11260225.html
Copyright © 2011-2022 走看看