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

标签 python linux python-2.7 ubuntu vim

我关注了these instructions ,为了在 Vim 中安装 YouCompleteMe,但是当我发出:

./install.py --clang-completer

出现以下错误消息:

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

现在我卡住了,我该怎么办?

最佳答案

我检查了 YouCompleteMe 的构建系统,它使用自定义构建脚本,该脚本使用 Python 模块 distutils 来查找 Python 库和包含目录的路径。您的 Python /usr/local/ 安装可能包含在正式 /usr 安装之前的 PATH 变量中,因此只需运行 python 可能会运行您的自定义安装,使 distutils 返回其目录。

要检查这是否属实,请尝试运行 which python。我假设它会返回类似 /usr/local/bin/python 的内容。

此时,我看到了几个选项(按优先顺序排列)。

  1. 尝试通过明确指定哪个 Python 可执行文件来运行 YCM 的安装脚本:/usr/bin/python ./install.py --clang-completer

    如果你在 YCM 中使用任何额外的完成器,你应该在上面的行中添加适当的标志(例如 --js-completer 用于 JavaScript 完成)。

  2. 编辑 YouCompleteMe 插件目录中的脚本 third_party/ycmd/build.py 以硬编码自定义 Python 安装的路径。例如,您可以将现有的 FindPythonLibraries 函数替换为以下内容:

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

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

  3. 将您自定义安装的 Python 替换为作为共享库构建的 Python。这方面的细节将取决于您首先如何安装现有的 Python 安装。您可以使用 dpkg -S/usr/local/lib/python2.7/config/libpython2.7.a 检查是否通过包安装它。此命令将告诉您哪个包安装了该文件,除非您手动安装它(绕过包管理器)。
  4. 删除自定义 /usr/local Python 安装,同时确保安装了来自官方存储库的 Python(包 python2.7libpython2.7).

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

关于python - 在 vim 中安装 YouCompleteMe 时遇到 python 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40108521/

相关文章:

Python 的格式不适用于包含 JSON 的文本

python - 回溯(最近一次调用): File "<stdin>", 第 1 行,在 <module> 中 TypeError: object() 不带任何参数

python - 用圆圈覆盖不规则区域

python - 游戏。 Windows 10。使用 ProcessPoolExecutor 在 loop.run_in_executor 之后创建额外的窗口

Python - 如何删除特定单词/字符后的其余字符串

python - 如何在不阻止python执行的情况下在python中启动可执行文件

python - 如何在 Linux 上并行化 Python 程序

c - fork() 和父/子进程 ID

c++ - SDL_Texture - 不完整类型

python - Python 2.7.8 的默认编码是什么?