【已解决】company不能补全site-packages目录中的包

下图是我的emacs配置

可以补全标准库 image

但无法补全我通过pip install 安装的第三方包 例如 scapy

请问我的配置哪里有问题呢?

这是我安装的插件

你使用了 virtualenv 吗?如果是的,需要在 Emacs 里 activate 这个虚拟环境。可以使用 pyvenv.el 这个包, 先激活虚拟环境,再打开 python 文件。

没有,我没有安装那个? 是必须要安装它吗?

没用虚拟环境的话不需要。那我不太清楚,我很久没用 company-jedi 了。

哦哦哦,好吧,还是谢谢你的回答。

1 个赞

会不会和python版本有关系? 我用的是python3 emcas的插件有要求吗?

抱歉我看错了,你用的是elpy。我自己测试了下没有问题,应该是你的配置错了,你尝试注释掉一些配置,再测试。和版本没关系,我也是用Python3测试的。

打开 python 文件后,C-h v, 检查一下 company-backends 的值,看看是否有 elpy-company-backend。

你还可以执行 elpy-config 命令,看看自己环境,比如我的:

Virtualenv........: None
RPC Python........: 3.6.5 (/usr/bin/python)
Interactive Python: python3 (/usr/bin/python3)
Emacs.............: 26.1
Elpy..............: 1.22.0
Jedi..............: 0.12.0 (0.12.1 available)
Rope..............: Not found (0.10.7 available)
Autopep8..........: Not found (1.3.5 available)
Yapf..............: Not found (0.22.0 available)
Black.............: Not found (18.6b4 available)
Syntax checker....: Not found (flake8)

很奇怪,我之前的jedi是0.12.1 我把它uninstall后,通过 pip install jedi==0.12.0 安装0.12.0版本后 补全就失效了。 不知道什么原因,必须用0.12.1 才好使, 我看了 elpy-company-backend是有的

下面是我elpy-config image

但是现在补全完全失效了, 我能看看您的配置吗?

感谢您的思路,我找到原因了, 原因是我用centos,系统默认有个python2.7 我自己编译安装了一个python3

但是它补全的时候是去读的python2.7的site-packages目录, 并没有去读取我python3的site-packages目录。

我想我应该可以想办法让系统只存在一个python3,应该就ok了。

但还是奇怪它为什么会去读取python2的site-packages, 有没有什么办法让他读取我自定义路径的site-packages?

你pip install的时候用pip3?如果你指定了python-shell-interpreter是python3的话,。BTW,不清楚centos package manager有没有link函数,像mac的话是有brew link python3,这样就能自动把系统的python绑定成3(其实也就是把/usr/local/bin里面的python symbolic link改一下),但我不太推荐,因为我碰到过有些包需要系统的Python为2才能编译。

(setq py-python-command "python3")
(setq python-shell-interpreter "python3")

用这个试试

感谢你的回答,我试过了,还是不行。

这是我link的情况

配置文件里已经指定python3 image image

你在终端和emacs里打开python shell,都能import第三方包吗? 我觉得你可以检查下sys.path里面是不是包含了site-packages

嗯,问题已经解决了, 我用笨办法,把原来python2.7的site-packages目录重命名,然后做了个软连接,连接到我的python3的site-packages目录

已经可以补全了。 image

感谢大家,我的问题解决了,感谢大家提供的思路,再次感谢!!!

我去,看起来你是pip装到了python2了。多个python建议使用python3 -m pip install xxxxx

重新回复下此问题。今天无意中调试,发现了最终的解决办法。请大家不要采用我上面的办法,那样治标不治本

真正的解决办法是我划红线圈起来的这句配置

当你使用Python3时,就设置这句配置就OK,这样就可以补全了,前提是你在shell中可以直接敲python3打开python shell 也就是说你的python3 必须在环境变量中。

感谢……我最近配elpy也被此问题困扰……

但是您下回能不能贴代码,而不是放截图……