导入 igraph 时遇到问题-python
Trouble with importing igraph-python
我的系统上有 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)
我搜索了类似的问题并找到了一些答案。我尝试了 。
但是,我仍然得到 ImportError
。
你有什么解决办法吗?
非常感谢
长话短说:
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
< 3.4.15
,2.12
< 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
而不是系统的 libstdc++.so
。因此,下次您使用自己构建的软件包时,您也必须使用 conda 安装 gcc
。嗯,工作太多了。
选择 2:构建包,但使用系统的 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 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
请注意,这次我不必导出 LD_LIBRARY_PATH
并依赖于旧的系统库。现在,您不需要在每次使用此软件包时都使用 conda 安装 gcc
。但是,工作量还是太大了,嗯。
备选方案 3. 让 pip 编译共享库:_igraph.so
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
选项 4:我已经为您构建了程序包并将其放在我的频道上。随意使用它:-)
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
选项 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 '(?<=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
是 < 3.4.15
并且 2.7
是 < 2.12
因此共享库 _igraph.so
现在加载了系统的旧图书馆 :-)
我的系统上有 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)
我搜索了类似的问题并找到了一些答案。我尝试了 ImportError
。
你有什么解决办法吗?
非常感谢
长话短说:
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
< 3.4.15
,2.12
< 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
而不是系统的 libstdc++.so
。因此,下次您使用自己构建的软件包时,您也必须使用 conda 安装 gcc
。嗯,工作太多了。
选择 2:构建包,但使用系统的 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 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
请注意,这次我不必导出 LD_LIBRARY_PATH
并依赖于旧的系统库。现在,您不需要在每次使用此软件包时都使用 conda 安装 gcc
。但是,工作量还是太大了,嗯。
备选方案 3. 让 pip 编译共享库:_igraph.so
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
选项 4:我已经为您构建了程序包并将其放在我的频道上。随意使用它:-)
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
选项 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 '(?<=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
是 < 3.4.15
并且 2.7
是 < 2.12
因此共享库 _igraph.so
现在加载了系统的旧图书馆 :-)