基于jodogne/orthanc-python镜像扩展Orthanc时提示找不到requests模块
问题核心原因
Orthanc Python插件运行时使用插件内嵌的独立Python解释器,和镜像内系统自带的Python环境完全隔离。你通过系统pip单独安装的requests库,会被放置到系统Python的专属搜索路径下,插件的内嵌解释器不会读取该路径,因此始终触发ModuleNotFoundError报错。
可行解决方案(按推荐优先级排序)
- 方案1:直接使用插件内置HTTP能力(推荐)
Orthanc Python插件本身封装了零依赖的HTTP请求能力,完全可以覆盖自动路由场景下的接口调用需求,不需要额外引入requests依赖:
如果需要配置自定义超时时间、证书校验规则,可以通过# 替代requests.get的基础请求方法 response = orthanc.HttpGet("目标服务接口地址") # 替代requests.post的基础请求方法,支持自定义请求头、传入请求体 response = orthanc.HttpPost( url="目标服务接口地址", data="序列化后的请求体字符串", headers={"Content-Type": "application/json"} )orthanc.CreateHttpClient()创建独立客户端实例实现,该能力为插件原生内置,和运行环境完全适配,无额外依赖问题。 - 方案2:将依赖植入插件内嵌Python的搜索路径
- 查看Orthanc启动日志,定位插件内嵌Python的文件搜索路径(即sys.path列表,插件加载阶段会在日志中打印完整路径),常见路径为类似
/opt/orthanc/embedded-python/lib/python3.11/site-packages的目录 - 下载纯Python实现版本的requests及其全部依赖(urllib3、charset-normalizer、idna、certifi)的源码包,无需包含系统编译生成的二进制文件
- 将上述包的源码目录直接拷贝到日志中定位到的site-packages路径下
- 重启Orthanc服务,内嵌Python解释器即可正常识别并导入requests库
- 查看Orthanc启动日志,定位插件内嵌Python的文件搜索路径(即sys.path列表,插件加载阶段会在日志中打印完整路径),常见路径为类似
- 方案3:自定义预构建镜像
如果需要长期稳定使用,可以基于官方jodogne/orthanc-python镜像编写Dockerfile,在构建阶段将所需的纯Python依赖直接写入插件内嵌的site-packages路径,构建完成的镜像启动即可直接加载依赖,无需运行后手动调整文件结构。
避坑提醒:不要直接将系统pip安装的带C扩展二进制产物的包拷贝到插件路径下,由于插件内嵌Python的编译目标和系统Python不一致,这类带编译文件的包会直接触发导入失败。
内容的提问来源于stack exchange,提问作者Sarga
相关产品推荐
相关产品推荐

