• python3导入子模块


    基础知识

    参考资料1上有一句话Regular packages are traditional packages as they existed in Python 3.2 and earlier. A regular package is typically implemented as a directory containing an init python file. 大概意思是用__init__表示包的形式是3.2及以前版本的用法. 3.2以后官方的规则是使用Namespace packages的形式表示包.最明显的特征就是不再使用__init__文件.

    测试环境

    python 3.5

    举例说明

    现在有以下结构的文件:

    base是根目录.base下有一个子模块layer1和文件test.py. layer1下有2个模块layer21,layer22,一个文件mainmodule.py. layer21下有文件calc1.py.layer22下有文件calc2.py.
    mainmodule.py的内容为

    from .layer21 import calc1
    from .layer22 import calc2
    def run(a, b):
        return calc1.add(a, b) + calc2.sub(a, b)
    

    calc1.py的内容为

    def add(a, b):
        return a + b
    

    calc2.py的内容为

    def sub(a, b):
        return a - b
    

    test.py的内容为

    # coding: utf-8
    from layer1 import mainmodule
    print(mainmodule.run(1, 2))
    

    注意不存在__init__文件.mainmodule.py用了相对导入.运行test.py可以得到正确的结果.
    setup.py用于制作安装程序,内容为

    # coding: utf-8
    from distutils.core import setup
    setup(
        name='layer1',
        version='0.0.1',
        author='zhang3',
        author_email='aaa@bb.cn',
        packages=['layer1', 'layer1/layer21', 'layer1/layer22'],
        description='测试打包',
    )
    

    在setup.py所在目录下执行

    python setup.py sdist
    

    生成zip文件.
    再执行

    python setup.py install
    

    安装.再把test.py复制到任意位置.运行都可以得到正确结果.说明打包安装成功.为了兼容python2.7,也可以在模块下放一个空的__init__文件.不影响最后结果.

    参考资料

    1. python官方文档 The import system
    2. Create a python package 2013
    3. Paul Barry著,林琪,郭静等译,Head first python,p41-p43,中国电力出版社.
  • 相关阅读:
    Numpy基础学习笔记3
    Numpy基础学习笔记2
    Halcon学习笔记——机器视觉应用工程开发思路及相机标定
    WPF的依赖项属性
    如何理解委托与事件
    LINQ和.NET数据访问
    PLC通信网络
    运动控制基础
    PLC总结
    C#使用第三方组件Epplus操作Excel表
  • 原文地址:https://www.cnblogs.com/zhouyang209117/p/6493886.html
Copyright © 2020-2023  润新知