社区首页 >问答首页 >使用RCurl的sftp协议--最后一步,如何将R路径从usr/lib更改为usr/lib到usr/local/lib

使用RCurl的sftp协议--最后一步,如何将R路径从usr/lib更改为usr/lib到usr/local/lib
EN

Stack Overflow用户
提问于 2017-09-28 21:45:11
回答 3查看 3.2K关注 0票数 3

首先--我知道这不是一个具体的代码问题,所以可以投票结束这个问题,但是我今天花了大半个时间来解决这个问题,可能需要一些帮助。我还认为这个线程可以帮助任何试图让sftp协议在R中工作的人,因为我将分享我今天所做的事情。

我一直试图更新RCurl,因此它支持sftp协议。在R中,我的协议看起来是这样的(版本和主机也是如此):

代码语言:javascript
代码运行次数:0
复制
> library(RCurl)
> curlVersion()$protocols
 [1] "dict"   "file"   "ftp"    "ftps"   "gopher" "http"   "https"  "imap"   "imaps"  "ldap"   "ldaps"  "pop3"   "pop3s"  "rtsp"   "smb"    "smbs"  
[17] "smtp"   "smtps"  "telnet" "tftp" 

> curlVersion()$version
[1] "7.43.0"

> curlVersion()$host
[1] "x86_64-apple-darwin15.0"

不是很好-没有sftp的选择.

我遵循这个线程-- http://andrewberls.com/blog/post/adding-sftp-support-to-curl --在我的机器上更新curl,并在一定程度上成功地做到了这一点。成功部分反映在我在命令行中运行以下部分时:

代码语言:javascript
代码运行次数:0
复制
curl -V 
curl 7.55.1 (x86_64-apple-darwin15.6.0) libcurl/7.55.1 zlib/1.2.5 
libssh2/1.8.0
Release-Date: 2017-08-14
Protocols: dict file ftp gopher http imap ldap ldaps pop3 rtsp scp sftp smtp telnet tftp 
Features: AsynchDNS IPv6 Largefile libz UnixSockets 

太棒了,因为我的卷发更新了。但是,当我在R中加载RCurl并运行curlVersion()时,它不会被更新。我检查了我的/usr/目录的lib文件夹,并遇到了以下问题。在我的/usr/lib和/usr/local/lib中都存在libcurl文件。具体地说:

  • libcurl.3.dylib、libcurl.4.dylib和/usr/lib中的libcurl.dylib
  • libcurl.4.dylib、libcurl.dylib、libcurl.a和libcurl.la在/usr/local/lib中

我的/usr/local/lib目录中的文件是我想要使用的新文件,但是这里是我最头疼的地方。我将/usr/local/lib中的四个文件复制到/usr/lib中,并破坏了我的计算机。我的许多应用程序停止加载,我不得不重新安装我的OS,因为我害怕破坏任何其他东西。当我重新安装我的OS时,它会将我的文件放回它们各自的文件夹中(它们在上面的子弹中的样子)。

如果我不得不猜的话,我可能不该移动.a或.la文件.我没有把握。

最后一件事--当我在控制台中运行$ $PATH时,我得到:

代码语言:javascript
代码运行次数:0
复制
$PATH
-bash: /Users/Home/.rvm/gems/ruby-2.3.3/bin:/Users/Home/.rvm/gems/ruby-2.3.3@global/bin:/Users/Home/.rvm/rubies/ruby-2.3.3/bin:/Users/Home/anaconda2/bin:/usr/local/git/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Library/TeX/texbin:/Users/Home/.rvm/bin: No such file or directory

/usr/local/bin在/usr/bin之前。但是,我看不到/usr/local/lib或/usr/lib的任何内容--我可以将这些(/usr/local/lib)添加到我的路径中来修复吗?R中的.libPaths()给出了如下内容:

代码语言:javascript
代码运行次数:0
复制
.libPaths()
"/Library/Frameworks/R.framework/Versions/3.4/Resources/library"

...if --它对我们有帮助

编辑--我应该注意到,所有问题的根源当然是因为在R中的curlVersion()$protocols中没有列出'sftp‘,所以当我运行RCurl::getURL()或RCurl::ftpUpload(我希望使用ftpUpload)时,我会收到以下两个错误:

代码语言:javascript
代码运行次数:0
复制
> RCurl::ftpUpload(what = 'myfile.txt', to = 'sftp://userid:userpw@ip/'myfile.txt')
Error in function (type, msg, asError = TRUE)  : 
  Protocol "sftp" not supported or disabled in libcurl

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-09-29 08:57:12

从源头上安装RCurl对我来说是个窍门!

代码语言:javascript
代码运行次数:0
复制
install.packages("RCurl", type="source")

我在这里找到了解决方案-- http://www.omegahat.net/RCurl/FAQ.html --特别是以下几行。

“我不能在RCurl中使用scp或sftp,但是curl的文档似乎表明它可以,那么为什么RCurl不支持它呢?”

RCurl确实支持它,但可能的问题是您安装的libcurl版本不支持它。您可以通过命令RCurl检查您的libcurl以及因此支持的curlVersion协议。如果scp和sftp不存在,请重新安装libcurl,但使用libssh2提供支持。在安装libcurl之前,您需要安装libssh2开发库和头。在某些OSes上,您需要从源重新构建RCurl。“

总的来说,这是对我的问题从头到尾的一个伟大的总结。如果您的RCurl版本不支持sftp,您需要首先安装(在命令行) libssh2,然后重新安装libcurl,然后出于某种原因从源代码重新构建。

票数 1
EN

Stack Overflow用户

发布于 2019-01-06 16:04:48

呼!最后,在一个带有rstudio的Ubuntu14.04对接容器中实现了这个功能。我把每一个问题都搞定了!但我不得不花更多的时间来计算找到所有这些东西,所以试图把所有这些都放在一个地方,让任何有这个问题的人--这就是我所做的.

在linux终端中:

apt-get install libcurl4-openssl-dev

wget libssh2 and then compile with ordinary

./configure

make

make install

wget curl and then compile

./configure --with-sshlib2=/usr/local

make

make install

如果您需要卷曲在终端使用sftp,它可能仍然没有在这一点。验证它是否使用了您刚刚安装的新libcurl.so.4。您刚刚安装的curl将安装到/usr/local/bin中,因此使用ldd验证它没有使用旧库。我使用的是一个旧的libcurl,所以我将旧libcurl链接到/usr/local/lib中的新libcurl,然后重新编译curl。

如果希望RCurl工作,请将所有新的库从/usr/local/lib (libcurl & libssh2)复制到/lib,然后移到R控制台。

在R控制台中:

install.packages("RCurl", type = "source")

验证sftp协议已启用

libcurlVersion() RCurl::curlVersion()

这些应该分别显示为libcurl和RCurl启用的协议。把你们的手指交出来!

以防万一,我也做了这些事情,可能没做什么,但我做的时候,我是在撞墙,只是保持在原地。

升级的R和R工作室-服务器

在重新安装RCurl之前删除curl和RCurl的R版本。另外,在较新的rstudio中,不确定是否需要type=“源代码”。

同样,正如Canovice所指出的,在libcurl和libssh库中移动要小心。我打破了几次网络,幸运的是,因为它是一个码头容器,我刚刚重新启动。我发现一次移动一切都是最有效的,

cp /usr/local/lib/libssh* /lib && cp /usr/local/lib/libcurl* /lib

还应该注意,我是一个R新手,所以可能有更干净的方法来实现这一点,而不是到处移动库。我尝试在rstudio中使用.libaths(),但最终放弃了。

票数 5
EN

Stack Overflow用户

发布于 2020-03-03 12:37:27

在实践中,我发现尝试更新现有的curlopenssl安装比安装全新版本和更新将使用它们的PATH envar更危险

在我的例子中,我的新curlopenssl支持sftp,安装在

代码语言:javascript
代码运行次数:0
复制
/usr/local/opt/curl-openssl/bin
/usr/local/opt/openssl/lib/

因此,我需要设置以下环境

代码语言:javascript
代码运行次数:0
复制
PATH="/usr/local/opt/curl-openssl/bin:${PATH}"
LIBRARY_PATH="/usr/local/opt/openssl/lib/:${LIBRARY_PATH}"

在执行之前

代码语言:javascript
代码运行次数:0
复制
install.packages("RCurl", type="source")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46482465

复制
相关文章
[iOS开发]JSONModel源码学习
首先,在这个模型类的对象被初始化的时候,遍历自身到所有的父类(直到JSONModel为止),获取所有的属性,并将其保存在一个字典里。获取传入字典的所有key,将这些key与保存的所有属性进行匹配。如果匹配成功,则进行kvc赋值。
Billy Miracle
2022/05/08
1.4K0
JSONModel源码解析 原
    做移动端开发,解析网络数据是必不可少的工作之一。iOS原生框架很早前就已经提供了将JSON数据直接映射成数组或者字典对象的方法,并且结合KVC,也可以将字典数据直接赋值给对象。但是这种方式十分不灵活,例如如果网络数据中的字段与我们数据模型中的字段不一致,某些网络数据的字段可能为nil等等都需要开发者单独的处理。使用JSOMModel可以十分方便的处理映射过程中的各种情况。
珲少
2018/08/15
1.3K0
JSONModel源码解析
                                                                            原
struct模块(用于对象的压缩)
6.27自我总结 struct模块 1.struct模块中的函数 函数 return explain pack(fmt,v1,v2…) string 按照给定的格式(fmt),把数据转换成字符串(字节流),并将该字符串返回. pack_into(fmt,buffer,offset,v1,v2…) None 按照给定的格式(fmt),将数据转换成字符串(字节流),并将字节流写入以offset开始的buffer中.(buffer为可写的缓冲区,可用array模块) unpack(fmt,v1,v2…..) tu
小小咸鱼YwY
2019/07/24
7520
DiffusionDet:用于对象检测的扩散模型
Shoufa Chen1, Peize Sun1, Yibing Song2, Ping Luo1 1The University of Hong Kong 2Tencent AI Lab {sfchen, pzsun, pluo}@cs.hku.hk yibingsong.cv@gmail.com
3D视觉工坊
2023/04/29
1.1K0
DiffusionDet:用于对象检测的扩散模型
python中更新字典对象
最近用python做了一个小工具,涉及到如下的字典操作,特做笔记如下: 1. 用update方法更新字典: 用字典的update方法,这时候传递给update的必须是一个字典.
qsjs
2020/06/09
1.4K0
Python使用对象方式获取字典的值
2020-07-23 发表在 编程语言 35 字典获取值方式: aa=dict() aa.get('aa') 如果想改成对象获取方式,可以用下列代码: # 定义一个类 class DictToObject(object): def __init__(self, d): self.__dict__.update(d) if __name__ == '__main__': d = {'id': 79, 'xc': 'B01AWLPUAG', 'crea
小贝壳
2020/07/26
4.2K0
JavaScript 学习-14.Map 字典对象
前言 JavaScript 中的对象(Object),实际上就是键值对的集合,但是有一个局限性,键(属性)只能是字符串,不能是数字等其他类型。 字典是一种很常见的数据类型,键值对的结构,键应该可以是数字,也可以是字符串。为了解决这个问题,ES6 提供了Map数据结构。 它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。 Map 字典对象 Map 构造一个字典对象 let m = new Map(); console.log(m); // Map(0) 初
上海-悠悠
2022/05/20
7040
JavaScript 学习-14.Map 字典对象
python源码阅读笔记之字典对象
四、字典对象 首先说下list对象等要点: 1.list获取,插入对象是很快的。删除对象根据args,线性查找。排序是快排。对privt的选取很有讲究。 字典是python里的关联对象,实现是hash table。在python的实现里,dictionary的效率极其高。如注释所言。 /* Major subtleties ahead: Most hash schemes depend on having a "good" hash function, in the sense of simulatin
哒呵呵
2018/08/06
6580
VBA调用外部对象01:字典Dictionary
当你发现不停的用For循环来处理数据速度慢的受不了了,你肯定会想怎么才能提高一些效率。比如前面我们说到的对比2个表数据,我们是使用For循环去逐个的对比判断,如果能有1个东西让我们可以快速的在一组数据里找到需要的、或者是找不到的时候返回false的话,那我们就不需要用For循环了,那有没有这种东西呢?
xyj
2020/07/28
3.3K0
VBA调用外部对象01:字典Dictionary
Spring用于创建对象的注解@Autowired @Qualifier @Resource
先通过数据类型IAccountDao圈定出来匹配的几个对象 再通过变量名称作为bean的id accountDao查找和他一样的 都不一样就报错
韦恩少爷的背
2020/03/09
1.2K0
[NewLife.XCode]对象字典缓存(百万军中取敌首级)
NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netcore,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode。
大石头
2019/05/24
1.2K0
Python面向对象6:​isinstance、super、有序字典
1、isinstance(对象名,类),查看对象是不是类的实例。 案例1:isinstance(对象名,类) classFoo: print('hh') obj=Foo() ret=isinstance(obj,Foo) print('查看obj是不是类Foo的实例:',ret) 执行结果: 2、查看子类是否为父类的子类,issubclass(类1,类2),看类1是不是类2的子类 案例2:issubclass(类1,类2) classBar: pass classFoo(Bar): pass ret=iss
企鹅号小编
2018/01/29
6380
面向对象(三十一)-数组与字典详解
修改数组中某个元素的值 在这里第一个值,是你要设置的值,后面的几个值,是表示这个值在数组中的坐标
孙寅
2020/06/02
6400
Python笔记(七):字典、类、属性、对象实例、继承
(一)  简单说明    字典是Python的内置数据结构,将数据与键关联(例如:姓名:张三,姓名是键,张三就是数据)。例如:下面这个就是一个字典 {'姓名': '张三', '出生日期': '2899-08-12', '成绩': ['3.21', '3.10', '3.01']} 创建字典、添加数据、访问字典数据的方式如下: d = {}  #直接用{}创建字典 f = dict() #通过工厂函数dict()创建字典 #通过下面的方式添加数据 d['姓名'] = '张三' d['出生日期'] =
free赖权华
2018/04/27
1.2K0
Python笔记(七):字典、类、属性、对象实例、继承
多人聊天室
最近学完网络线程协议 ,因此写了一个用java编写的聊天室 话不多说 效果如图 首先 创建服务器端 package com.yc.server; import java.io.IOEx
汤高
2018/01/11
3K1
多人聊天室
Runtime应用(一):Json转Model
与后台交互,后台返回的数据一般是Json类型的,然而我们的定义的模型一般是继承自NSObject,Json与Model之间的转换,第三方工具也有很多,比如YYModel,JSONModel,MJExtention.
Helloted
2022/06/07
4720
Excel VBA解读(159): 数据结构—字典对象的基本操作
Add方法有两个参数。参数Key指定字典元素项的键值,参数Item指定字典元素项的值。如下面的代码:
fanjy
2019/08/27
2.2K0
Excel VBA解读(159): 数据结构—字典对象的基本操作
点击加载更多

相似问题

散列密钥扩展

10

可扩展散列函数

10

为什么使用私钥加密数字签名中的散列

10

数字签名应用中使用中间散列优于全散列的优点

20

AES密钥扩展与散列

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文