使用SSH时Python无法找到模块

6 投票
5 回答
6776 浏览
提问于 2025-04-16 22:23

我在服务器上使用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变量。

撰写回答