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
#2 楼
你不能:python
和:python3
命令始终使用内置的解释器。如果您使用的是Vim的最新版本,其中python
和/或python3
是动态加载的(请参阅:h python-dynamic
),则可以使用pythondll
和pythonthreedll
加载不同的解释器,但是用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'
]
到目前为止似乎工作得很好。
评论
谢谢!在我的〜/ .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