spacemacs python 不能补全第三方库

spacemacs python可以补全像os这种标准库,但是像numpy这种不能自动补全,有人碰到过类似的问题吗,如何解决呢

能提供一个完整的复现方法吗,我这里可以补全 numpy,用的也是 spacemacs anaconda

image

用的是anaconda2,使用run-python 在ipython模式下可以弹出补全的候选,在编辑器中不行

配置就是根据官网的配置的 spacemacs/layers/+lang/python at develop · syl20bnr/spacemacs · GitHub

而且message中并没有任何报错信息

不太会截图,下面的ipython环境中能正常补全,但是编辑器中没反应。

anaconda-mode buffer 中就一句话 anaconda_mode port 33341

用了 virtual environment 了么? 如果用了可以试一下用 pyvenv.el 设置 pyvenv-workon 的值。

论坛里有不少相关的帖子,看看有没有可以参考的 :site:emacs-china.org python 补全 第三方 库 - Google Search

Python 除了要设置 python-shell-exec-path,还要设置 exec-path,如果用到了 python 版本管理器,请确保它在 Emacs 中有效:

(setq python-shell-exec-path (list (expand-file-name "~/.pyenv/shims/")))
(add-to-list 'exec-path (expand-file-name "~/.pyenv/shims"))
1 个赞

google搜索了一遍,都没有效果。 你说的这两个值如下: exec-path is a variable defined in ‘C source code’. Its value is ("/home/tx/llvm6/bin" “/home/tx/anaconda2/bin” “/usr/local/cuda-8.0/bin” “/home/tx/bin” “/home/tx/.local/bin” “/usr/local/sbin” “/usr/local/bin” “/usr/sbin” “/usr/bin” “/sbin” “/bin” “/usr/games” “/usr/local/games” “/snap/bin” “/usr/lib/x86_64-linux-gnu/emacs/27.0.50/x86_64-linux-gnu”)

python-shell-exec-path is a variable defined in ‘python.el’. Its value is ("/home/tx/anaconda2/bin/") Original value was nil 这样设置没有问题吧

没有用virtual environment

import jedi s = jedi.Script(’’‘import os os.’’’, 2, len(‘os.’)) s.completions() for c in s.completions(): print(c.name, c.full_name) 用这个代码测试jedi没有问题,可以补全os,把os换成第三方的库,也没有问题。应该就是jedi没有问题了吧。

jedi 本身就是第三方库,所以,你能使用 jedi,就能使用其他库,比如在 run-python 的时候。

我怀疑这个 anaconda 并没有找到 jedi,补全内容来自 anaconda 本身(纯属猜测,我并不知道这个 mode 是如何工作的)。

检测 exec-path 是否有效, M-x shell-command 然后分别执行:

which python
which pip
pip show jedi

看输出结果是不是符合预期。

我之前遇到了一样的问题,后来发现原来是没有开启company-anaconda 。。。。。