美文网首页
python模块,包最优实践

python模块,包最优实践

作者: 德蒙_托尔斯泰 | 来源:发表于2017-12-08 11:13 被阅读84次

    具体关于概念就不解释了,这里只说下最优实践方案
    (iOS coder,学python中,如有错误还请告知,互相学习)

    开发工具:pycharm

    请参照demo,内附详细解释

    3种导入方式,推荐第三种方式

    • 1导入包, improt包名, 调用方式:包》模块》函数
    from core import main
    if __name__ == '__main__':
        main.main.main()
    

    要在____init____中导入相应模块

    '''这里导入本模块下的做法 是针对于,外部只导入本包的话,外部通过packgename.main.func()调用时候
        
       如果是做开源模块,这里可以import包内的接口模块,表示这些都是暴露的接口
       
       反正这里主要import你的接口模块
    
       参见step中1 main包的导入方式
    '''
    from . import main
    
    • 2导入具体模块, import模块 调用方式:模块》函数
      这种无需在____init____中import具体模块, 不过推荐不管怎样都在____init____中import你的接口模块
    # from core.main import main
    # if __name__ == '__main__':
    #     main.main()
    
    • 3项目根路径导入,pycharm有提示,
      注意要在程序入口将项目根路径加入sys.path中,不然通过python解释器直接运行会报错
    project_base_dir = os.path.dirname(os.path.dirname(base_dir))
    sys.path.append(project_base_dir)
    
    # from HomeWork.package_manager.core.main import main
    # if __name__ == '__main__':
    #     main.main()
    
    • 4 动态import模块(不推荐),这里module是到package
    module = __import__('core.main')
    if __name__ == '__main__':
        module.main.main.main()
    
    • 5 动态import模块 (推荐), 这里main直接到相应模块了
    import importlib
    main = importlib.import_module('core.main')
    if __name__ == '__main__':
        main.main.main()
    

    其它

    • 注意package 每次被from 或者 improt ____init____都会被执行一次,某些情况下需要注意,所以____init____内不能放业务逻辑代码,具体最优方案,还没完全弄透,以后补充
    • 单独执行某个py脚本,sys.path把当前脚本的目录加进去了,所以你可以直接impot本目录下的其它模块和包

    欢迎补充,发评论里,不到之处,望提醒

    相关文章

      网友评论

          本文标题:python模块,包最优实践

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