我们有一个python 2.7脚本,完全可以执行LOCALLY。
仅当我尝试远程调用脚本(SSH)时才会出现问题:
ssh user@server "python script.py"
*Traceback (most recent call last):
File "script.py", line 18, in <module>
import requests
ImportError: No module named requests*
在做了一些研究之后,我尝试在导入库之前使用sys.path.insert手动插入绝对路径到“requests”库:
sys.path.insert(1,'/usr/local/lib/python2.7/site-packages/requests-2.10.0-py2.7.egg')
import requests
我甚至确认通过在远程调用脚本时打印sys.path成功添加了包的路径:
print '\n'.join(sys.path)
结果:
/usr/local/lib/python2.7/site-packages/setuptools-20.9.0-py2.7.egg
/usr/local/lib/python2.7/site-packages/requests-2.10.0-py2.7.egg
/usr/local/lib/python27.zip
/usr/local/lib/python2.7
/usr/local/lib/python2.7/plat-linux2
/usr/local/lib/python2.7/lib-tk
/usr/local/lib/python2.7/lib-old
/usr/local/lib/python2.7/lib-dynload
/usr/local/lib/python2.7/site-packages
但是,无论如何,我仍然会收到“ImportError:无模块命名请求”。
你能帮我理解我错过了什么吗?
同样,这个脚本确实找到了没有问题的库,并且当我在本地执行脚本时运行完全正常。
谢谢!
答案 0 :(得分:0)
requests
是一个非标准的Python库。确保它已安装在您尝试执行脚本的远程控制台上。
在遥控器上,从shell执行:
easy_install pip
pip install requests
答案 1 :(得分:0)
如果我理解正确,你试图在同一台机器上运行相同的脚本,但是一次从本地shell运行,一次从远程shell运行(ssh
)。
如果是这种情况,当您使用远程shell时,请确保正确设置了环境。
这可以归结为只是正确设置PYTHONPATH
环境变量。
在您的情况下,这将是:
export PYTHONPATH=/usr/local/lib/python2.7/site-packages/:$PYTHONPATH
您可能需要添加更多路径。
当我遇到这类问题时,我通常会从工作环境中运行python shell并检查文件的来源,因此我可以确定PYTHONPATH
中设置了正确的条目:
$ ipython
In [1]: import requests
In [2]: print requests.__file__
/usr/local/lib/python2.7/site-packages/requests/__init__.pyc
对于此示例,如果我无法正确/usr/local/lib/python2.7/site-packages/
,我会将PYTHONPATH
添加到import requests
。