首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >drake ImportError: libmosek64.so.9.3:无法打开共享对象文件:没有这样的文件或目录

drake ImportError: libmosek64.so.9.3:无法打开共享对象文件:没有这样的文件或目录
EN

Stack Overflow用户
提问于 2022-08-03 09:13:50
回答 2查看 91关注 0票数 0

在成功编译drake_cxx_python之后,我得到了python3 -c 'import pydrake.all; print(pydrake.__file__)'的输出

代码语言:javascript
运行
复制
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/home/dmitriy/git/drake-build/install/lib/python3.8/site-packages/pydrake/all.py", line 31, in <module>
    from .autodiffutils import *
ImportError: libmosek64.so.9.3: cannot open shared object file: No such file or directory

我使用以下命令序列:

代码语言:javascript
运行
复制
rm -rfv drake-build
git clone https://github.com/RobotLocomotion/drake.git
mkdir drake-build
cd drake-build
cmake -DWITH_GUROBI=ON -DWITH_MOSEK=ON ../drake
../drake/setup/ubuntu/source_distribution/install_prereqs_user_environment.sh 
make -j4

接下来,我通过将PATH添加到/.bashrc文件中来指定它:

代码语言:javascript
运行
复制
#drake
cd ~/git/drake-build/
export PYTHONPATH=${PWD}/install/lib/python3.8/site-packages:${PYTHONPATH}
cd

sudo python3 -c 'import pydrake.all; print(pydrake.__file__)'输出

代码语言:javascript
运行
复制
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ModuleNotFoundError: No module named 'pydrake'

我安装了Mosek,使用它:使用说明

ldd install/lib/python3.8/site-packages/pydrake/solvers/__init__.cpython-38-x86_64-linux-gnu.so | grep -i mosek输出

代码语言:javascript
运行
复制
    libmosek64.so.9.3 => not found
    libmosek64.so.9.2 => not found

readelf -d install/lib/python3.8/site-packages/pydrake/solvers/__init__.cpython-38-x86_64-linux-gnu.so | grep -i path输出

代码语言:javascript
运行
复制
 0x000000000000001d (RUNPATH)            Library runpath: [/usr/lib/x86_64-linux-gnu/lapack/:/usr/lib/x86_64-linux-gnu/blas/]

同时,还有一个文件libmosek64.so.9.3*

代码语言:javascript
运行
复制
~/git/drake-build/install/lib$ l -a
./
../
cmake/
libcilkrts.so.5*
libddApp.so*
libdrake_ibex.so*
libdrake_lcm.so*
libdrake_marker.so*
libdrake.so*
libgurobi95.so@
libgurobi.so.9.5.1*
libmosek64.so.9.3*

为什么它看不见?

我尝试使用pip安装drake,并得到了相同的错误:python3 -c 'import pydrake.all; print(pydrake.__file__)'的输出

代码语言:javascript
运行
复制
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/home/dmitriy/git/drake-build/install/lib/python3.8/site-packages/pydrake/all.py", line 31, in <module>
    from .autodiffutils import *
ImportError: libmosek64.so.9.3: cannot open shared object file: No such file or directory
EN

回答 2

Stack Overflow用户

发布于 2022-08-03 20:59:10

有关说明,请参见来源:python#构建-python-绑定

把它粘贴到这里:

要在外部使用Drake的Python绑定,我们建议使用CMake。例如:

代码语言:javascript
运行
复制
git clone https://github.com/RobotLocomotion/drake.git
mkdir drake-build
cd drake-build
cmake ../drake
make -j

请注意影响Python的其他CMake选项:

  • -DWITH_GUROBI={ON, [OFF]} -使用Gurobi支持的构建。
  • -DWITH_MOSEK={ON, [OFF]} -已启用MOSEK™构建。
  • -DWITH_SNOPT={ON, [OFF]} -在启用SNOPT的情况下构建。

{...}意味着一个选项列表,被[...]包围的选项是默认选项。在不进行构建测试的情况下,使用Gurobi和MOSEK™构建pydrake的示例:

代码语言:javascript
运行
复制
cmake -DWITH_GUROBI=ON -DWITH_MOSEK=ON ../drake

您还需要正确配置您的PYTHONPATH

Ubuntu 20.04 (协调人):

代码语言:javascript
运行
复制
cd drake-build
export PYTHONPATH=${PWD}/install/lib/python3.8/site-packages:${PYTHONPATH}

macOS:

代码语言:javascript
运行
复制
cd drake-build
export PYTHONPATH=${PWD}/install/lib/python3.9/site-packages:${PYTHONPATH}

特别是,在上面引用的步骤中,没有提到PYTHONPATH。正确使用Drake需要设置正确的PYTHONPATH

使用Drake git sha e4330af2c97a14170f873b25eb42fa0449feac9d

当我运行这些命令时:

代码语言:javascript
运行
复制
mkdir 73219153
cd 73219153
git clone https://github.com/RobotLocomotion/drake.git
mkdir drake-build
cd drake-build
cmake -DWITH_GUROBI=OFF -DWITH_MOSEK=ON ../drake
../drake/setup/ubuntu/source_distribution/install_prereqs_user_environment.sh 
make -j30
export PYTHONPATH=${PWD}/install/lib/python3.8/site-packages:${PYTHONPATH}
python3 -c 'import pydrake.all; print(pydrake.__file__)'

..。那对我来说很管用。下面是我对库路径的看法:

代码语言:javascript
运行
复制
jwnimmer@call-cps:~/tmp/73219153/drake-build$ readelf -d install/lib/python3.8/site-packages/pydrake/solvers/__init__.cpython-38-x86_64-linux-gnu.so | grep -i path
 0x000000000000001d (RUNPATH)            Library runpath: [$ORIGIN/../../../..:/usr/lib/x86_64-linux-gnu/lapack/:/usr/lib/x86_64-linux-gnu/blas/]
jwnimmer@call-cps:~/tmp/73219153/drake-build$ ldd install/lib/python3.8/site-packages/pydrake/solvers/__init__.cpython-38-x86_64-linux-gnu.so | grep -i mosek
    libmosek64.so.9.3 => /home/jwnimmer/tmp/73219153/drake-build/install/lib/python3.8/site-packages/pydrake/solvers/../../../../libmosek64.so.9.3 (0x00007fbd03626000)

我不知道为什么你的图书馆路径不起作用。你需要提供更好的复制指令。

票数 1
EN

Stack Overflow用户

发布于 2022-08-04 21:28:59

我不知道为什么你看到两个版本的MOSEK要求。您是否一次又一次地将Drake安装在同一个install文件夹中?这不是CMake的工作方式。使用CMake时,您需要在重新运行任何安装之前将rm -rf安装文件夹。否则,它永远不会清理任何旧文件,它们可能会破坏安装。特别是,这可能是https://github.com/RobotLocomotion/drake/issues/14224

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73219153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档