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 玩法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用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