Linux上的Python模块错误
我在Linux Mint 16上使用Python 2.7。最近遇到一个错误,当我通过程序启动器(比如按下Alt F2的提示框或桌面上的图标快捷方式)来运行我的IDE(我试过Spyder和Pycharm)时,模块无法加载,出现了以下错误:
File "/usr/local/lib/python2.7/dist-packages/gurobipy/__init__.py", line 1, in from .gurobipy import * ImportError: libgurobi56.so: cannot open shared object file: No such file or directory
不过,如果我从命令行运行程序,模块就能正确加载,程序也能正常运行。我每个IDE只有一个安装版本。以下是两个实例的sys.path输出:
通过快捷方式运行Pycharm的sys.path输出:
/home/XXXXXX/bin/pycharm-community-3.1.3/helpers/pydev', '/usr/local/lib/python2.7/dist-packages/pip-1.5.5-py2.7.egg', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/home/XXXXXX/PycharmProjects/untitled8']
通过命令行运行Pycharm的sys.path输出:
/home/XXXXXX/bin/pycharm-community-3.1.3/helpers/pydev', '/usr/local/lib/python2.7/dist-packages/pip-1.5.5-py2.7.egg', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/home/XXXXXX/PycharmProjects/untitled8']
包gurobipy位于/usr/lib/python2.7/dist-packages
安装gurobi包的步骤如下:
1) 将下载的文件解压到/opt/gurobi562/linux64
2) 在.bashrc文件中添加以下几行:
export GUROBI_HOME="/opt/gurobi562/linux64"
export PATH="${PATH}:${GUROBI_HOME}/bin"
export LD_LIBRARY_PATH="${GUROBI_HOME}/lib"
3) 在/opt/gurobi562/linux64目录下运行python setup.py install,这样就在/usr/local/lib/python2.7中创建了gurobipy文件夹
4) 在.bashrc文件中添加以下一行:
export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/local/lib/python2.7/dist- packages/gurobipy"
2 个回答
你看到的行为不同,是因为你的 .bashrc
文件在你从终端启动 PyCharm(或其他编辑器)之前总是会被加载。而其他快捷方式并不知道你的 .bashrc
文件,也不需要知道。看起来这个模块需要一些特别的配置。
为了避免每次都要使用终端,你最好修改一下你使用的快捷方式(这需要你自己去弄清楚),来设置正确的环境变量。其中最重要的一个变量是 LD_LIBRARY_PATH
。
export LD_LIBRARY_PATH="/opt/gurobi562/linux64/lib:/usr/local/lib/python2.7/dist- packages/gurobipy"
注意: dist- packages
看起来有点奇怪,但我就是从你的问题中复制过来的。如果不管用,那就得你自己去找找正确的目录名称是什么。
你没有设置gurobipy的路径。
先下载,然后解压到/opt
这个文件夹。
cd to `/opt/gurobi562/linux64` and run `python setup.py install`
接下来,把下面的内容添加到~/.bashrc
文件里。
export GUROBI_HOME="/opt/gurobi562/linux64"
export PATH="${PATH}:${GUROBI_HOME}/bin"
export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${GUROBI_HOME}/lib"
在终端里输入source ~/.bashrc
来更新设置。
然后启动ipython命令行,试试输入from gurobipy import *
,应该可以正常工作。如果你没有下载并安装许可证,它只会报一个关于许可证的错误,你可以从这里下载。
如果想让所有用户都能访问,首先创建
sudo gedit /etc/ld.so.conf.d/gurobi_pi.conf
然后添加
/opt/gurobi562/linux64/lib
并保存这个文件。
接着输入
sudo ldconfig
来更新系统中的库文件。这样你在Pycharm里就可以访问共享的库了。