下图是我的emacs配置
可以补全标准库
但无法补全我通过pip install 安装的第三方包 例如 scapy
请问我的配置哪里有问题呢?
你使用了 virtualenv 吗?如果是的,需要在 Emacs 里 activate 这个虚拟环境。可以使用 pyvenv.el 这个包, 先激活虚拟环境,再打开 python 文件。
没有,我没有安装那个? 是必须要安装它吗?
没用虚拟环境的话不需要。那我不太清楚,我很久没用 company-jedi 了。
哦哦哦,好吧,还是谢谢你的回答。
会不会和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但是现在补全完全失效了, 我能看看您的配置吗?
感谢您的思路,我找到原因了, 原因是我用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")
用这个试试
感谢你的回答,我试过了,还是不行。
你在终端和emacs里打开python shell,都能import第三方包吗? 我觉得你可以检查下sys.path里面是不是包含了site-packages
感谢大家,我的问题解决了,感谢大家提供的思路,再次感谢!!!
我去,看起来你是pip装到了python2了。多个python建议使用python3 -m pip install xxxxx
重新回复下此问题。今天无意中调试,发现了最终的解决办法。请大家不要采用我上面的办法,那样治标不治本
真正的解决办法是我划红线圈起来的这句配置
当你使用Python3时,就设置这句配置就OK,这样就可以补全了,前提是你在shell中可以直接敲python3打开python shell 也就是说你的python3 必须在环境变量中。
感谢……我最近配elpy也被此问题困扰……
但是您下回能不能贴代码,而不是放截图……