远程调用Python脚本时不打包的包

时间:2016-06-20 21:01:18

标签: python python-2.7

我们有一个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:无模块命名请求”。

你能帮我理解我错过了什么吗?

同样,这个脚本确实找到了没有问题的库,并且当我在本地执行脚本时运行完全正常。

谢谢!

2 个答案:

答案 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