【问题标题】:YouCompleteMe/Python can complete for built-in libs, but not site-packagesYouCompleteMe/Python 可以完成内置库,但不能完成站点包
【发布时间】:2014-08-12 14:03:38
【问题描述】:

我刚刚安装了ycm,一切看起来都不错,但是我发现了一个小问题。问题如下:

import os    # os is built-in library
os.          # ycm helps to complete members of the class.
import numpy # numpy is not built-in library, where its location is site-packages. 
numpy.       # nothing happened. ycm shows 'pattern not found' message.

我认为,这将是一个简单的问题。但我还没有找到解决方案。我认为,有一些配置文件可以在其中为我的项目定义“搜索路径”。

如果我能找到解决方法,将不胜感激。

最好的,

宋哲勋

【问题讨论】:

  • 你解决了吗?我有同样的问题,不仅仅是 numpy

标签: python autocomplete


【解决方案1】:

我在 ycm 中使用 anaconda python 作为我的 python 解释器来解决这个问题。 首先我根据full pythong setting in vim修改了我的vimrc。 然后我把g:ycm_python_interpreter_path改成

let g:ycm_python_interpreter_path = '/usr/local/anaconda3/bin/python3.8'

这样我没有改变系统环境变量。

附加信息 1: 我认为主要的问题是, 我的 YCM 的 Python 解释器是我的系统 python (/usr/local/opt/python@3.9/bin/python3.9), 它只有有限的本地构建的库。 所以使用anaconda自带的库(/usr/local/anaconda3/bin/python3.8)就可以解决。

附加信息 2: 通过阅读:YcmDebugInfo,编辑g:ycm_python_interpreter_path后的主要区别在于:

-- Python completer debug information:
--   Python interpreter: /usr/local/opt/python@3.9/bin/python3.9
--   Python path: ['/usr/local/Cellar/python@3.9/3.9.6/Frameworks/Python.framework/Versions/3.9/lib/python39.zip', '/usr/local/Cellar/python@3.9/3.9.6/Frameworks/Python.framework/Versions/3.9/lib/python3.9', '/usr/local/Cellar/python@3.9/3.9.6/Frameworks/Python.framework/Versions/3.9/lib/python3.9/lib-dynload', '/usr/local/lib/python3.9/site-packages']
--   Python version: 3.9.6

改成

-- Python completer debug information:
--   Python interpreter: /usr/local/anaconda3/bin/python3.8
--   Python path: ['/usr/local/anaconda3/lib/python38.zip', '/usr/local/anaconda3/lib/python3.8', '/usr/local/anaconda3/lib/python3.8/lib-dynload', '/usr/local/anaconda3/lib/python3.8/site-packages', '/usr/local/anaconda3/lib/python3.8/site-packages/aeosa', '/usr/local/anaconda3/lib/python3.8/site-packages/locket-0.2.1-py3.8.egg']
--   Python version: 3.8.8

附加信息 3:关于如何读取本地安装的 pyton 模块列表 使用https://stackoverflow.com/a/740018/11226687 例如就我而言

$ /usr/local/opt/python@3.9/bin/python3.9
>>> help('modules')
# only return limitted modules
$ /usr/local/anaconda3/bin/python3
>>> help('modules')
# list out all the modules included in Anaconda, including numpy/matplotlib/scipy ect

【讨论】:

    【解决方案2】:

    一种简单的修复方法是激活您的 python 环境,然后打开 vim。例如

    (django_mdn) ➜  locallibrary git:(master) ✗ vim
    

    在 vim 中运行 :echo $PATH

    那么你应该可以看到你的 venv 路径是这样的:

    /Users/gwanghyeongim/.virtualenvs/django_mdn/bin:/usr/local/opt/tcl-tk/bin:...
    

    然后看看你的python包是不是自动完成的。

    成功了。

    如果你想将某个站点包设置为永久自动完成,你需要在你的项目根目录中创建一个名为 .ycm_ extra_conf.py 的文件,或者如果你想全局设置它,则需要创建一个名为 global_extra_conf.pyset vim configuration 的文件。

    附言
    在打开 vim 之前在 shell 中运行 export PYTHONPATH=/usr/lib/python3.4/site-packages/ 对我不起作用。此外,除非永久设置 PYTHONPATH 会导致问题,否则每次您希望依赖项自动完成时都必须设置 export PYTHONPATH。

    【讨论】:

      【解决方案3】:

      我对模块“mpmath”有同样的问题,并以下列方式修复它: 首先我检索了模块所在的路径:

      %python3
      >>>import mpmath
      >>>print(mpmath.__file__)
      /usr/lib/python3.4/site-packages/mpmath/__init__.py
      

      在这里我发现我所有“已安装”的 python3 包的路径是:

      /usr/lib/python3.4/site-packages/
      

      然后我简单地将这个路径添加到我的 PYTHONPATH 环境变量中:

      %export PYTHONPATH=/usr/lib/python3.4/site-packages/
      

      然后,当我使用 vim sample.py 输入 import mpmath 并随后输入 mpmath. 时,YCM 向我展示了 mpmath 模块的所有自动完成。

      希望这会有所帮助。

      【讨论】:

      • 我也用 numpy 试过这个,它按预期工作。
      【解决方案4】:

      numpy 是一个困难的库,因为它在导入时动态构建其命名空间,这使得静态代码分析工具很难知道您在编写代码时应该使用哪些名称。因为命名空间 numpy 中可用的名称只有在运行时才真正知道,所以 YCM 可能没有任何有用的建议给你。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-14
        • 2015-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多