在vim中安装YouCompleteMe时遇到python问题

anm*_*wal 6 python linux vim ubuntu python-2.7

我按照这些说明操作,以便在Vim中安装YouCompleteMe,但是当我发出时:

./install.py --clang-completer
Run Code Online (Sandbox Code Playgroud)

出现以下错误消息:

Searching Python 2.7 libraries...
ERROR: found static Python library (/usr/local/lib/python2.7/config/libpython2.7.a) but a dynamic one is required. You must use a Python compiled with the --enable-shared flag. If using pyenv, you need to run the command:
  export PYTHON_CONFIGURE_OPTS="--enable-shared"
before installing a Python version.
Traceback (most recent call last):
  File "./install.py", line 44, in <module>
    Main()
  File "./install.py", line 33, in Main
    subprocess.check_call( [ python_binary, build_file ] + sys.argv[1:] )
  File "/usr/local/lib/python2.7/subprocess.py", line 540, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['/usr/local/bin/python', u'/home/anmol/.vim/bundle/YouCompleteMe/third_party/ycmd/build.py', '--clang-completer']' returned non-zero exit status 1
Run Code Online (Sandbox Code Playgroud)

现在我被困住了,我该怎么办?

dka*_*sak 15

我检查了YouCompleteMe的构建系统,它使用了一个自定义构建脚本,该脚本使用Python模块distutils查找Python库和包含目录的路径.你/usr/local/的Python安装可能包含在您的PATH变量官方之前/usr安装,这样只是运行python可能运行在您的自定义安装,使distutils返回其目录.

要检查是否为真,请尝试运行which python.我认为它将返回类似的东西/usr/local/bin/python.

在这一点上,我看到了几个选项.

  1. 尝试通过指定哪个Python可执行文件应该显式运行它来运行YCM的安装脚本: /usr/bin/python ./install.py --clang-completer
  2. 编辑--js-completerYouCompleteMe的插件目录中的脚本,以硬编码自定义Python安装的路径.例如,您可以third_party/ycmd/build.py使用以下内容替换现有函数:

    def FindPythonLibraries():
        return ('/usr/lib/python2.7/config-x86_64-linux-gnu/libpython2.7.so',
                '/usr/include/python2.7')
    
    Run Code Online (Sandbox Code Playgroud)

    请注意,这将使更新YouCompleteMe变得更加困难,因为您必须确保在更新其源时不会覆盖它.

  3. 使用作为共享库构建的Python更新Python的自定义安装.详细信息将取决于您首先安装此Python版本的方式.您可以使用检查是否通过包安装它FindPythonLibraries.此命令将告诉您安装该文件的软件包,除非您手动安装它(绕过软件包管理器).
  4. 删除自定义dpkg -S /usr/local/lib/python2.7/config/libpython2.7.aPython安装,同时确保安装了官方存储库中的Python(包/usr/localpython2.7).

从长远来看,使用官方Python软件包可能会更好.

  • 第一个选项也对我有用;我使用了系统范围的 python 而不是 pyenv 安装。`/usr/bin/python ./install.py --js-completer --clang-completer` 谢谢! (2认同)