2017-09-29 5 views
0

最初にオフ - これは特定のコードの問題ではないことを知っています。今日のこの半分の部分でこの問題に苦しんでいます。私はまた、このスレッドは誰でも私が今日やったことを共有するので、Rで働いているSFTPプロトコルを取得しようとするのに役立つと思う。RCurlを使ったsftpプロトコル - 最後の手順、libcurlへのRパスをusr/libからusr/local/libに変更する方法

私はRCurlがsftpプロトコルをサポートするように更新しようとしています。 Rには、私のプロトコルは(だけでなく、バ​​ージョンおよびホストと)などのようになりません:

> 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 -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 

私はカールを更新しているので、これは素晴らしいことです。しかし、RCurlをロードしてRでcurlVersion()を実行すると、更新されません。私は私の/ usr /ディレクトリのlibフォルダを調べて、次のような問題があります。/usr/libと/ usr/local/libの両方にlibcurlファイルがあります。具体的に:

  • libcurl.3.dylib、libcurl.4.dylib、およびlibcurl.dylibは/ usr/libに
  • libcurl.4.dylib、libcurl.dylib、libcurl.aとlibcurl.la中で/

libには/ usr/local私の/ usr/local/libディレクトリ内のファイルは、私が好きな新しいファイルは、しかし、ここで、使用されている私の主要な頭痛が始まったところです。私は/ usr/local/libから/ usr/libに4つのファイルをコピーし、私は自分のコンピュータを壊しました。私のアプリケーションの多くは読み込みを停止していました。OS Xを再インストールする必要がありました。 OS Xを再インストールすると、ファイルはそれぞれのフォルダに戻されます(上記の箇条書きのように)。

私が推測しなければならないのは、おそらく.aまたは.laファイルを移動していないはずです...わかりません。

最後に一つは - 私は、コンソールでの$の$ PATHを実行したときに、私が取得:

$PATH 
-bash: /Users/Home/.rvm/gems/ruby-2.3.3/bin:/Users/Home/.rvm/gems/[email protected]/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()は私にこれを与える:

.libPaths() 
"/Library/Frameworks/R.framework/Versions/3.4/Resources/library" 

...それはすべて

EDITで場合に役立ちます - 私はすべての問題の根本は、ofcourseの、以降 'SFTP' であるということであることに注意してくださいcurlVersionに記載されていない()、両方のために、私はエラーを受け取り、私はRCurlを実行します::のgetURL()、またはRCurl :: ftpUpload()(イムftpUploadを使用することを期待して)というRで$プロトコルは、:

> RCurl::ftpUpload(what = 'myfile.txt', to = 'sftp://userid:[email protected]/'myfile.txt') 
Error in function (type, msg, asError = TRUE) : 
    Protocol "sftp" not supported or disabled in libcurl 

ありがとう!

答えて

0

RCurlをソースからインストールすると、私のトリックができました!

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

ここで解決策が見つかった - http://www.omegahat.net/RCurl/FAQ.html - 特に以下の行。

「私はRCurl内SCPやSFTPを使用することはできませんが、カールのドキュメントは、それが。なぜRCurlがそれをサポートしていないことを示唆しているようだ?

RCurlがそれをサポートしていますが、おそらく問題があることですあなたがインストールしたlibcurlのバージョンはそれをサポートしていません。あなたのlibcurlとRCurlがcurlVersionコマンドを使ってサポートしているプロトコルを調べることができます。 libsur2の開発ライブラリとlibcurlをインストールする前にインストールされているヘッダ。いくつかのOSでは、ソースからRCurlを再構築する必要があります。

一般的に、これは私の問題の最初から最後までの要約です。 RCurlのバージョンがsftpをサポートしていない場合は、(コマンドラインで)libssh2をインストールしてから、libcurlを再インストールして何らかの理由でソースから再構築する必要があります。

関連する問題