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