У меня проблемы с установкой пакета sf
через renv
. Я установил R из исходников на свой Mac, и все в порядке. Мне удалось установить rgdal
и sf
через install.packages
, но не могу сделать это с помощью renv
. Проблема в том, что скрипт установки не может найти заголовок proj_api.h
, даже если я указал полный путь.
С участием
install.packages("sf")
все работает без лишнего вмешательства. В renv
:
> renv::activate()
> renv::install("sf")
....
checking proj_api.h usability... no
checking proj_api.h presence... no
checking for proj_api.h... no
configure: error: proj_api.h not found in standard or given locations.
ERROR: configuration failed for package ‘sf’
....
Заголовок proj_api.h
находится под /usr/local/include/
, поэтому следуя документации, которую я пробовал:
options(configure.args = c(sf = "--with-proj-include=/usr/local/include/"))
перед установкой, но с тем же результатом. Я понятия не имею, что попробовать дальше. Я не понимаю, почему с renv
пути не встречаются, а почему без них (расположение довольно стандартное). Не могу понять также, как это возможно, что заголовок не найден, даже если я передам полный путь.
Переменные окружения без renv
:
__CF_USER_TEXT_ENCODING
0xAF76729:0x0:0x0
_CE_CONDA
_CE_M
CLICOLOR 1
COLUMNS 117
CONDA_EXE /Users/52488/miniconda3/bin/conda
CONDA_PYTHON_EXE /Users/52488/miniconda3/bin/python
CONDA_SHLVL 0
DISPLAY /private/tmp/com.apple.launchd.heGiCHqO77/org.xquartz:0
DYLD_FALLBACK_LIBRARY_PATH
/Users/52488/Rinstallation/R-4.0.4/lib:/Library/Java/JavaVirtualMachines/jdk-15.0.2.jdk/Contents/Home/lib/server
EDITOR vi
HOME /Users/52488
LC_ALL en_US.UTF-8
LC_CTYPE UTF-8
LINES 30
LN_S ln -s
LOGNAME 52488
LSCOLORS gxBxhxDxfxhxhxhxhxcxcx
MAKE make
PAGER /usr/bin/less
PATH /Users/52488/miniconda3/condabin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/VMware
Fusion.app/Contents/Public:/opt/X11/bin
PWD /Users/52488
R_ARCH
R_BROWSER /usr/bin/open
R_BZIPCMD /usr/bin/bzip2
R_DOC_DIR /Users/52488/Rinstallation/R-4.0.4/doc
R_GZIPCMD /usr/bin/gzip
R_HOME /Users/52488/Rinstallation/R-4.0.4
R_INCLUDE_DIR /Users/52488/Rinstallation/R-4.0.4/include
R_LIBS_SITE
R_LIBS_USER ~/Library/R/4.0/library
R_PAPERSIZE a4
R_PDFVIEWER /usr/local/bin/evince
R_PLATFORM x86_64-apple-darwin17.0
R_PRINTCMD lpr
R_RD4PDF times,inconsolata,hyper
R_SESSION_TMPDIR /var/folders/jb/vpf_9ht52zj_0qk_3r1f0dlw5gfss9/T//Rtmp40nNZi
R_SHARE_DIR /Users/52488/Rinstallation/R-4.0.4/share
R_STRIP_SHARED_LIB strip -x
R_STRIP_STATIC_LIB strip -S
R_SYSTEM_ABI macos,gcc,gxx,gfortran,gfortran
R_TEXI2DVICMD /usr/local/bin/texi2dvi
R_UNZIPCMD /usr/bin/unzip
R_ZIPCMD /usr/bin/zip
SED /usr/bin/sed
SHELL /usr/local/bin/bash
SHLVL 1
SSH_AUTH_SOCK /private/tmp/com.apple.launchd.1OK1KoT1o5/Listeners
TAR /usr/bin/tar
TERM xterm-256color
TERM_PROGRAM Apple_Terminal
TERM_PROGRAM_VERSION 433
TERM_SESSION_ID 2BA70166-937D-47AB-B6B6-23316D978294
TMPDIR /var/folders/jb/vpf_9ht52zj_0qk_3r1f0dlw5gfss9/T/
USER 52488
XPC_FLAGS 0x0
XPC_SERVICE_NAME 0
С renv
:
__CF_USER_TEXT_ENCODING
0xAF76729:0x0:0x0
_CE_CONDA
_CE_M
CLICOLOR 1
COLUMNS 117
CONDA_EXE /Users/52488/miniconda3/bin/conda
CONDA_PYTHON_EXE /Users/52488/miniconda3/bin/python
CONDA_SHLVL 0
DISPLAY /private/tmp/com.apple.launchd.heGiCHqO77/org.xquartz:0
DYLD_FALLBACK_LIBRARY_PATH
/Library/Frameworks/GDAL.framework/unix/lib:/Users/52488/Rinstallation/R-4.0.4/lib:/Library/Java/JavaVirtualMachines/jdk-15.0.2.jdk/Contents/Home/lib/server
EDITOR vi
HOME /Users/52488
LC_ALL en_US.UTF-8
LC_CTYPE UTF-8
LINES 30
LN_S ln -s
LOGNAME 52488
LSCOLORS gxBxhxDxfxhxhxhxhxcxcx
MAKE make
PAGER /usr/bin/less
PATH /Users/52488/miniconda3/condabin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/VMware
Fusion.app/Contents/Public:/opt/X11/bin
PWD /Users/52488/Documents/staffing
R_ARCH
R_BROWSER /usr/bin/open
R_BZIPCMD /usr/bin/bzip2
R_DOC_DIR /Users/52488/Rinstallation/R-4.0.4/doc
R_GZIPCMD /usr/bin/gzip
R_HOME /Users/52488/Rinstallation/R-4.0.4
R_INCLUDE_DIR /Users/52488/Rinstallation/R-4.0.4/include
R_LIBS_SITE
R_LIBS_USER /Users/52488/Documents/staffing/renv/library/R-4.0/x86_64-apple-darwin17.0:/private/var/folders/jb/vpf_9ht52zj_0qk_3r1f0dlw5gfss9/T/Rtmpm4f15L/renv-system-library
R_PAPERSIZE a4
R_PDFVIEWER /usr/local/bin/evince
R_PLATFORM x86_64-apple-darwin17.0
R_PRINTCMD lpr
R_RD4PDF times,inconsolata,hyper
R_SESSION_TMPDIR /var/folders/jb/vpf_9ht52zj_0qk_3r1f0dlw5gfss9/T//Rtmpm4f15L
R_SHARE_DIR /Users/52488/Rinstallation/R-4.0.4/share
R_STRIP_SHARED_LIB strip -x
R_STRIP_STATIC_LIB strip -S
R_SYSTEM_ABI macos,gcc,gxx,gfortran,gfortran
R_TEXI2DVICMD /usr/local/bin/texi2dvi
R_UNZIPCMD /usr/bin/unzip
R_ZIPCMD /usr/bin/zip
RENV_DEFAULT_R_ENVIRON
<NA>
RENV_DEFAULT_R_ENVIRON_USER
<NA>
RENV_DEFAULT_R_LIBS <NA>
RENV_DEFAULT_R_LIBS_SITE
RENV_DEFAULT_R_LIBS_USER
~/Library/R/4.0/library
RENV_DEFAULT_R_PROFILE
<NA>
RENV_DEFAULT_R_PROFILE_USER
<NA>
RENV_PROJECT /Users/52488/Documents/staffing
RETICULATE_MINICONDA_PYTHON_ENVPATH
/Users/52488/Documents/staffing/renv/python/r-reticulate
SDKROOT /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
SED /usr/bin/sed
SHELL /usr/local/bin/bash
SHLVL 1
SSH_AUTH_SOCK /private/tmp/com.apple.launchd.1OK1KoT1o5/Listeners
TAR /usr/bin/tar
TERM xterm-256color
TERM_PROGRAM Apple_Terminal
TERM_PROGRAM_VERSION 433
TERM_SESSION_ID 34A286FD-8106-4F78-88F9-8913E45EDCDE
TMPDIR /var/folders/jb/vpf_9ht52zj_0qk_3r1f0dlw5gfss9/T/
USER 52488
XPC_FLAGS 0x0
XPC_SERVICE_NAME 0
Различаются три переменные, но я думаю, это вполне нормально:
[1] "PWD" "R_LIBS_USER" "R_SESSION_TMPDIR"
Конечно, есть переменные RENV*
, которые присутствуют только в корпусе renv
.
Копнув дальше и вдохновившись этот вопрос, я проверил путь включения gcc
. Есть различия в зависимости от renv
.
С renv
:
> system("echo | gcc -Wp,-v -x c++ - -fsyntax-only", intern=TRUE)
clang -cc1 version 12.0.0 (clang-1200.0.32.29) default target x86_64-apple-darwin19.6.0
ignoring nonexistent directory "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/local/include"
ignoring nonexistent directory "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/Library/Frameworks"
#include "..." search starts here:
#include <...> search starts here:
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1
/Library/Developer/CommandLineTools/usr/lib/clang/12.0.0/include
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include
/Library/Developer/CommandLineTools/usr/include
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks (framework directory)
End of search list.
Без renv
:
> system("echo | gcc -Wp,-v -x c++ - -fsyntax-only", intern=TRUE)
clang -cc1 version 12.0.0 (clang-1200.0.32.29) default target x86_64-apple-darwin19.6.0
ignoring nonexistent directory "/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/local/include"
ignoring nonexistent directory "/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/Library/Frameworks"
#include "..." search starts here:
#include <...> search starts here:
/usr/local/include
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1
/Library/Developer/CommandLineTools/usr/lib/clang/12.0.0/include
/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include
/Library/Developer/CommandLineTools/usr/include
/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/Frameworks (framework directory)
End of search list.
Очевидно, что внутри renv
стандартного /usr/local/include
нет (есть также некоторые отличия в других путях). Это почему? Как я могу это исправить?
Не другие системы Macos. В Linux все работает.
Можете ли вы сравнить sys.getenv () с использованием renv и без него?
@Sirius Я отредактировал.
Хороший. Я не сижу перед своим компьютером, но если вы сравните их (сделайте setdiff в обоих направлениях), есть ли что-нибудь поразительное, что выскочит?
Сделал правку. Различаются всего 3 переменные, и это вполне нормально.
Да, я бы их не заподозрил. Вы можете изменить их в сеансе renv R, чтобы они соответствовали другому, но я сомневаюсь, что это связано. Что делать, если вы отлаживаете (install.packages) и непосредственно перед запуском фактической установки еще раз проверьте среду и посмотрите, не изменилось ли что-нибудь еще
@Sirius Я отредактировал путь поиска gcc
. Вы что-нибудь знаете об этом?
Что, если вы распакуйте архив пакетов, найдете ли вы make-файлы или сценарии сборки? Может быть, они делают что-то неортодоксальное с точки зрения включения заголовков и библиотек
Устанавливаются ли в вашей системе другие пакеты, требующие компиляции c, под renv?
Я попробовал заархивировать sf
и запустить скрипт настройки. Все было нормально. В renv
похоже, что некоторые места не видны; однако, для пакета units
, например, добавив в сценарий конфигурации /usr/local/include/
, все заработало (мне не нужно было явно указывать путь в обычном сеансе R).
Итак, мне кажется, что у меня 2 проблемы. Во-первых, внутри renv
препроцессор C не ищет те же пути, что и вне renv
. Во-вторых, пакет sf
по какой-то причине игнорирует указанный путь --with-proj-include
.
Я бы отнес это к проблемам renv на github и доложил об этом.
Уже сделал: github.com/rstudio/renv/issues/704.
@Sirius На самом деле, я немного небрежно проверял переменные окружения. После загрузки renv
появляется переменная SDKROOT
, и это является виновником. Если я экспортирую его в оболочку, а затем запускаю cpp -v
, путь /usr/local/include
исчезнет. Теперь я пытаюсь понять, почему это так и как я могу это обойти. Если у вас есть подсказка, это было бы здорово.
Что произойдет, если вы отключите его в .Rprofile? или просто сеанс R? Я не вижу этого в своей системе Linux
Это переменная, которая действует только для macos. Не знаю, критично ли это для других аспектов. .Rprofile устанавливается renv, и я хотел бы получить решение, которое позволит мне использовать renv без особых настроек.
Я бы сказал, что добавление одного вызова Sys.setenv в существующий .Rprofile - это нормально. Я делаю это все время. По крайней мере, пока это не будет исправлено.
@Sirius Дело в том, что renv создает .Rprofile для каждого проекта, поэтому вы должны не забывать редактировать .Rprofile каждый раз, когда открываете проект. В итоге я устанавливаю его в bash_profile с пустым значением, чтобы renv не перезаписывал его. Спасибо за подсказки и комментарии, очень помогли.
Np! Да, я широко использую Renv. Выяснилось, что не всем проектам нужна sf, поэтому редактирование только немногих, кому это нужно, может сработать. Но, конечно, переменные env можно установить несколькими способами. Ответили ли разработчики renv?
Да, вы можете следить здесь: github.com/rstudio/renv/issues/704
У вас есть доступ к другим системам, чтобы примерить это?