在远程服务器上执行 tensorflow python3,子进程无法解释所有 tensorflow 输入 args。 ImportError:没有名为“脚本”的模块
Posted
技术标签:
【中文标题】在远程服务器上执行 tensorflow python3,子进程无法解释所有 tensorflow 输入 args。 ImportError:没有名为“脚本”的模块【英文标题】:Executing tensorflow python3 on remote server, subprocess can't interpret all of tensorflows input args. ImportError: No module named 'scripts' 【发布时间】:2019-07-02 08:11:49 【问题描述】:我正在尝试从我的本地主机在远程服务器上执行 tensorflow 图像识别。我的本地机器有一个脚本运行这个子进程 ssh 命令来在远程服务器上执行脚本。
stdoutdata = subprocess.getoutput('sshpass -p \'mypassword\' ssh root@myserverIP "python3 ../var/www/html/tensorflowScreenStatus/getScreenStatus.py"')
我可以让脚本运行并将输出返回到我的本地脚本没有问题。在服务器端脚本中,我有一个 python 子进程为 tensorflow 运行相同的终端命令来筛选图像,当我在远程机器上手动运行它时,它工作正常。
当从我的本地脚本执行服务器端脚本时,python 不知道如何处理 tensorflow 的参数。
导致错误的服务器端命令
stdoutdata = subprocess.getoutput("sudo python3 -m scripts.label_image --graph=tf_files/retrained_graph.pb --image=asdfsfsd.jpg") print("stdoutdata: " + stdoutdata)
错误:
/usr/bin/python3: Error while finding spec for 'scripts.label_image' (ImportError: No module named 'scripts')
scripts.label_image 是命令中的一个参数,tensorflow 可以理解如何处理。就好像通过在子进程中运行 tensorflow 命令,python 忘记让 tensorflow 读取它一样。如果我通过 ssh 到远程服务器手动运行相同的命令,它也可以正常工作。
我什至不知道如何称呼这种错误。好像python3仍然可以运行,但是在子进程中运行时忘记了默认args的含义。
非常感谢任何帮助。
【问题讨论】:
您确定在远程服务器上,您使用的是安装 TensorFlow 的相同 Python 安装(尤其是因为您在这里使用的是sudo
)?
无论有没有 sudo,我都会得到相同的结果。我将“python3 --version”放在实时服务器上的子进程中并远程执行它,然后通过ssh手动执行。 Python3 版本是一样的。这是你的意思吗?
@ElliotRobert 我相信他的意思是你需要确保整个环境,不仅仅是 Python 版本,还有包、包管理器,甚至像 CUDA 之类的非 Python 依赖项(特别是考虑到使用TensorFlow)。
【参考方案1】:
感谢 Samuel Dion-Girardeau 和 nhubbard 试一试。但是,我找到了解决方案。我将错误解释为意味着 python 不知道如何将 scripts.label_image 目录作为路径读取,而是在子进程中运行命令时将其作为要导入的模块读取。
这是不正确的。 Python 不知道如何读取 scripts.label_image 目录,所以我像这样修改了命令。
stdoutdata = subprocess.getoutput('sshpass -p \'password\' ssh root@ipaddress "python3 ../var/www/html/tensorflowScreenStatus/label_image.py --graph=../var/www/html/tensorflowScreenStatus/tf_files/retrained_graph.pb --image=../var/www/html/tensorflowScreenStatus/asdfsfsd.jpg"')
我将 label_image.py、jpg 从脚本移到父目录中,为这些文件夹设置完整目录。我还取出了服务器上的中间脚本,所以现在我的本地脚本在本地运行这个 ssh 命令,远程运行 tensorflow 命令,然后返回结果,所以实际上只需要一个脚本。
感谢您的帮助。
【讨论】:
以上是关于在远程服务器上执行 tensorflow python3,子进程无法解释所有 tensorflow 输入 args。 ImportError:没有名为“脚本”的模块的主要内容,如果未能解决你的问题,请参考以下文章
PyCharm 远程解释器和 Tensorflow -> 无法导入 Cudart.so