【问题标题】:SublimeText3 Jedi autocomplete plugin does not recognize virtualenv Python pathSublimeText3 Jedi 自动完成插件无法识别 virtualenv Python 路径
【发布时间】:2018-05-18 15:01:18
【问题描述】:

我已经在 Sublime Text 3 v3.1.1 上安装并配置了 Jedi 自动完成 v0.12.0。在 Jedi 用户设置中,我将python_interpreter 设置为指向virtualenvs 中的python 版本。

"python_interpreter": "/home/username/.virtualenvs/cv3/bin/python"

问题是在/dependencies/jedi/api/environment.py 中,方法_assert_safe 无法将virtualenv 路径识别为安全的。

def _assert_safe(executable_path, safe):
    if safe and not _is_safe(executable_path):
        raise InvalidPythonEnvironment(
            "The python binary is potentially unsafe.")

_assert_safe 方法调用def _is_safe(executable_path) 方法,该方法也返回 false。这两种方法中的代码非常简单,我理解发生了什么,我只是没有看到任何解决方案。出于测试目的,我将virtualenv Python 路径添加到PYTHONPATH 环境变量,它没有任何区别。

【问题讨论】:

  • 如果您确定它是安全的,您可能应该只使用 safe=False 并且一切都会正常工作。不知道如何使用 SublimeText3 做到这一点,但这是我的看法。
  • @DaveHalter 我认为硬编码值不是一个好的解决方案。但是,我通过从 virtualenv 下的终端启动 Sublime 解决了这个问题。

标签: autocomplete sublimetext3 sublime-text-plugin


【解决方案1】:

我能找到的唯一解决方案是从virtualenv 下的终端启动Sublime。在终端:

$ workon virtualenv_name
$ subl

现在_is_safe(executable_path) 方法可以找到virtualenv Python 可执行文件并返回True

【讨论】:

    【解决方案2】:

    Jedi 检查口译员是否安全。虽然使用任何你想要的环境是完全合理的,但有时争论它是否安全有点困难。使用 Jedi 时可以只使用 create_environment(path, safe=False),但显然这个 sublime 插件不允许这样做(但也许应该?)。

    IMO 更好的解决方案是创建 venv 而不是 virtualenvs。这些与 Jedi 一起工作得更好,因为它们没有复制整个 Python 二进制文件(无论如何这没有多大意义)。我不能 100% 确定这对您有帮助,但它可能会帮助其他一些人。

    【讨论】:

      猜你喜欢
      • 2014-06-24
      • 1970-01-01
      • 2014-07-09
      • 2019-12-21
      • 2021-07-13
      • 1970-01-01
      • 1970-01-01
      • 2016-09-08
      • 2019-08-29
      相关资源
      最近更新 更多