我开始在一家使用 docker 容器开发代码的公司工作,但到目前为止我还没有这方面的经验。我的工作性质是数据科学,因此我发现 Spyder 是此类工作的宝贵工具。
我想将spyder连接到我的同事正在使用的docker容器,但我不确定如何连接,或者这是否可能。我无法找到我能理解的有用材料。
我考虑放弃 Spyder,转而使用 VS Code,因为它能够连接到 docker 容器。但我尝试在 VS Code 中重新创建 Spyder 功能的最佳尝试仅部分成功。
考虑到 Spyder 和 Docker 的流行,我认为这将是一件简单的事情。无论如何,我将非常感谢您提供有关此主题的任何信息。如果您知道任何可以做到这一点的 IDE,我想我可以考虑其他 IDE。我需要的关键功能是启动交互式 python 环境的能力,该环境允许我在 docker 中运行脚本,在脚本运行后保存变量,使用这些变量查找出错的地方并轻松创建绘图,并且可能还可以访问 Spyder 等调试器。
我显然不想让 Dockerfile 膨胀并在容器内安装 Spyder,我希望有一些东西可以在外部运行,但能够连接到 docker 容器并使用那里定义的 python 环境。
以下两个链接对我没有帮助: 将 Spyder 连接到远程主机上 docker 容器中的控制台 将 Spyder 连接到 Docker 容器中的远程 Jupyter Notebook
我不确定有人关心,但我可以简要描述我的解决方案。您可以在 docker 容器中设置
ssh
,然后使用 Spyder 的“连接到现有内核”功能,将 Spyder 用作在 docker 容器中运行的 ipython 内核的前端。此功能允许您通过 ssh
连接到远程 ipython 内核。设置起来有点麻烦,所以如果您只需在容器内使用 ipython
会话和 ipdb
就可以了,那么这可能就是正确的选择。但是,如果您确实在尝试调试某些东西并想要完整的 Spyder 前端,那么以我有限的经验来看,这可以可靠地工作。
如果您尝试这样做,请注意,每当您尝试连接到任何现有内核(无论是否在 Docker 容器中)时,某些版本的 Spyder 似乎都会崩溃。因此,如果最新版本不起作用,请尝试其他版本...
编辑:我现在特别不确定是否有人关心,但自从发布这个问题以来我已经放弃了 Spyder。当尝试依赖 docker 内部的 Spyder 时,花了太长时间才真正开始完成工作,而 Docker 本身在连接远程内核的能力及其调试器功能方面存在缺陷。我在 Windows/Ubuntu 上的体验不一致。相反,如果我不需要进行任何数据可视化,我只需在容器中使用
ipython
。
如果我需要进行数据可视化,我通常会在 docker 中做任何我需要做的事情来将我需要的数据保存到文件中。然后,我有一个 conda 环境,用于分析文件中的数据。即使在 docker 之外,我也不再使用 Spyder。相反,我在
vim
中编写文件,在命令行运行它们,然后在代码中使用 breakpoint()
进行调试;我设置 export PYTHONBREAKPOINT=ipdb.set_trace
或 IPython.embed
取决于我是否想要 ipdb
逐步执行代码,或者我是否只需要在交互式 shell 中使用程序的所有变量在程序中的特定位置尝试一些代码就在那时定义的。事实上,您可以通过发出 ipython
从 ipdb
启动 interact
shell。这对我来说效果很好,并且可能对其他人也有效,具体取决于工作/公司的性质。无需依赖像 Spyder 这样的笨重工具,这是非常自由的。