在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
答案 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为自己使用一个运行时路径,并为其中运行的进程导出另一个。