导入igraph-python的麻烦

时间:2017-02-10 13:02:39

标签: python installation conda

我的系统上有CentOS release 6.8 (Final)。我把igrph-python安装了

conda install -c marufr python-igraph=0.7.1.post6

当我尝试导入包时,我收到错误:

ImportError: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /home/abolfazl/.python-eggs/python_igraph-0.7.1.post6-py2.7-linux-x86_64.egg-tmp/igraph/_igraph.so)

我搜索了类似的问题,并找到了一些答案。我尝试过this one。 但是,我仍然得到ImportError。 你有什么解决方案吗? 非常感谢

1 个答案:

答案 0 :(得分:1)

TL; DR:

conda install -yc nehaljwani python-igraph=0.7.1.post6

好的,让我们看看共享库存在哪些版本化依赖项:

readelf --version-info /root/.cache/Python-Eggs/python_igraph-0.7.1.post6-py2.7-linux-x86_64.egg-tmp/igraph/_igraph.so | grep -Po '(?<=GLIBC_)([\d.]*)' | sort -Vr | head -1
2.14

readelf --version-info /root/.cache/Python-Eggs/python_igraph-0.7.1.post6-py2.7-linux-x86_64.egg-tmp/igraph/_igraph.so | grep -Po '(?<=GLIBCXX_)([\d.]*)' | sort -Vr | head -1
3.4.15

让我们看一下系统提供的内容:

strings /lib64/libc.so.6  | grep -Po '(?<=GLIBC_)([\d.]*)' | sort -Vr | head -1
2.12

strings /usr/lib64/libstdc++.so.6 | grep -Po '(?<=GLIBCXX_)([\d.]*)' | sort -Vr | head -1
3.4.13

如您所见,3.4.13是&lt; 3.4.152.12是&lt; 2.14因此共享库_igraph.so无法加载。

好的,所以你有一些选择:

备选方案1:使用conda的gcc和libxml2构建来构建软件包。

yum install -y gcc-c++ libxml2-devel
bash Miniconda2-4.2.12-Linux-x86_64.sh -b -p ~/m2
source ~/m2/bin/activate
conda install -y conda-build
conda install -yc marufr python-igraph=0.7.1.post6
conda install -y gcc libxml2
export LD_LIBRARY_PATH=~/m2/lib/
conda build $CONDA_PREFIX/pkgs/python-igraph-0.7.1.post6-py27_0/info/recipe/
conda remove -y python-igraph
conda install $CONDA_PREFIX/conda-bld/linux-64/python-igraph-0.7.1.post6-py27_0.tar.bz2
python -c 'import igraph; print igraph.__version__'
0.7.1

请注意,我在conda中使用了gcc,我必须设置LD_LIBRARY_PATH,这样在测试包时,它会选择$CONDA_PREFIX/lib/libstdc++.so而不是系统{{1} }。因此,下次您使用自己构建的软件包时,也必须使用conda安装libstdc++.so。呃,工作太多了。

备选方案2:构建软件包,但使用system&#39; s gcc和libxml2

gcc

请注意,这一次,我没有必要导出yum install -y gcc-c++ libxml2-devel bash Miniconda2-4.2.12-Linux-x86_64.sh -b -p ~/m2 source ~/m2/bin/activate conda install -y conda-build conda install -yc marufr python-igraph=0.7.1.post6 conda build $CONDA_PREFIX/pkgs/python-igraph-0.7.1.post6-py27_0/info/recipe/ conda remove -y python-igraph conda install $CONDA_PREFIX/conda-bld/linux-64/python-igraph-0.7.1.post6-py27_0.tar.bz2 python -c 'import igraph; print igraph.__version__' 0.7.1 并依赖旧的系统库。现在,每次使用此软件包时,您都不需要使用conda安装LD_LIBRARY_PATH。但是,工作太多了,嗯。

备选方案3.让pip执行共享库的编译:{{1​​}}

gcc

备选方案4:我已经为您构建了包并将其放在我的频道上。随意使用它: - )

_igraph.so

备选方案4是目前最简单的,但为什么它有效?现在让我们看一下它的依赖关系:

yum install -y gcc-c++ libxml2-devel
bash Miniconda2-4.2.12-Linux-x86_64.sh -b -p ~/m2
source ~/m2/bin/activate
pip install python-igraph==0.7.1.post6
python -c 'import igraph; print igraph.__version__'
0.7.1

如您所见,bash Miniconda2-4.2.12-Linux-x86_64.sh -b -p ~/m2 source ~/m2/bin/activate conda install -yc nehaljwani python-igraph=0.7.1.post6 python -c 'import igraph; print igraph.__version__' 0.7.1 是&lt; readelf --version-info /root/.cache/Python-Eggs/python_igraph-0.7.1.post6-py2.7-linux-x86_64.egg-tmp/igraph/_igraph.so | grep -Po '(?<=GLIBCXX_)([\d.]*)' | sort -Vr | head -1 3.4 readelf --version-info /root/.cache/Python-Eggs/python_igraph-0.7.1.post6-py2.7-linux-x86_64.egg-tmp/igraph/_igraph.so | grep -Po '(?<=GLIBC_)([\d.]*)' | sort -Vr | head -1 2.7 3.4是&lt; 3.4.15因此共享库2.7现在加载了系统的旧库: - )