Python 在Anaconda中安装Orange3:g和x2B不匹配+;和libstdc++;

Python 在Anaconda中安装Orange3:g和x2B不匹配+;和libstdc++;,python,anaconda,orange,fedora-25,Python,Anaconda,Orange,Fedora 25,我运行的是Fedora25,它附带了gcc/g++/libstdc++6.3.1版。 我还运行了Anaconda版本4.3.1,它附带了libstdc++6.0.19 当我在Anaconda下安装Orange3时(通过说“pip install Orange3”),一些文件是用Fedoras g++编译的,但链接到Anacondas libstdc++: 注意输出的第三行: $ ldd ~/anaconda3/lib/python3.6/site-packages/Orange/widgets/

我运行的是Fedora25,它附带了
gcc/g++/libstdc++
6.3.1版。 我还运行了Anaconda版本4.3.1,它附带了
libstdc++6.0.19

当我在Anaconda下安装Orange3时(通过说“pip install Orange3”),一些文件是用Fedoras g++编译的,但链接到Anacondas libstdc++:

注意输出的第三行:

$ ldd ~/anaconda3/lib/python3.6/site-packages/Orange/widgets/utils/_grid_density.cpython-36m-x86_64-linux-gnu.so
linux-vdso.so.1 (0x00007ffe9b5a2000)
libpython3.6m.so.1.0 => /home/marhoy/anaconda3/lib/libpython3.6m.so.1.0 (0x00007efc3a6ef000)
libstdc++.so.6 => /home/marhoy/anaconda3/lib/libstdc++.so.6 (0x00007efc3a3d9000)
libm.so.6 => /lib64/libm.so.6 (0x00007efc3a0ad000)
libgcc_s.so.1 => /home/marhoy/anaconda3/lib/libgcc_s.so.1 (0x00007efc39e97000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007efc39c79000)
libc.so.6 => /lib64/libc.so.6 (0x00007efc398b1000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007efc396ad000)
libutil.so.1 => /lib64/libutil.so.1 (0x00007efc394aa000)
librt.so.1 => /lib64/librt.so.1 (0x00007efc392a2000)
/lib64/ld-linux-x86-64.so.2 (0x000055a3c43d1000)
这会导致问题,因为6.3.1和6.0.19之间存在差异。因此,当我尝试使用散点图小部件时,我得到:

\u grid\u density.cpython-36m-x86\u 64-linux-gnu.so:未定义符号:\uuuuuuucxa\uthrow\ubad\uarray\unew\ulength

如果我预先加载Fedoras libstdc++,一切似乎都正常。 如果我在Anaconda之外安装Orange3(通过使用pip3安装——用户Orange3),它也可以工作

我没有从conda存储库安装Orange3的原因是它已经过时了


所以:我如何使橙色文件链接到我的Fedora libstdc++?

为什么
\u grid\u density.cpython-36m-x86\u 64-linux-gnu.So
从~/anaconda3/lib获取libstdc++?由于RPATH:

(root)# chrpath -l /conda/lib/python3.6/site-packages/Orange/widgets/utils/_grid_density.cpython-36m-x86_64-linux-gnu.so
/conda/lib/python3.6/site-packages/Orange/widgets/utils/_grid_density.cpython-36m-x86_64-linux-gnu.so: RPATH=/conda/lib
我猜,在使用pip安装Orange3时,您可能安装了conda软件包
libgcc
,而没有安装conda软件包
gcc
。因此产生了冲突

您有以下选项:

  • 删除libgcc:
    conda删除-y libgcc
  • 从.so文件中删除RPATH

    (root)# chrpath -d /conda/lib/python3.6/site-packages/Orange/widgets/utils/_grid_density.cpython-36m-x86_64-linux-gnu.so
    (root)# chrpath -l /conda/lib/python3.6/site-packages/Orange/widgets/utils/_grid_density.cpython-36m-x86_64-linux-gnu.so
    /conda/lib/python3.6/site-packages/Orange/widgets/utils/_grid_density.cpython-36m-x86_64-linux-gnu.so: no rpath or runpath tag found.
    
  • RPATH
    转换为
    RUNPATH

    (root)# chrpath -c /conda/lib/python3.6/site-packages/Orange/widgets/utils/_grid_density.cpython-36m-x86_64-linux-gnu.so
    
    以便以后可以通过执行以下操作来覆盖它:

    LD_LIBRARY_PATH=/lib64 /path/to/python/program
    
  • 构建您自己的包

  • 我强烈反对选择2或3。只有在其他包不依赖于该包的情况下,才能执行1。最好的解决方案是执行4,或者使用conda forge(到目前为止,它已经有了v3.4.0)

    您可以在查看orange3的配方,将其修改为您想要的最新版本(v3.4.1),并将其上传到anaconda.org上您自己的频道

    $ pip uninstall Orange3
    $ conda install -c conda-forge orange3