我在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
环境变量,它没有任何区别。
答案 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二进制文件(这无论如何都没有多大意义)。我不是百分百肯定这会对你有所帮助,但它可能对其他人有所帮助。