Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过ssh运行python时,似乎没有安装模块_Python_Ssh - Fatal编程技术网

通过ssh运行python时,似乎没有安装模块

通过ssh运行python时,似乎没有安装模块,python,ssh,Python,Ssh,我正在通过连接到远程服务器 ssh user@server.com 跑 python script.py 在适当的目录中。然而,我得到了错误 ImportError: No module named numpy 即使我知道该模块已安装,并且当我实际登录到该服务器时,脚本运行没有问题 我所能找到的答案中没有一个是有效的(例如,和)。对于如何使用ssh运行脚本,您有什么想法吗 远程服务器安装了Python 2.6.6,并且 which python 返回 /usr/bin/python 远

我正在通过连接到远程服务器

ssh user@server.com

python script.py
在适当的目录中。然而,我得到了错误

ImportError: No module named numpy
即使我知道该模块已安装,并且当我实际登录到该服务器时,脚本运行没有问题

我所能找到的答案中没有一个是有效的(例如,和)。对于如何使用ssh运行脚本,您有什么想法吗

远程服务器安装了Python 2.6.6,并且

which python
返回

/usr/bin/python

远程服务运行CentOS。

请参阅此处描述的类似问题:

通过在两种情况下运行
env
,比较本地(物理)模式和远程模式下的环境变量。将缺少的变量从本地配置文件移动到/etc/profile。然后从ssh会话注销并再次连接


另一种方法:如果您不想更改任何内容,那么在ssh之后通过
su-
切换到您的用户。这可能看起来很奇怪,因为您已与此用户一起登录。不同的是,在
su
之后,您的所有环境。变量将像在本地(物理)模式中一样设置。优点:速度快。缺点:每次要运行Python脚本时都必须这样做。因此,从长远来看,配置/etc/profile的第一种方法可能会更好。

请参阅此处描述的类似问题:

通过在两种情况下运行
env
,比较本地(物理)模式和远程模式下的环境变量。将缺少的变量从本地配置文件移动到/etc/profile。然后从ssh会话注销并再次连接


另一种方法:如果您不想更改任何内容,那么在ssh之后通过
su-
切换到您的用户。这可能看起来很奇怪,因为您已与此用户一起登录。不同的是,在
su
之后,您的所有环境。变量将像在本地(物理)模式中一样设置。优点:速度快。缺点:每次要运行Python脚本时都必须这样做。因此,从长远来看,第一种配置/etc/profile的方法可能更好。

目前没有足够的信息来回答这个问题。也就是说,一个好的开始应该包括
类型python
声明-p PYTHONPATH
,因为它们存在于物理登录案例和SSH案例中。(发生这种情况的原因几乎是无限的;您的dotfiles中可能有一个条目分支于是否设置了
SSH\u USER
;SSH可以配置为通过本地环境变量,从而设置不合适的PYTHONPATH;SSH中可能有一个
authorized\u keys
文件来设置完整的要调用的shell完全不同;环境设置可能依赖于PAM模块……等等;如果我认真考虑的话,我可能会想到20种不太可能但可能的场景,而实际的因果链可能与其中任何一种都不匹配).
type python
which python
是两个不同的东西。我非常有意地要求
type
;如果在一个场景中有别名、shell函数或类似的东西,而在另一个场景中没有,
其中的
对它一无所知。(另外,请明确说明显示任何诊断输出的是工作/本地情况还是损坏/远程情况,并包括这两种情况).
type
python返回
type:Command not found.
现在没有足够的信息来回答这个问题。也就是说,一个好的开始应该包括
type python
declare-p PYTHONPATH
,因为它们存在于物理登录案例和SSH案例中。(发生这种情况的原因几乎是无限的;您的dotfiles中可能有一个条目分支于是否设置了
SSH\u USER
;SSH可以配置为通过本地环境变量,从而设置不合适的PYTHONPATH;SSH中可能有一个
authorized\u keys
文件来设置完整的要调用的shell完全不同;环境设置可能依赖于PAM模块……等等;如果我认真考虑的话,我可能会想到20种不太可能但可能的场景,而实际的因果链可能与其中任何一种都不匹配).
type python
which python
是两个不同的东西。我非常有意地要求
type
;如果在一个场景中有别名、shell函数或类似的东西,而在另一个场景中没有,
其中的
对它一无所知。(另外,请明确说明显示任何诊断输出的是工作/本地情况还是损坏/远程情况,并包括这两种情况)
type
python返回
type:Command not found.
你的意思是
su-youruser
,对吗?默认情况下,
su
不像登录shell……也就是说,一般来说,我建议将推测性内容保留在注释中,直到有理由相信给定的答案实际上是正确的。(由于OP目前没有物理访问权限,我们没有依据得出任何需要对环境变量进行比较的结论,我个人的印象是,这个问题太模糊,无法回答,因此在澄清之前是可以接近的)。(此外,我不知道你所说的“局部(物理)模式”是什么意思)--
su
是否获得与
login
相同的环境变量是本地点文件、PAM和其他配置的问题,而不是登录和su都利用的“物理模式”的结果)@Charles Duffy:关于
su
:谢谢,你说得对,我已经更正了。关于物理模式:同样,你是对的。但我更喜欢使用OP中的措辞,因此在真正需要之前我避免冗长的解释。你是说
su