我正在进行一个项目,在这个项目中,我需要同时使用两个python模块:
在遵循了对从源安装PyMesh的说明之后,我成功地使用了Python3.8解释器(在Ubuntu 18上)完成了import pymesh
。
然后我下载并安装了PyRep。这在一开始不起作用,并给出了错误:
~/.local/lib/python3.8/site-packages/pyrep/backend/sim.py in <module>
1 from .simConst import *
----> 2 from ._sim_cffi import ffi, lib
3 import numpy as np
4 import collections
5
ImportError: libcoppeliaSim.so.1: cannot open shared object file: No such file or directory
PyRep的安装说明说,这是因为我需要确保PyRep能够访问本地CoppeliaSim安装中的共享库,并且应该在.bashrc中添加以下行:
export COPPELIASIM_ROOT=EDIT/ME/PATH/TO/COPPELIASIM/INSTALL/DIR
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$COPPELIASIM_ROOT
export QT_QPA_PLATFORM_PLUGIN_PATH=$COPPELIASIM_ROOT
成功!我可以import pyrep
没有问题。但是,如果我现在再次导入pymesh,则会得到一个错误:
~/.local/lib/python3.8/site-packages/pymesh2-0.3-py3.8-linux-x86_64.egg/pymesh/Mesh.py in <module>
3 import numpy as np
4
----> 5 import PyMesh
6
7 class Mesh(object):
ImportError: /home/craig/Programs/CoppeliaSim/libtbb.so: file too short
通过按建议在bash登录时全局设置$LD_LIBRARY_PATH
,使pymesh在Coppelia-Sim根文件夹中搜索冲突的共享库!(为了寻找解决方案,我找到了在.bashrc中,正是出于这个原因)
我该怎么解决这个问题?PyRep要求我向LD_LIBRARY_PATH添加一个目录,但是如果我这样做,PyMesh会中断(尽管我可以让每个目录单独工作)。
尝试替代方案
通过研究这个问题,我了解到可以使用patchelf
命令更改特定共享库查找依赖项的位置。因此,我尝试手动地调整违规的PyRep _sim_cffi
库的位置:
patchelf --set-rpath "/home/craig/Programs/CoppeliaSim" ~/.local/lib/python3.8/site-packages/pyrep/backend/_sim_cffi.cpython-38-x86_64-linux-gnu.so
但是,这只会导致传递的依赖错误降低一级:
~/.local/lib/python3.8/site-packages/pyrep/backend/sim.py in <module>
1 from .simConst import *
----> 2 from ._sim_cffi import ffi, lib
3 import numpy as np
4 import collections
5
ImportError: libQt5SerialPort.so.5: cannot open shared object file: No such file or directory
https://stackoverflow.com/questions/64017475
复制相似问题