python通过__init__.py 进行模块依赖包的check

很多时候我们开发模块化项目,或者动态加载功能包的项目,对于依赖我们不希望直接在安装的时候就安装,而是按需使用
的时候进行主动安装(比如langchain 不少模块),解决方法很多,以下说明下基于__init__.py 的处理

一些参考解决方法

  • 在调用模块方法的时候通过显示的import 模块,并通过try 异常处理,给予用户提示需要安装的依赖
  • 在用户导入模块的时候直接给予提示

基于__init__.py 的方法

  • 参考代码结构
├── README.md
├── app.py
└── login
    ├── __init__.py
    ├── llm
    ├── __init__.py
    └── llm.py
    └── openapi
        └── __init__.py
  • login/llm/__init__.py 处理
from importlib.util import find_spec
if not find_spec('ollama'):
    raise ImportError("ollama not found run `pip install ollama` ")

简单说明: 比如我们的代码模块llm 是基于ollama 的,但是用户使用是一个可选的,当用户使用了ollama 模块包装,但是没有安装ollama 包的时候此处基于find_spec 查找依赖,如果没有安装就会告诉用户应该安装包

  • 使用模块
    app.py
from login import llm
  • 效果


如果安装了ollama 之后就不会有上边的异常信息

说明

基于__init__.py同时组织好代码也是一个很不错的check 玩法

参考资料

https://github.com/rongfengliang/python__init__demo

posted on   荣锋亮  阅读(22)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2023-10-26 bytenode nodejs 字节码编译工具
2023-10-26 nexe nodejs 应用打包工具
2022-10-26 使用nginx limit_except 保护暴露外网的minio 服务
2022-10-26 minio 对象存储部署一些说明
2018-10-26 sqlserver linux 容器运行
2018-10-26 OASGraph 转换rest api graphql 试用
2018-10-26 使用OASGraph 暴露rest 接口为graphql api

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示