【问题标题】:python cannot find module when using sshpython在使用ssh时找不到模块
【发布时间】:2019-04-04 15:08:12
【问题描述】:

我在服务器上使用 python。当我运行需要 numpy 模块的 python 命令时,如果我这样做了

ssh <server name> <python command>

该服务器将抱怨找不到名为 numpy 的模块。

但是,如果我首先通过 ssh 到该服务器

ssh <server name>

然后在该服务器上运行该 python 命令

<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

【问题讨论】:

    标签: python ssh


    【解决方案1】:

    是的。这也意味着您的用户的 .bashrc 中有一些特定的内容,它修改了 $PATH 以允许您访问额外的模块。我个人不喜欢在全局级别修改路径,所以我建议使用 Python 方法:调用sys.path.append('/path/to/numpy')

    【讨论】:

    • 感谢您的回复。请看一下我添加的内容。会不会还是路径的问题。谢谢
    【解决方案2】:

    我发现了问题。确实是python路径的问题。

    而我没有找到这个的原因是,而不是这样做

    ssh <server name> echo $PYTHONPATH
    

    查找python搜索模块的所有路径

    我们应该这样做

    ssh <server name> 'echo $PYTHONPATH'
    

    我们不能忽略引号来检查服务器上的变量 PYTHONPATH

    【讨论】:

      【解决方案3】:

      在一行中通过 ssh 运行 cmd 时,不会读取 .profile。 要测试,试试这个:

      ssh host env
      

      改用这个来解决这个问题(引号是强制性的):

      ssh host '. ~/.profile; cmd'
      

      例如:

      ssh <server name> '. ~/.bashrc; <python command>'
      

      【讨论】:

        【解决方案4】:

        遇到同样的问题并尝试了上述所有方法。

        对我有用的是将远程命令从 python 更改为完整路径。

        1) SSH 到你的远程,通过

        找出你的 python 所在的位置

        2) 将您的命令从 python pyscript.py 更改为 remote/path/to/python pyscript

        【讨论】:

          【解决方案5】:

          检查并确保您使用的是相同的 python 环境。您可能在登录时使用像 /usr/bin/python 这样的安装,而在尝试远程运行时可能使用不同的安装,例如 /usr/local/bin/python。

          【讨论】:

          • 感谢您的回复。请看一下我添加的内容。我觉得我远程登录运行的python环境是一样的。
          猜你喜欢
          • 1970-01-01
          • 2016-01-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-23
          • 1970-01-01
          • 2017-05-18
          相关资源
          最近更新 更多