4

在 iPython 中,我导入了一个模块,该模块又导入了另一个模块。这另一个模块(即 gurobipy)试图加载它的共享库,但失败了。共享库的路径添加到LD_LIBRARY_PATH.bashrc 中。当我从 shell 作为脚本运行整个事情时,一切都很好。

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

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

编辑:我使用的是 Ubuntu 13.04。

4

2 回答 2

2

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

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

这适用于任何进程,而不仅仅是 IPython。您不能只在进程运行时更改加载程序路径。也读这个

如果你仔细想想,这真的是一件好事。它可能会导致各种问题。突然之间,进程找不到它需要的库,然后崩溃了。

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

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

于 2014-10-09T18:53:20.743 回答
2

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

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

导出 LD_LIBRARY_PATH=${NEVESIM_HOME}/lib:${LD_LIBRARY_PATH}

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

于 2014-09-24T18:42:37.893 回答