python模块,包最优实践

具体关于概念就不解释了,这里只说下最优实践方案
(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模块,包最优实践)