emacs-jedi无法找到numpy补全

9 投票
2 回答
3666 浏览
提问于 2025-04-17 14:49

我安装了emacs-jedi,想在emacs里为Python代码添加一些自动补全的功能。总体来说,我必须说我非常满意!它开箱即用,能很快找到内置库的补全内容。不过,我用Python是为了科学计算,工作中依赖numpy和scipy这两个库。但不知为什么,我在这两个模块上却没有得到任何补全。

举个例子:

import numpy 

testVector = numpy.array([1,2,3])

现在我输入testVector.,然后等着,但什么也没有显示出来。

2 个回答

1

我可以在这种情况下获得补全功能。就像下面这样:

这里插入图片描述

你可以使用旧的需求模块(比如jedi、epc、argparse)。不过你应该更新这些模块,然后再试一次。

6

我在想为什么这个不工作。看起来像是sys.path的问题,但其实不应该需要任何配置就能正常工作。不过这里有一些强制修复的想法。

(1) 运行下面的脚本来获取numpy的加载路径。

import os
import numpy
print(os.path.dirname(os.path.dirname(numpy.__file__)))

(2) 像这样设置jedi:server-args,强制添加路径。

(setq jedi:server-args
      '("--sys-path" "THE/PRINTED/PATH/FOR/NUMPY"
        "--sys-path" "THE/PRINTED/PATH/FOR/SCIPY"))

另请参见:http://tkf.github.com/emacs-jedi/#jedi:server-args


编辑 1

看到你在@syohex的回答下的评论,似乎你搞混了一些安装方法。jedi.el会使用你放置jedi.el的目录下的虚拟环境“env/”,如果这个目录存在的话。el-get会自动创建“env/”,如果你有虚拟环境的话。所以,如果你想使用系统安装,你需要告诉Jedi.el忽略“env/”,可以这样做:

(require 'jedi)
(setq jedi:server-command (list "python" jedi:server-script))

另请参见:http://tkf.github.com/emacs-jedi/#jedi:server-command


编辑 2

根据你的描述,我不知道为什么会这样。这里有几种方法可以帮助你缩小问题范围。

  1. 在安装了jedi.el的目录中运行make tryout(比如~/.emacs.d/el-get/jedi/)。

    这会打开一个干净的(也就是说,它不会读取你的设置)Emacs进程,并为jedi.el提供最小的设置。我们来看看你能否完成numpy和scipy。

  2. 你能在Emacs中导入numpy和scipy吗?Emacs和命令行中的环境变量可能不同。运行M-! python -c 'import numpy' RET。如果没有错误,那就没问题。

  3. 你能使用env/bin/python导入numpy和scipy吗?最好的方法是从Emacs中检查。

    首先,进入安装jedi.el的目录(例如,C-x C-f ~/.emacs.d/el-get/jedi/ RET)。

    然后运行M-! env/bin/python -c 'import numpy' RET。如果没有错误,那就应该可以导入numpy和scipy。

我希望至少有一个方法能给你错误信息,否则我需要考虑其他可能性。

撰写回答