当通过shell脚本调用python脚本时发生ImportError
我已经把我要解决的问题简化为这个问题。下面是我的python脚本当通过shell脚本调用python脚本时发生ImportError,python,bash,shell,Python,Bash,Shell,我已经把我要解决的问题简化为这个问题。下面是我的python脚本tmp.py的内容: import numpy print "Imported numpy!" 如果我直接在命令行调用python脚本 $ python tmp.py 它成功导入numpy并打印print语句 下面是我的bash脚本test.sh的内容: #!/bin/bash echo "PYTHONPATH:: $PYTHONPATH" echo "PATH:: $PATH"
tmp.py
的内容:
import numpy
print "Imported numpy!"
如果我直接在命令行调用python脚本
$ python tmp.py
它成功导入numpy并打印print语句
下面是我的bash脚本test.sh的内容:
#!/bin/bash
echo "PYTHONPATH:: $PYTHONPATH"
echo "PATH:: $PATH"
echo "LD_LIBRARY_PATH:: $LD_LIBRARY_PATH"
pyver=`which python`
echo "Using python version $pyver"
python tmp.py
如果我在命令行调用这个脚本
$ ./test.sh
我得到以下错误:
Traceback (most recent call last):
File "tmp.py", line 1, in <module>
import numpy
File "/home/alex/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/numpy/__init__.py", line 148, in <module>
import add_newdocs
File "/home/alex/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/numpy/add_newdocs.py", line 9, in <module>
from numpy.lib import add_newdoc
File "/home/alex/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/numpy/lib/__init__.py", line 13, in <module>
from polynomial import *
File "/home/alex/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/numpy/lib/polynomial.py", line 17, in <module>
from numpy.linalg import eigvals, lstsq
File "/home/alex/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/numpy/linalg/__init__.py", line 48, in <module>
from linalg import *
File "/home/alex/Enthought/Canopy_64bit/User/lib/python2.7/site-packages/numpy/linalg/linalg.py", line 23, in <module>
from numpy.linalg import lapack_lite
ImportError: libmkl_gf_lp64.so: cannot open shared object file: No such file or directory
回溯(最近一次呼叫最后一次):
文件“tmp.py”,第1行,在
进口numpy
文件“/home/alex/enthught/Canopy_64bit/User/lib/python2.7/site packages/numpy/__init__uuuuu.py”,第148行,in
导入添加新文档
文件“/home/alex/enthught/Canopy_64bit/User/lib/python2.7/site packages/numpy/add_newdocs.py”,第9行,在
从numpy.lib导入添加新文档
文件“/home/alex/enthunk/Canopy_64bit/User/lib/python2.7/site packages/numpy/lib/__init__;.py”,第13行,在
从多项式导入*
文件“/home/alex/enthund/Canopy_64bit/User/lib/python2.7/site packages/numpy/lib/polymonery.py”,第17行,在
从numpy.linalg进口eigvals,lstsq
文件“/home/alex/enthught/Canopy_64bit/User/lib/python2.7/site packages/numpy/linalg/_init__uuuuu.py”,第48行,in
从linalg进口*
文件“/home/alex/enthund/Canopy_64bit/User/lib/python2.7/site packages/numpy/linalg/linalg.py”,第23行,在
从numpy.linalg导入lapack_lite
ImportError:libmkl_gf_lp64.so:无法打开共享对象文件:没有此类文件或目录
我已经检查了echo$PYTHONPATH
、echo$PATH
、echo$LD\u LIBRARY\u PATH
和which python
的结果,无论是在bash脚本中调用还是在命令行中调用,都返回相同的结果
我不知道发生了什么事 我也有类似的问题。事实证明,在我的bash脚本中,我使用与命令行不同的Python版本运行Python脚本(我的env是在Python2.7上使用virtualenv设置的,但我使用的是bash脚本中的Python3调用脚本)
您的代码片段中没有任何东西表明是这种情况,但值得检查以确保Python版本匹配。您是否像从命令行测试脚本一样从同一目录运行该脚本?测试了您的方法,它对我使用ubuntu非常有效。如前一条评论所述,tmp.py和test.sh是否在同一目录中?
$ls-Fal/bin/bash的输出是什么?您的命令行实际上是bash还是使用不同的shell?如果使用$,输出是否不同/test.sh
或$source./test.sh
而不是$./test.sh
?是的,脚本与tmp.py
在同一目录下运行,是的!bash脚本使用$source./tesh.sh
为什么?