Я пытаюсь использовать библиотеку RCurl для доступа к сайту SFTP для загрузки файлов на MacOS под управлением Monterrey v12.4. Как и в других случаях, когда RCurl вызывает библиотеки curl, SFTP не включается.
После Поддержка SFTP для curl на OSX Я установил curl с помощью openssl, используя homebrew. Я удалил библиотеки curl и Rcurl в RStudio.
В окне терминала запуск curl -v показывает, что sftp доступен. В RStudio запуск «system ('what curl')» показывает, что sftp доступен.
Однако, когда я пытаюсь получить файл через SFTP с помощью библиотеки RCurl, я получаю сообщение:
Error in function (type, msg, asError = TRUE) :
Protocol "sftp" not supported or disabled in libcurl
Я подумал, может быть, PATH был установлен неправильно. Я добавил следующую строку в свой файл .Renviron.
PATH=/opt/homebrew/opt/curl/bin:$PATH
На данном этапе мне непонятно, почему sftp не поддерживается при попытке доступа к файлу на SFTP-сайте при использовании библиотеки RCurl.
Что еще я могу сделать, чтобы попытаться диагностировать, почему это происходит?
curl::curl_version() покажет вашу поддержку R libcurl. Сравните это с curl -V. curl:::R_curl_version покажет библиотеку
@RicVillalba. Вывод curl::curl_version отличается от 'curl -V'. Первый показывает curl v7.79.1 и не поддерживает SFTP. Последний показывает curl v7.86.0 с поддержкой SFTP. Я хотел, чтобы изменение PATH в .Renviron устранило эту проблему. Но, видимо, этого не произошло.
@MrFlick, я пытался установить из исходного кода. Он завершается с ошибкой, указывающей, что сценарий установки не может найти sed и expr. Сначала я должен решить эту проблему.
@MrFlick проблема с установкой была исправлена. Библиотеки curl и Rcurl были установлены из исходников. К сожалению, это не решает проблему. R по-прежнему использует старую версию библиотеки curl, которая не поддерживает SFTP.
Я подтвердил свой PATH. Первая запись в $PATH — это /opt/homebrew/opt/curl/bin, где находится исполняемый файл v7.86.0 с поддержкой SFTP. Насколько я понимаю, R должен найти это. Но вывод curl::curl_version() по-прежнему показывает более старую версию.
Теперь я установил последнюю версию R (4.2.2), RStudio (2022.07.2 Build 576), удалил curl и RCurl и переустановил из исходного кода, но проблема остается нерешенной. Результаты curl::curl_version() показывают версию curl 7.82.0. "system('curl -V') показывает версию curl 7.82.0. Запуск "curl -V" в окне терминала показывает версию curl 7.86.0 с SFTP. Моя переменная env PATH в настоящее время включает каталог, в котором находится curl версии 7.86.0. Приветствуются любые рекомендации по следующим шагам.





Я нашел решение. В посте Поддержка SFTP для curl на OSX
есть код для включения поддержки SFTP в curl на MacOS.
Я прогнал три строчки:
PATH <- Sys.getenv("PATH")
version <- '7.86.0'
Sys.setenv(PATH = paste0("/opt/homebrew/Cellar/curl/", version, "/bin:", PATH))
и SFTP включен в RCurl.
запуск «echo $PATH» с терминала показывает «/opt/homebrew/opt/curl/bin» в пути. Я предположил, что это означает, что используется завиток с поддержкой OpenSSL, но это не так. Очевидно, ПУТЬ R отличается от ПУТИ MacOS.
Мой следующий шаг — добавить эту строку в мой файл .Rprofile, чтобы она включалась каждый раз, когда я запускаю R.
Вы установили пакет RCurl из исходного кода? Или вы установили прекомпилированные двоичные файлы. Может быть, если вы попробуете
install.packages("RCurl", type = "source"), это будет использовать ваш системный завиток. Я думаю, что это установлено во время компиляции.