我開始研究將在Docker容器中運行的Django應用程序。我希望能夠在Emacs中使用interactive python,該代碼在Docker容器和Django應用程序的上下文中執行代碼。基本上我想讓Emacs使用的Python解釋器在Docker容器中運行。如何將Emacs的Elpy in-buffer python解釋器連接到docker容器?
我已成功地做到這一點大部分通過創建修改Dockerfile這是因爲只有從我的實際Dockerfile容器不同,而不是調用它結尾的Django的命令:
CMD ./manage.py shell
這意味着,當我運行該Docker容器時,我得到了一個實際在容器中運行的Django解釋器。我加入開始一個python shell時Elpy調用此:
(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())
,看到主目錄爲我多克容器的用戶。
我仍然在使用此設置的問題是,當我嘗試使用相同的elpy-shell-send-region-or-buffer命令同時執行多行python時。當我選中多行和執行命令我得到的蟒蛇殼內以下錯誤:
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'
我一直無法找到任何回答以下問題:
- 爲什麼編解碼器.py試圖讀取一個tmp文件?
- Python創建的所有臨時文件是什麼? (如果你有一些Python代碼運行,看看你的/ tmp目錄你可能會看到很多文件像py271761jE)
- 爲什麼/ tmp目錄空在我的碼頭工人集裝箱?看起來Python似乎想創建和讀取目錄中的文件,但是失敗。
- 我該如何調試?
如果任何人有任何這些問題的答案,這將是一個巨大的幫助。我一直無法提供有關此問題的任何信息。在/ tmp目錄中搜索py *文件只是調出tempfile包。
我不知道發生了什麼,但我目前的理論是,當一個多行區域被髮送到python shell時,它需要處理換行符,以便它嘗試使用編解碼器文件。我認爲這個文件依賴於臨時文件,而docker容器正在搞砸這個文件。我不知道這個理論有多接近,但我不知道如何進一步調查。