SublimeText3 Jedi自动完成插件无法识别virtualenv Python路径

时间:2018-05-18 15:01:19

标签: autocomplete sublimetext3 sublime-text-plugin

我在Sublime Text 3 v3.1.1上安装并配置了Jedi autocomplete 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环境变量,它没有任何区别。

2 个答案:

答案 0 :(得分:0)

我能找到的唯一解决方案是从async.waterfall([ function download(next) { // Download video s3.getObject({ Bucket: srcBucket, Key: srcKey }, next); }, function resizeBuffer(response, next) { // Resize resizeVideo(response, function (err, response, buffer){ if(err){ console.log(err); return next(err); } next(null, response, buffer); }); }, function uploadBuffer(response, buffer, next) { // Upload to s3 let resizedImageName = "resized/" + imageName; s3.putObject({ Bucket: srcBucket, Key: resizedImageName, Body: buffer, ContentType: response.ContentType }, function(err, data) { if (err) { console.log(err, err.stack); }else{ console.log('image resized----------------------->'); next(null, response, buffer); } }); } ], function (err) { if (err) { console.log('Unable to resize image.'); } else { console.log('Successfully resized image.'); } callback(null, "done--------------->"); }); function resizeVideo(response, callback){ try { let command = ffmpeg(response.Body); console.log('1-------------->'); command.size('50%'); console.log('2-------------->'); callback(null, response, command.pipe()); } catch (e) { console.log('video resize error------------------------->'); console.log(e); callback('Video resize error') } } 下的终端发起Error: Stream yields empty buffer。在终端:

Sublime

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

答案 1 :(得分:0)

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

IMO更好的解决方案是创建venv而不是virtualenvs。这些对Jedi来说效果更好,因为它们并没有复制整个Python二进制文件(这无论如何都没有多大意义)。我不是百分百肯定这会对你有所帮助,但它可能对其他人有所帮助。