Spacemacs 怎么开启 Python 自动补全?

我已经按照文档上安装了所有 pip 依赖,曾经手动 run-python 之后能出来了,后来配置了一些前端设置后 run-python 也不行了,现在按 TAB 试图自动补全会导致 Emacs 卡住,需要 Ctrl-g 才能终止。

.spacemacs 配置文件放到 gist 了:.spacemacs.el · GitHub

新人,求帮助!

需要裝jedi,可參考我的配置:

Python development configuration is quite easy. =elpy= is used here:

(elpy-enable) (setq elpy-rpc-backend “jedi”) ;;(setq jedi:complete-on-dot t)

;; prevent redundant intent in using yasnippets (add-hook 'python-mode-hook '(lambda () (setq yas-indent-line nil))) Following python package is required according to elpy mannual:

pip install rope pip install jedi

flake8 for code checks

pip install flake8

importmagic for automatic imports

pip install importmagic

and autopep8 for automatic PEP8 formatting

pip install autopep8

and yapf for code formatting

pip install yapf

install virtualenv for jedi

pip install virtualenv

jedi 是已经安装过了,也升级到最新的试过了。应该是配置的问题,因为手动 run-python 是可以的。

怎么是手动run-python. 我的这个也是,补全时而能能用,时而不能用.

他的帖子已经是两年前的了,anaconda jedi 都更新过多次了,他的问题跟你的问题很可能不同。

嗯嗯,多谢.我是用了pyenv环境的编译器后自动补全完全没有了.以前没有过装pyenv的时候自动补全是可以用的.但是编译运行是用不了的.好奇怪.我把所有的包在pyenv环境下也安装过了.

除了增加了python layer,也没有做其他配置.mac系统.看有的帖子说的brew install python问题,但是帖子也是很久以前的.

spacemacs 最近动作很大,好像有一些环境变量的问题还没有解决。不过我这里补全用着还挺好。我在windows下用的虚拟环境。jedi service-factory 都是在虚拟环境里安装的。

上次brew更新了emacs26的时候,一块更新了spacelpa最新的develop分支,我刚在论坛上找到了别的帖子,发现是一样的.就是系统库比如os. sys这些补全是没有问题的.但是第三方的库,比如numpy,tensorflow这些库现在是补全不了.应该是我环境问题.我在没装pyenv之前,这些库的补全还是可以用的.我没有用Python虚拟环境.装了pyenv之后spacemacs自己默认的python解释器就是~/.pyenv下的.

我觉得这个问题应该不难解决,因为是 emacs 设置的问题。你可以看看 Python mode 下 company-backends 的值,先把 company 的问题排除。然后再检查 anaconda-mode 是否有问题

image

我所有包都是用的最新的,spacemacs 用的 develop 分支,也是最新的

另外,注意 Anaconda-mode 刚开始读取 numpy 模块时会有点延迟,可能有个两三秒,那之后就快了。

好吧,我也观察到相同的现象了, @xuetrdi,我忘了我是用 cmd script 启动 emacs 的,贴出来供你参考:

好吧,你不是在Windows系统上,那我就不清楚怎么回事了

查看python-mode下的backends是怎么查看.我查看了anaconda-mode是没有报错. 然后我更新了一下develop分支,然后直接启动报错:

Error (use-package): python/:init: Symbol’s function definition is void: spacemacs//python-setup-shell

describe-variable 查看 company-backends 变量的值

更新完 spacemacs 还需要更新一下 dotspacemacs 文件,用 SPC f e D 命令 (ediff)更新

是查看这个值么?

嗯,看样子是没有问题,感觉还是 Python 环境没有设置好。

我如果不在虚拟环境内启动 emacs 也是不行

嗯嗯,我也觉得可能是这类问题,就是python自己原生的包补全是没有问题的.自己抓的第三方包不能自动补全.明天我再看看.早些休息.

我run-python以后导入第三方库以后,然后左边就可以用TAB进行补全了.出现了一个 python.el : nativa completion setup loaded.

这是两种不同的补全。自带补全貌似只能先交互式运行,再补全?company 补全则不需要,只要输入就可以自动补全。这两种很容易区分, spacemacs 中的 company 默认为 idle 时间补全,不是 tab 补全。

如果你喜欢前一种的话,为什么不试试 lpy?对交互式运行方式支持很好,也可以更好地对 python process 进行管理。你可以把它理解成 emacs 中的 ipython notebook

spacemacs里面有个ipython-notebook的package,前面用过.但是这个package有个坑爹的问题,就是if语句for语句的缩进问题. 如果已经在for循环之外写东西.保存后,会把写在for循环之外的内容全部拉到for循环里面去了. 那时候主要是为了在ipython-notebook里面用matplotlib显示的功能.因为不喜欢在浏览器里面写代码,不能用vim的编辑功能感觉很费劲.对el不怎么懂,也不会fix bug.所以都很久没有用.都在*.py环境中写代码.

你说的是 ein,那个包我也不推荐。我推荐的是 lpy,ivy 的作者 abo-abo 写的 。相关的讨论可以看看论坛里的帖子,试一下你肯定不会后悔。