Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.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
Python 本地matplotlib显示在PyCharm中,带有来自Google云平台的远程ssh解释器';s计算引擎_Python_Matplotlib_Ssh_Google Cloud Platform_Pycharm - Fatal编程技术网

Python 本地matplotlib显示在PyCharm中,带有来自Google云平台的远程ssh解释器';s计算引擎

Python 本地matplotlib显示在PyCharm中,带有来自Google云平台的远程ssh解释器';s计算引擎,python,matplotlib,ssh,google-cloud-platform,pycharm,Python,Matplotlib,Ssh,Google Cloud Platform,Pycharm,我目前正在GCP上的两个VM实例上运行python3.5脚本,该实例来自在我的Mac上运行的本地PyCharm会话(有关详细的环境规范,请参阅下文) 我在GCP有两个不同的项目,看起来很相似。我和我们的云管理员一起查看了他们的设置,我们看不到任何重大差异,至少没有任何细微的差异。我使用以下cloud SDK命令行在GCP上创建了两个深度学习映像,每个项目中有一个: export PROJECT=[MY_PROJECT_NAME] export INSTANCE_ROOT=$USER-vm ex

我目前正在GCP上的两个VM实例上运行python3.5脚本,该实例来自在我的Mac上运行的本地PyCharm会话(有关详细的环境规范,请参阅下文)

我在GCP有两个不同的项目,看起来很相似。我和我们的云管理员一起查看了他们的设置,我们看不到任何重大差异,至少没有任何细微的差异。我使用以下cloud SDK命令行在GCP上创建了两个深度学习映像,每个项目中有一个:

export PROJECT=[MY_PROJECT_NAME]

export INSTANCE_ROOT=$USER-vm
export ZONE=europe-west4-a
export IMAGE_FAMILY=tf-latest-gpu
export INSTANCE_TYPE=n1-highmem-8

export GPU_TYPE=v100
export GPU_COUNT=1
export INSTANCE_NAME=$INSTANCE_ROOT-$GPU_TYPE-$GPU_COUNT
gcloud compute instances create $INSTANCE_NAME \
        --zone=$ZONE \
        --image-family=$IMAGE_FAMILY \
        --image-project=deeplearning-platform-release \
        --maintenance-policy=TERMINATE \
        --accelerator=type=nvidia-tesla-$GPU_TYPE,count=$GPU_COUNT \
        --machine-type=$INSTANCE_TYPE \
        --boot-disk-size=200GB \
        --metadata=install-nvidia-driver=True \
        --scopes=storage-rw
两幅图像完全相似

我在PyCharm中配置了两个远程ssh解释器,并在两个虚拟机上部署了Python代码。在VM实例配置(操作系统、Python版本/libs、源代码等)和PyCharm远程解释器配置方面,一切都是完全相似的。 在这两种情况下,到实例的ssh入口连接(在端口22上)工作得非常好

但是,当调用
plt.show()
以使用matplotlib显示图像时,图像会显示在一个设置中,而不会显示在另一个设置中

这不是设置正确的ssh配置的问题(
-X
命令行上的选项,
x11向前
等)。我已经检查过了,无论如何,我的一个虚拟机在这个配置中显示我的图像方面做得很好

我调试了执行,发现PyCharm通过实现自己的matplotlib
FigureCanvas
自动处理X显示。在远程ssh中时,
show()
函数实际上会在定义的主机(即我的本地Mac)上打开一个套接字,并发送要显示的缓冲区:

    sock = socket.socket()
    sock.connect((HOST, PORT))
    [..]
    sock.send(buffer)
这正是我的两种配置的分歧之处:

  • 正在工作的用户尝试连接到
    本地主机:53725
    并成功:

  • 失败的用户也尝试连接到
    localhost:53725
    ,但出现异常

  • 我最强烈的假设是,两个GCP项目中的某些网络配置在某种程度上有所不同,并阻止了第二个项目在
    localhost:53725
    上的连接。 然而,除此之外,我不知道会发生什么和/或如何修复它

    如有任何意见/建议,将不胜感激

    谢谢, 洛朗

    --

    详细环境规范: PyCharm 2018.2.4(专业版) 建造#PY-182.4505.26,建造于2018年9月19日 许可给PyCharm Evaluator 有效期:2018年10月27日 JRE:1.8.0_152-release-1248-b8 x86_64 JVM:JetBrains s.r.o提供的OpenJDK 64位服务器虚拟机
    macOS 10.14正常。这似乎是一个bug,我找到了一个解决方法。 我与大家分享它,因为它可以为任何遇到同样问题的人节省数小时的故障排除和调试时间

    当您保持在同一个PyCharm会话中,并从一个解释器切换到另一个解释器时,实际上会出现问题。 如果退出PyCharm并再次启动,本地显示将与您首先运行的任何一个解释器/VM一起工作。然后,如果切换到第二个,则会失败。 一切看起来都像是PyCharm在端口或其他任何地方设置了某种锁,阻止您从一个解释器无缝切换到另一个解释器

    我将与PyCharm支持团队分享这些见解。顺便说一句,除此之外,这个带有远程口译员的本地显示功能非常棒,工作正常