我正在进行一个项目,在这个项目中,我需要同时使用两个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 directoryPyRep的安装说明说,这是因为我需要确保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发布于 2020-09-29 14:19:51
我在旧的帖子上读到了一些关于pipx的文章,这可能是一个潜在的解决方案。
我给你留了些信息。
您可以尝试使用pipx。 pipx将完成为每个应用程序设置单独的虚拟环境的所有工作,以便所有应用程序的依赖关系保持独立。 如果您自己使用virtualenv,则必须切换环境以运行不同的应用程序。pipx为您处理环境,因此您根本不需要处理虚拟环境。 从医生那里: pipx是专门为应用程序安装而制作的,因为它增加了隔离,但仍然使应用程序在shell中可用: pipx为每个应用程序及其相关包创建了一个独立的环境。
来源:https://stackoverflow.com/a/52955897/14325407
希望这是有用的;)
发布于 2020-10-05 09:17:49
我能想到的第一件事就是创建一个虚拟环境并使用它来安装您的软件包。但问题仍然存在,因为问题在于这两个包之间的共同路径。有些事情你可以尝试:
上述解决方案将确保只在尝试安装LD_LIBRARY_PATH时设置相应的PyRep,并且不会出现PyMesh的后续路径问题。
https://stackoverflow.com/questions/64017475
复制相似问题