美文网首页
Python自定义包引入

Python自定义包引入

作者: 御风而行carrie | 来源:发表于2018-01-01 16:30 被阅读0次

    测试目录如下:
    .
    ├── foldA
    │ ├── init.py
    │ └── moduleA.py
    ├── foldB
    │ ├── init.py
    │ └── moduleB.py
    ├── moduletree.py
    ├── moduletree.pyc
    ├── my_test.py
    ├── my_test.py~
    └── parentmodule.py

    同目录下引用 -- my_test.py 引用 moduletree.py

    • moduletree.py 内容
    #coding=utf-8
    
    def moduletree_test():
        print '同一目录下引用测试'
    
    
    • mytest.py 内容
    #coding=utf-8
    import moduletree
    
    
    def main():
        print '引用测试:'
        moduletree.moduletree_test()
    
    
    if __name__ == '__main__':
        main()
    
    
    • 运行mytest.py
    Output:
    引用测试:
    同一目录下引用测试
    

    引用子目录下文件 -- my_test.py 引用 /foldA/moduleA.py

    • /foldA/moduleA.py
    #coding=utf-8
    
    def moduleA_test():
        print '引用了/foldA/下的moduleA的内容'
    
    • my_test.py (第一种引用方式)
    #coding=utf-8
    import foldA.moduleA
    
    
    def main():
        print '引用测试:'
        foldA.moduleA.moduleA_test()
    
    
    if __name__ == '__main__':
        main()
    
    • my_test.py (第二种引用方式)
    #coding=utf-8
    from foldA import moduleA
    
    def main():
        print '引用测试:'
        moduleA.moduleA_test()
    
    
    if __name__ == '__main__':
        main()
    
    • 两次运行my_test.py
    Output:
    引用测试:
    引用了/foldA/下的moduleA的内容
    

    同级子目录引用 -- /foldB/moduleB.py 引用 /foldA/moduleA.py

    • /foldA/moduleA.py内容
    #coding=utf-8
    
    def moduleA_test():
        print '引用了/foldA/下的moduleA的内容'
    
    • /foldB/moduleB.py
    #coding=utf-8
    import sys
    sys.path.append("..") # 回退到上一级目录
    import foldA.moduleA
    
    def moduleB_test():
        print '/foldB/moduleB.py引用了:'
        foldA.moduleA.moduleA_test()
    
    
    if __name__ == '__main__':
        moduleB_test()
    
    • /foldB/moduleB.py 第二种写法
    #coding=utf-8
    import sys
    sys.path.append("..") # 回退到上一级目录
    from foldA import moduleA
    
    def moduleB_test():
        print '/foldB/moduleB.py引用了:'
        moduleA.moduleA_test()
    
    if __name__ == '__main__':
        moduleB_test()
    
    • 两次运行/foldB/moduleB.py
    Output:
    /foldB/moduleB.py引用了:
    引用了/foldA/下的moduleA的内容
    

    子目录引用父目录 -- /foldB/moduleB.py引用/parentmodule.py

    • parentmodule.py内容
    #coding=utf-8
    
    def parentmodule_test():
        print '引用了/parentmodule.py的内容'
    
    • /foldB/moduleB.py
    #coding=utf-8
    import sys
    sys.path.append("..") # 回退到上一级目录
    import parentmodule
    
    def moduleB_test():
        print '/foldB/moduleB.py引用了:'
        parentmodule.parentmodule_test()
    
    if __name__ == '__main__':
        moduleB_test()
    
    
    • /foldB/moduleB.py 第二种写法
    
    #coding=utf-8
    import sys
    sys.path.append("..") # 回退到上一级目录
    from parentmodule import parentmodule_test
    
    def moduleB_test():
        print '/foldB/moduleB.py引用了:'
        parentmodule_test()
    
    if __name__ == '__main__':
        moduleB_test()
    
    
    • 两次运行/foldB/moduleB.py
    Output:
    /foldB/moduleB.py引用了:
    引用了/parentmodule.py的内容
    

    in a nutshell

    • 非同级目录时,注意通过 (import sys)sys.path.append("调整当前目录的路径") 修改当前目录

    • 注意 (import sys)sys.path.append("调整当前目录的路径") 修改的当前目录只对引入包产生影响,不会对文件读写路径产生影响

    • 用from方法时,要么是from %% import *,或from %% import &&(具体函数或类)

    2018.01.01(一个值得纪念的日子呀,新年快乐,要更好!!!)

    相关文章

      网友评论

          本文标题:Python自定义包引入

          本文链接:https://www.haomeiwen.com/subject/mrmtnxtx.html