django - 如何将Emacs的Elpy缓冲区内python解释器连接到docker容器?

标签 django python-3.x docker emacs elpy

我开始研究将在Docker容器中运行的Django应用程序。我希望能够在Emacs中使用interactive python,它在Docker容器和Django应用程序的上下文中执行代码。本质上,我希望Emacs使用的Python解释器在Docker容器中运行。

我已经设法通过创建修改后的Dockerfile来实现这一目标,该修改后的Dockerfile与我的实际Dockerfile容器仅不同之处在于,它无需调用Django命令(其结尾为:

CMD ./manage.py shell

这意味着当我运行该Docker容器时,我会得到一个实际上在该容器内运行的Django解释器。我让Elpy在添加以下内容时启动python shell时调用了此方法:
(setq python-shell-interpreter "/path_to_my_script/run_shell.sh")

到我的.emacs.d / init.el文件。其中“/path_to_my_script/run_shell.sh”脚本是运行容器的脚本。

实际上,这在大多数情况下是有效的。我能够突出显示一行代码,例如
from django.utils import timezone

并运行Emacs命令elpy-shell-send-region-or-buffer,它将执行代码。然后我可以突出显示
print(timezone.now())

它将显示当前时间。我已经通过运行以下命令验证了此代码实际上已在我的容器上运行:
import os
print(os.getcwd())

并查看我的Docker容器用户的主目录。

我在使用此设置时仍然遇到的问题是,当我尝试使用相同的elpy-shell-send-region-or-buffer命令同时执行多行python时。当我突出显示多行并执行该命令时,我在python shell中收到以下错误:
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/local/lib/python3.5/codecs.py", line 895, in open
    file = builtins.open(filename, mode, buffering)
FileNotFoundError: [Errno 2] No such file or directory: '/tmp/py10324GOe'

我一直无法找到以下问题的答案:
  • 为什么codecs.py试图读取tmp文件?
  • Python创建的所有临时文件有哪些? (如果您正在运行一些python代码,并在/ tmp目录中查看,则可能会看到很多文件,例如py271761jE。)
  • 为什么我的Docker容器中/ tmp目录为空?似乎Python想要创建该目录中的文件并从中读取文件,但是失败了。
  • 我该如何调试?

  • 如果有人对这些问题有任何答案,那将是巨大的帮助。我一直无法找到有关此问题的任何信息。在/ tmp目录中搜索py *文件只会打开tempfile软件包。

    我不知道发生了什么,但是我目前的理论是,当将多行区域发送到python shell时,它需要处理换行符,以便尝试使用编解码器文件。我认为此文件某种程度上依赖于临时文件,而Docker容器将其弄乱了。我不知道这个理论有多接近,但我不知道如何进一步研究它。

    最佳答案

    Why is codecs.py trying to read a tmp file?



    我很确定这是正在发生的事情:
  • Emacs将代码写入/tmp/py10324GOe
  • Emacs指示Python加载/tmp/py10324GOe
  • Python失败,因为容器无法访问主机的/tmp/。容器具有其自己的单独的/tmp/目录。

  • 解决此问题的最简单方法是将主机的/tmp/目录链接到容器的/tmp/目录。一些谷歌搜索将我引至以下命令:
    docker run ... -v /tmp:/tmp
    

    我尚未测试该代码,但似乎是正确的方向。

    关于django - 如何将Emacs的Elpy缓冲区内python解释器连接到docker容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43194627/

    相关文章:

    docker - 如何测量 Docker 构建步骤的持续时间?

    python - 防止 Django 中外键的排列

    django - 你如何使用 Django URL 命名空间?

    python - 在 Python 3 中使用 PIL 库中的图像模块时出现属性错误

    python - 正则表达式组引用长度

    在 jenkinsfile 中找不到 mysqldump

    django:从 postgres 数据库导入数据时无法适应错误

    python - Django不会在try except语句中重定向到404

    python - 使用python从段落中提取文本

    docker - 当主机是Windows 7机器时如何在linux容器上查看adb设备