Установка пакета sf в R под renv на Macos

У меня проблемы с установкой пакета 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 нет (есть также некоторые отличия в других путях). Это почему? Как я могу это исправить?

У вас есть доступ к другим системам, чтобы примерить это?

Sirius 01.04.2021 19:40

Не другие системы Macos. В Linux все работает.

nicola 01.04.2021 19:47

Можете ли вы сравнить sys.getenv () с использованием renv и без него?

Sirius 01.04.2021 20:18

@Sirius Я отредактировал.

nicola 01.04.2021 20:28

Хороший. Я не сижу перед своим компьютером, но если вы сравните их (сделайте setdiff в обоих направлениях), есть ли что-нибудь поразительное, что выскочит?

Sirius 01.04.2021 22:56

Сделал правку. Различаются всего 3 переменные, и это вполне нормально.

nicola 01.04.2021 23:15

Да, я бы их не заподозрил. Вы можете изменить их в сеансе renv R, чтобы они соответствовали другому, но я сомневаюсь, что это связано. Что делать, если вы отлаживаете (install.packages) и непосредственно перед запуском фактической установки еще раз проверьте среду и посмотрите, не изменилось ли что-нибудь еще

Sirius 01.04.2021 23:37

@Sirius Я отредактировал путь поиска gcc. Вы что-нибудь знаете об этом?

nicola 02.04.2021 07:41

Что, если вы распакуйте архив пакетов, найдете ли вы make-файлы или сценарии сборки? Может быть, они делают что-то неортодоксальное с точки зрения включения заголовков и библиотек

Sirius 02.04.2021 11:42

Устанавливаются ли в вашей системе другие пакеты, требующие компиляции c, под renv?

Sirius 02.04.2021 11:44

Я попробовал заархивировать sf и запустить скрипт настройки. Все было нормально. В renv похоже, что некоторые места не видны; однако, для пакета units, например, добавив в сценарий конфигурации /usr/local/include/, все заработало (мне не нужно было явно указывать путь в обычном сеансе R).

nicola 02.04.2021 12:14

Итак, мне кажется, что у меня 2 проблемы. Во-первых, внутри renv препроцессор C не ищет те же пути, что и вне renv. Во-вторых, пакет sf по какой-то причине игнорирует указанный путь --with-proj-include.

nicola 02.04.2021 12:16

Я бы отнес это к проблемам renv на github и доложил об этом.

Sirius 02.04.2021 12:21

Уже сделал: github.com/rstudio/renv/issues/704.

nicola 02.04.2021 12:25

@Sirius На самом деле, я немного небрежно проверял переменные окружения. После загрузки renv появляется переменная SDKROOT, и это является виновником. Если я экспортирую его в оболочку, а затем запускаю cpp -v, путь /usr/local/include исчезнет. Теперь я пытаюсь понять, почему это так и как я могу это обойти. Если у вас есть подсказка, это было бы здорово.

nicola 02.04.2021 15:43

Что произойдет, если вы отключите его в .Rprofile? или просто сеанс R? Я не вижу этого в своей системе Linux

Sirius 02.04.2021 16:18

Это переменная, которая действует только для macos. Не знаю, критично ли это для других аспектов. .Rprofile устанавливается renv, и я хотел бы получить решение, которое позволит мне использовать renv без особых настроек.

nicola 02.04.2021 16:43

Я бы сказал, что добавление одного вызова Sys.setenv в существующий .Rprofile - это нормально. Я делаю это все время. По крайней мере, пока это не будет исправлено.

Sirius 02.04.2021 19:23

@Sirius Дело в том, что renv создает .Rprofile для каждого проекта, поэтому вы должны не забывать редактировать .Rprofile каждый раз, когда открываете проект. В итоге я устанавливаю его в bash_profile с пустым значением, чтобы renv не перезаписывал его. Спасибо за подсказки и комментарии, очень помогли.

nicola 03.04.2021 09:31

Np! Да, я широко использую Renv. Выяснилось, что не всем проектам нужна sf, поэтому редактирование только немногих, кому это нужно, может сработать. Но, конечно, переменные env можно установить несколькими способами. Ответили ли разработчики renv?

Sirius 03.04.2021 11:08

Да, вы можете следить здесь: github.com/rstudio/renv/issues/704

nicola 03.04.2021 11:27
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
21
50
0

Другие вопросы по теме