报错信息
运行程序的时候有警示信息,但并不影响程序的执行。报错如下:
/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 安装软件的兼容性更好。