【报错解决】UserWarning: Selected implementation cpp is not available.

程序运行时遇到UserWarning,提示cpp实现不可用。检查发现是protobuf模块导入错误,可能原因包括模块缺失或版本冲突。尝试降级protobuf版本失败后,通过改变conda创建环境时的channel顺序解决了问题,发现defaultschannel的protobuf版本3.20.3没有报错,而conda-forge的4.23.2版本存在问题,表明版本兼容性问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

报错信息

运行程序的时候有警示信息,但并不影响程序的执行。报错如下:

/data/software/miniconda3/envs/snakemake/lib/python3.11/site-packages/google/protobuf/internal/api_implementation.py:110: UserWarning: Selected implementation cpp is not available.

根据 UserWarning: Selected implementation cpp is not available 信息搜索不到有用的解决问题的信息。

解决方法

根据网络搜索没有找到有用的信息,所以去 /data/software/miniconda3/envs/snakemake/lib/python3.11/site-packages/google/protobuf/internal/api_implementation.py 的第110行看一下具体什么代码出现的问题。

单独执行 try 语句的代码,结果如下:

>>> from google.protobuf.pyext import _message
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: /data/software/miniconda3/envs/snakemake/lib/python3.11/site-packages/google/protobuf/pyext/_message.cpython-311-x86_64-linux-gnu.so: undefined symbol: _ZN6google8protobuf2io17SafeDoubleToFloatEd

根据新的报错信息显示 import 模块发生错误,有两种可能:1. 没有安装相对应的模块;2.模块之间存在冲突。
首先尝试将 protobuf 版本降级,但是依赖的 python 版本又不符合,只能重新安装环境。
在重新安装的过程中发现指定 channel 的顺序会影响依赖包的版本,比如最高优先通道指定为 conda-forge 安装的 protobuf 版本为 4.23.2,优先通道为 defaults 时安装的 protobuf 版本为 3.20.3。而 3.20.3 版本就是没有问题的。

$ conda create -c conda-forge -c bioconda -n snakemakeCO snakemake
$ conda activate snakemakeCO
$ conda list | grep protobuf
libprotobuf               4.23.2               hd1fb520_2    conda-forge
protobuf                  4.23.2                   pypi_0    pypi


$ conda create -c defaults -c conda-forge -c bioconda -n snakemakeDE snakemake
$ conda activate snakemakeDE
$ conda list | grep protobuf
libprotobuf               3.20.3               he621ea3_0
protobuf                  3.20.3                   pypi_0    pypi

我认为这个报错时由于版本之间兼容性导致的,但是我不清楚为什么 defaults channel 安装软件的兼容性更好。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值