我的系统上安装了Anaconda(包括python3.5.2),VIM(7.4)和Jedi-VIM。默认情况下,Linux系统上还安装了python

自动完成功能至少在基本软件包上有效。但是对于numpy之类的软件包(包含在Anaconda中),完成工作不起作用。

通过在VIM中使用以下命令:

:py3 import sys; print(sys.path)

['/usr/lib/python35.zip', 
'/usr/lib/python3.5', 
'/usr/lib/python3.5/plat-x86_64-linux-gnu', 
'/usr/lib/python3.5/lib-dynload', 
'/usr/local/lib/python3.5/dist-packages', 
'/usr/lib/python3/dist-packages', 
'_vim_path_']


这向我表明Anaconda-python从未使用过jedi-vim解释程序和软件包。

$which python
/home/user1/anaconda3/bin/python


如何让jedi-vim也使用anaconda的路径用于获取包自动完成功能的python?

#1 楼

通过使用jedi-vim变量为anaconda提供$PYTHONPATH文件夹中软件包的位置,我可以自己进行修复:

export PYTHONPATH=$PYTHONPATH:/home/user1/anaconda3/lib/python3.5/site-packages


感谢所有人! />
或在〜/ .bash_profile中添加以下行

export PYTHONPATH=$PYTHONPATH:/home/user1/anaconda3/lib/python3.5/site-packages

评论


谢谢!在我的〜/ .zshrc中添加export PYTHONPATH =“ / home / user-name / anaconda3 / lib / python3.5 / site-packages”:$ PYTHONPATH,使jedi-vim可以与anaconda一起正常使用。

– joelostblom
16/09/10在18:22



你不应该那样做。这可能会导致SEGFAULT。这很危险。

–戴夫露背
16 Sep 11'在6:16



@DaveHalter当您说这可能导致SEGFAULT时,您是指答案中提出的内容还是先前评论中提出的内容?另外,您知道为什么会发生SEGFAULT吗?

–杰克·金塞拉(Jack Kinsella)
19年6月28日在12:46

@JackKinsella Python版本需要匹配,否则导入已编译的模块时,您将加载不同的版本。但是,我在下面更新了我的答案。绝地现在有了环境,这一切都可以轻松实现。

–戴夫露背
19年7月9日在8:07

#2 楼

你不能:python:python3命令始终使用内置的解释器。如果您使用的是Vim的最新版本,其中python和/或python3是动态加载的(请参阅:h python-dynamic),则可以使用pythondllpythonthreedll加载不同的解释器,但是用Anaconda代替CPython是IMO要求的段错误(前提是Vim完全接受它,即)。

#3 楼

2018年以上的Jedi版本

例如,如果要切换到最新的Python版本,则可以使用:let jedi#force_py_version=3.8。不幸的是,jedi-vim中还没有列出环境。我们需要构建它(尽管它在Jedi中可用)。


旧答案

基本上,您当前唯一能做的就是用VIM编译VIM。 Python 3.5支持。这可能是一个愚蠢的主意,但是它可行。

否则,将通过https://github.com/davidhalter/jedi/issues/385提供跨Python版本的支持。

请注意,可能可以修改Python PATH,但这可能会导致SEGFAULT和其他不良行为,因为您基本上是在允许Jedi从其他Python版本运行二进制代码(是的,实际上是这样)。

#4 楼

您可以使用anaconda编译vim:
我做了./configure --with-features=huge --enable-pythoninterp --with-python-config-dir=~/anaconda/lib/python2.7/config/,我记得我后来做了类似的测试,而:py import sys; print sys.path给了我正确的结果。

基于网络搜索,您可能会做类似的事情此(例如3.4):

./configure --enable-python3interp --with-features=huge --with-python3-config-dir=~/anaconda/lib/python3.4/config-3.4m-x86_64-linux-gnu

#5 楼

David对于将Vim与不同类型的Python混合在一起有一个正确的观点,如果将PYTHONPATH硬编码为.profile / .bashrc中的Anaconda Python确实导致SEG 11,则可以使用shell别名。

alias vim3='PYTHONPATH=/usr/lib/Anaonda/.../site-packages vim'


也许这种解决方法就足够了。

#6 楼

我使用32位vim来与其他扩展兼容,但是出于其他原因,我的PATH首先使用了64位python。因此,我通过以下方式使用conda安装了32位python:

set CONDA_FORCE_32BIT=1
conda create -n py27_32bit python=2.7
activate py27_32bit
pip install jedi
deactivate


,并将其添加到我的.vimrc中:

if has('win32')&& isdirectory('C:/Users/USER/AppData/Local/Continuum/anaconda2/envs/py27_32bit/')
    let $PATH = 'C:/Users/USER/AppData/Local/Continuum/anaconda2/envs/py27_32bit/;
                \C:/Users/USER/AppData/Local/Continuum/anaconda2/envs/py27_32bit/lib/;' . $PATH
    let $PYTHONPATH = 'C:/Users/USER/AppData/Local/Continuum/anaconda2/envs/py27_32bit/;
                \C:/Users/USER/AppData/Local/Continuum/anaconda2/envs/py27_32bit/DLLs/;
                \:/Users/USER/AppData/Local/Continuum/anaconda2/envs/py27_32bit/lib/;' 
endif 


其中C:/Users/USER/AppData/Local/Continuum/anaconda2是调用conda info --base的结果

#7 楼

以下方法未在Anaconda上进行测试,但在使用virtualenvwrapper时为我解决了问题。

vim-virtualenv插件更改了可执行文件并修改了sys.path$PATH环境。 />我已经用python3.5编译了vim,所以当没有激活​​virtualenv时,我得到:

:py3 import sys; print(sys.executable)

/usr/bin/python3

:py3 import sys; print(sys.path)

[
    '/usr/lib/python35.zip',
    '/usr/lib/python3.5',
    '/usr/lib/python3.5/plat-x86_64-linux-gnu',
    '/usr/lib/python3.5/lib-dynload',
    '/home/<user>/.local/lib/python3.5/site-packages',
    '/usr/local/lib/python3.5/dist-packages',
    '/usr/lib/python3/dist-packages',
    '_vim_path_',
    '/home/<user>/.vim/bundle/vim-virtualenv/autoload'
    ]


激活virtualenv venv(python3.6)后,然后打开vim,我得到:

:py3 import sys; print(sys.executable)

/home/<user>/.virtualenv/venv/bin/python3

:py3 import sys; print(sys.path)

[
    '/home/<user>/.virtualenvs/venv/lib/python3.6/site-packages',
    '/usr/lib/python35.zip',
    '/usr/lib/python3.5',
    '/usr/lib/python3.5/plat-x86_64-linux-gnu',
    '/usr/lib/python3.5/lib-dynload',
    '_vim_path_',
    '/home/<user>/.vim/bundle/vim-virtualenv/autoload'
    ]


到目前为止似乎工作得很好。