运行 具有 conda 环境的 gud-pdb

Running gud-pdb with conda environment

如何从 emacs 运行 pdb 在给定 conda 环境中激活的文件上。

我已经设置 exec-pathPATH 来包含当前的 conda 路径,例如。

exec-path
("~/miniconda3/envs/sci/bin" ...)

(getenv "PATH")
"~/miniconda3/envs/sci/bin:..."

在 emacs 中,

(executable-find "python")
"~/miniconda3/envs/sci/bin/python

returns 正确的 python。 pdb 位于“/usr/bin/pdb”。但是,如果我 运行 pdbsci conda 环境中 运行ning 的文件上,例如。它安装了 numpy 等,pdb 找不到这些库:

test.py

import numpy as np
import pandas as pd

tst = np.linspace(1, 10, num=10)
print(tst)

pdb ./test.py

Current directory is 
~/scratch/python/
> 
~/scratch/python/test.py(1)<module>()
-> import numpy as np
(Pdb) n
ImportError: 'No module named numpy'
> 
~/scratch/python/test.py(1)<module>()
-> import numpy as np
(Pdb) 

gud-pdb-command-name 自定义为 python -m pdb 似乎可行。

所以,pdb python -m pdb ./test.py 在正确的环境中运行。

当使用 virtualenv 或 conda 时,我所做的是在终端中激活 env,然后从该终端启动 emacs。在 Mac:

$ conda activate hcpy
(hcpy)$ /Applications/Emacs.app/Contents/MacOS/Emacs

如果你只想拥有一个终端版本的 emacs 添加参数 -nw

然后在 emacs 中命令 M+x pdb

对我来说很好用。这里的问题是经常有多个 python 安装。所以emacs找到a python exe是不够的,emacs需要找到安装了库的python。

例如,如果我去:

$which python

我得到:

/Users/jamesanderson/anaconda3/bin/python

但是,如果我去:

$source ./.py3dev/bin/activate
$which python
/Users/jamesanderson/code/python/camera/.py3dev/bin/python

所以使用 conda 和你需要的库设置你的虚拟环境。当您在 emacs 中并启动 shell,然后执行 which python 步骤。答案必须是安装了库的 python 实例。