使用SSH时Python无法找到模块
我在服务器上使用Python。当我运行一个需要numpy模块的Python命令时,如果我直接这样做:
ssh <server name> <python command>
服务器会报错,说找不到numpy模块。
但是,如果我先通过SSH登录到那个服务器,然后再在服务器上运行那个Python命令:
ssh <server name>
一切就正常了。
<python command>
这说明服务器上已经安装了numpy模块,只是我不登录的时候,它找不到这个模块。
你们觉得这可能是什么问题呢?
谢谢!
补充:
抱歉忘了提到,我运行的结果:
ssh <server name> which python
ssh <server name> echo $PYTHONPATH
ssh <server name> echo $PYTHONUSERBASE
ssh <server name> echo $LD_LIBRARY_PATH
和我第一次SSH登录到服务器后运行的结果是一样的。
ssh <server name>
然后再运行那些命令。
which python
echo $PYTHONPATH
echo $PYTHONUSERBASE
echo $LD_LIBRARY_PATH
5 个回答
1
当你通过ssh在一行命令中运行cmd时,.profile文件不会被读取。
你可以试试这样做:
ssh host env
要解决这个问题,可以使用这个方法(引号是必须的):
ssh host '. ~/.profile; cmd'
例如:
ssh <server name> '. ~/.bashrc; <python command>'
1
是的。这也意味着你用户的 .bashrc 文件里有一些特别的设置,修改了 $PATH
,让你可以访问额外的模块。我个人不太喜欢在全局范围内修改路径,所以我建议使用 Python 的方法:调用 sys.path.append('/path/to/numpy')
1
我找到了问题。确实是Python路径的问题。
我之所以没有发现这个问题,是因为我没有这样做:
ssh <server name> echo $PYTHONPATH
来查看Python搜索模块的所有路径。
我们应该这样做:
ssh <server name> 'echo $PYTHONPATH'
我们不能忽略引号,要检查服务器上的PYTHONPATH变量。