iPython:导入的模块无法找到其共享库

时间:2014-09-23 12:16:32

标签: python shared-libraries ipython gurobi

在iPython中,我导入一个模块,然后导入另一个模块。另一个模块(即gurobipy)尝试加载其共享库,该库失败。共享库的路径将添加到.bashrc中的LD_LIBRARY_PATH。当我从shell运行整个脚本时,一切都很好。

我用谷歌搜索了一段时间,但没有找到问题的最终答案:如何在iPython中设置LD_LIBRARY_PATH以便导入的模块可以看到它?

我尝试了os.environ但仍然收到了相同的错误消息:ImportError: libgurobi50.so: cannot open shared object file: No such file or directory

编辑:我使用的是Ubuntu 13.04。

2 个答案:

答案 0 :(得分:1)

尝试将LD_LIBRARY_PATH包含到系统范围的文件中。例如,/ etc / profile(在它的末尾)。例如,这是我需要为我的案例添加的内容:

导出NEVESIM_HOME = / home / kam / Applications / Nevesim

export LD_LIBRARY_PATH = $ {NEVESIM_HOME} / lib:$ {LD_LIBRARY_PATH}

小心语法。此外,您必须重新登录才能使更改生效。 如需更多帮助,请参阅https://help.ubuntu.com/community/EnvironmentVariables

答案 1 :(得分:1)

运行时库路径是在python(或IPython)解释器启动时配置的。 Read this

在搜索库时,似乎像ctypes这样的工具会使用此路径。同样,如果模块依赖于特定的库,它将在导入或运行时搜索此路径。

任何流程都是如此,而不仅仅是IPython。您不能只在进程运行时更改加载器路径。 Also read this

如果你考虑一下,这真的是一件好事。它可能会导致各种问题。突然之间,这个过程找不到它需要的库,并且崩溃了。

这很不幸,因为这意味着IPython无法真正用作完整的shell替代品。

我不确定像BASH这样的shell如何处理这个问题。我想BASH为自己使用一个运行时路径,并为其中运行的进程导出另一个。