在Emacs中将Python项目设置为root?

emacs-for-python(基于python.el)提供了良好的功能来启动Python进程并直接从Emacs发送缓冲区(通常使用C-c C-c进行).但是,这种方式会为每个缓冲区创建一个新进程,并且将Python的工作目录设置为相应文件的目录.

相反,我想将单个Python进程的工作目录设置为项目的根目录.甚至可能有几个进程,但是它们始于根目录,而不是模块目录.

我为什么需要它?一切都与进口有关.想象以下项目结构:

myproject
   package1
      __init__.py
      mod1.py
   package2
      __init__.py
      mod2.py

如果我在文件mod1.py上启动Python进程,Emacs会自动将工作目录设置为myproject / package1,这样我就只能从同一包中导入模块.没有从其他软件包导入.没有绝对进口.疼痛.

目前,我对sys.path使用了一个技巧,例如:

import sys, os
sys.path.insert(0, os.path.join(os.path.abspath(__file__), '..', '..'))

在每个模块的开头.但这确实非常丑陋且不便.

那么,有人在Emacs中为劣等流程设置Python项目根目录有任何技巧或窍门吗?

解决方法:

好的,这应该可以帮助您入门

(defvar my-python-shell-dir-setup-code 
  "import os
home = os.path.expanduser('~')
while os.path.isfile('__init__.py') and (os.getcwd() != home):
    os.chdir('..')
del os")

(defun my-python-shell-dir-setup ()
  (let ((process (get-buffer-process (current-buffer))))
    (python-shell-send-string my-python-shell-dir-setup-code process)
    (message "Setup project path")))

(add-hook 'inferior-python-mode-hook 'my-python-shell-dir-setup)

这是我们正在做的事my-python-shell-dir-setup-code是简单的python代码,用于找到project-dir并进行设置(它又快又脏,您可能需要根据需要对其进行修改).然后我们添加一个下级python模式钩子(即my-shell-dir-setup),以便在每次创建外壳时在下级外壳中执行python代码.

上一篇:题使用elisp,如何在emacs终端仿真器中启动,发送键到和停止命令?


下一篇:做题日记