RCall.jl
RCall.jl copied to clipboard
Cannot install RCall on MacOS Big Sur
I cannot install RCall on MacOS Big Sur (11.6). I have tried manually pointing "R_HOME" to my existing R install as well as to a new Conda install, and I have tried setting it to "*" so that Conda can install R anew, but I always get the same error. Adding the library directory to the "LD_LIBRARY_PATH" environmental variable does not change the result. Thanks for any guidance!
julia> ENV["R_HOME"] = "/Users/Elliot/miniconda3/pkgs/r-base-3.5.3-hb1347aa_0/lib/R"
"/Users/Elliot/miniconda3/pkgs/r-base-3.5.3-hb1347aa_0/lib/R"
julia> Pkg.build("RCall")
Building Conda → `~/.julia/scratchspaces/44cfe95a-1eb2-52ea-b672-e2afdf69b78f/6cdc8832ba11c7695f494c9d9a1c31e90959ce0f/build.log`
Building RCall → `~/.julia/scratchspaces/44cfe95a-1eb2-52ea-b672-e2afdf69b78f/80a056277142a340e646beea0e213f9aecb99caa/build.log`
ERROR: Error building `RCall`:
ERROR: could not load library "/Users/Elliot/miniconda3/pkgs/r-base-3.5.3-hb1347aa_0/lib/R/lib/libR.dylib"
dlopen(/Users/Elliot/miniconda3/pkgs/r-base-3.5.3-hb1347aa_0/lib/R/lib/libR.dylib, 1): no suitable image found. Did find:
/Users/Elliot/miniconda3/pkgs/r-base-3.5.3-hb1347aa_0/lib/R/lib/libR.dylib: mach-o, but wrong architecture
/Users/Elliot/miniconda3/pkgs/r-base-3.5.3-hb1347aa_0/lib/R/lib/libR.dylib: mach-o, but wrong architecture
ERROR: LoadError: Try adding /Users/Elliot/miniconda3/pkgs/r-base-3.5.3-hb1347aa_0/lib/R/lib to the "LD_LIBRARY_PATH" environmental variable and restarting Julia.
Stacktrace:
[1] error(s::String)
@ Base ./error.jl:33
[2] validate_libR(libR::String)
@ Main ~/.julia/packages/RCall/iMDW2/deps/setup.jl:26
[3] locate_libR(Rhome::String)
@ Main ~/.julia/packages/RCall/iMDW2/deps/setup.jl:43
[4] top-level scope
@ ~/.julia/packages/RCall/iMDW2/deps/build.jl:58
[5] include(fname::String)
@ Base.MainInclude ./client.jl:451
[6] top-level scope
@ none:5
in expression starting at /Users/Elliot/.julia/packages/RCall/iMDW2/deps/build.jl:11
caused by: could not load library "/Users/Elliot/miniconda3/pkgs/r-base-3.5.3-hb1347aa_0/lib/R/lib/libR.dylib"
dlopen(/Users/Elliot/miniconda3/pkgs/r-base-3.5.3-hb1347aa_0/lib/R/lib/libR.dylib, 1): no suitable image found. Did find:
/Users/Elliot/miniconda3/pkgs/r-base-3.5.3-hb1347aa_0/lib/R/lib/libR.dylib: mach-o, but wrong architecture
/Users/Elliot/miniconda3/pkgs/r-base-3.5.3-hb1347aa_0/lib/R/lib/libR.dylib: mach-o, but wrong architecture
Stacktrace:
[1] dlopen(s::String, flags::UInt32; throw_error::Bool)
@ Base.Libc.Libdl ./libdl.jl:117
[2] dlopen (repeats 2 times)
@ ./libdl.jl:117 [inlined]
[3] validate_libR(libR::String)
@ Main ~/.julia/packages/RCall/iMDW2/deps/setup.jl:16
[4] locate_libR(Rhome::String)
@ Main ~/.julia/packages/RCall/iMDW2/deps/setup.jl:43
[5] top-level scope
@ ~/.julia/packages/RCall/iMDW2/deps/build.jl:58
[6] include(fname::String)
@ Base.MainInclude ./client.jl:451
[7] top-level scope
@ none:5
Stacktrace:
[1] pkgerror(msg::String)
@ Pkg.Types /Applications/Julia-1.7.app/Contents/Resources/julia/share/julia/stdlib/v1.7/Pkg/src/Types.jl:68
[2] (::Pkg.Operations.var"#62#67"{Bool, Pkg.Types.Context, String, Pkg.Types.PackageSpec})()
@ Pkg.Operations /Applications/Julia-1.7.app/Contents/Resources/julia/share/julia/stdlib/v1.7/Pkg/src/Operations.jl:962
[3] withenv(::Pkg.Operations.var"#62#67"{Bool, Pkg.Types.Context, String, Pkg.Types.PackageSpec}, ::Pair{String, String}, ::Vararg{Pair{String}})
@ Base ./env.jl:172
[4] (::Pkg.Operations.var"#99#103"{String, Bool, Bool, Bool, Pkg.Operations.var"#62#67"{Bool, Pkg.Types.Context, String, Pkg.Types.PackageSpec}, Pkg.Types.PackageSpec})()
@ Pkg.Operations /Applications/Julia-1.7.app/Contents/Resources/julia/share/julia/stdlib/v1.7/Pkg/src/Operations.jl:1506
[5] with_temp_env(fn::Pkg.Operations.var"#99#103"{String, Bool, Bool, Bool, Pkg.Operations.var"#62#67"{Bool, Pkg.Types.Context, String, Pkg.Types.PackageSpec}, Pkg.Types.PackageSpec}, temp_env::String)
@ Pkg.Operations /Applications/Julia-1.7.app/Contents/Resources/julia/share/julia/stdlib/v1.7/Pkg/src/Operations.jl:1390
[6] (::Pkg.Operations.var"#98#102"{Bool, Bool, Bool, Pkg.Operations.var"#62#67"{Bool, Pkg.Types.Context, String, Pkg.Types.PackageSpec}, Pkg.Types.Context, Pkg.Types.PackageSpec, String, Pkg.Types.Project, String})(tmp::String)
@ Pkg.Operations /Applications/Julia-1.7.app/Contents/Resources/julia/share/julia/stdlib/v1.7/Pkg/src/Operations.jl:1469
[7] mktempdir(fn::Pkg.Operations.var"#98#102"{Bool, Bool, Bool, Pkg.Operations.var"#62#67"{Bool, Pkg.Types.Context, String, Pkg.Types.PackageSpec}, Pkg.Types.Context, Pkg.Types.PackageSpec, String, Pkg.Types.Project, String}, parent::String; prefix::String)
@ Base.Filesystem ./file.jl:750
[8] mktempdir(fn::Function, parent::String) (repeats 2 times)
@ Base.Filesystem ./file.jl:748
[9] sandbox(fn::Function, ctx::Pkg.Types.Context, target::Pkg.Types.PackageSpec, target_path::String, sandbox_path::String, sandbox_project_override::Pkg.Types.Project; force_latest_compatible_version::Bool, allow_earlier_backwards_compatible_versions::Bool, allow_reresolve::Bool)
@ Pkg.Operations /Applications/Julia-1.7.app/Contents/Resources/julia/share/julia/stdlib/v1.7/Pkg/src/Operations.jl:1435
[10] sandbox(fn::Function, ctx::Pkg.Types.Context, target::Pkg.Types.PackageSpec, target_path::String, sandbox_path::String, sandbox_project_override::Pkg.Types.Project)
@ Pkg.Operations /Applications/Julia-1.7.app/Contents/Resources/julia/share/julia/stdlib/v1.7/Pkg/src/Operations.jl:1432
[11] build_versions(ctx::Pkg.Types.Context, uuids::Set{Base.UUID}; verbose::Bool)
@ Pkg.Operations /Applications/Julia-1.7.app/Contents/Resources/julia/share/julia/stdlib/v1.7/Pkg/src/Operations.jl:943
[12] build(ctx::Pkg.Types.Context, uuids::Set{Base.UUID}, verbose::Bool)
@ Pkg.Operations /Applications/Julia-1.7.app/Contents/Resources/julia/share/julia/stdlib/v1.7/Pkg/src/Operations.jl:822
[13] build(ctx::Pkg.Types.Context, pkgs::Vector{Pkg.Types.PackageSpec}; verbose::Bool, kwargs::Base.Pairs{Symbol, Base.TTY, Tuple{Symbol}, NamedTuple{(:io,), Tuple{Base.TTY}}})
@ Pkg.API /Applications/Julia-1.7.app/Contents/Resources/julia/share/julia/stdlib/v1.7/Pkg/src/API.jl:992
[14] build(pkgs::Vector{Pkg.Types.PackageSpec}; io::Base.TTY, kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
@ Pkg.API /Applications/Julia-1.7.app/Contents/Resources/julia/share/julia/stdlib/v1.7/Pkg/src/API.jl:149
[15] build(pkgs::Vector{Pkg.Types.PackageSpec})
@ Pkg.API /Applications/Julia-1.7.app/Contents/Resources/julia/share/julia/stdlib/v1.7/Pkg/src/API.jl:144
[16] #build#99
@ /Applications/Julia-1.7.app/Contents/Resources/julia/share/julia/stdlib/v1.7/Pkg/src/API.jl:142 [inlined]
[17] build
@ /Applications/Julia-1.7.app/Contents/Resources/julia/share/julia/stdlib/v1.7/Pkg/src/API.jl:142 [inlined]
[18] #build#98
@ /Applications/Julia-1.7.app/Contents/Resources/julia/share/julia/stdlib/v1.7/Pkg/src/API.jl:141 [inlined]
[19] build(pkg::String)
@ Pkg.API /Applications/Julia-1.7.app/Contents/Resources/julia/share/julia/stdlib/v1.7/Pkg/src/API.jl:141
[20] top-level scope
@ REPL[3]:1
Are you on an M1 or Intel Mac?
I am have the same issue with Julia 1.7. I am on a Mac M1.
Here is the error message I get. It tells me it cannot find the R directory, even though it is the same one obtained by using R.home()
in R. Using the same directory with Julia 1.6.5 is fine, and RCall
builds with no problem.
julia> Pkg.build("RCall")
Building Conda → `~/.julia/scratchspaces/44cfe95a-1eb2-52ea-b672-e2afdf69b78f/6e47d11ea2776bc5627421d59cdcc1296c058071/build.log`
Building RCall → `~/.julia/scratchspaces/44cfe95a-1eb2-52ea-b672-e2afdf69b78f/72fddd643785ec1f36581cbc3d288529b96e99a7/build.log`
ERROR: Error building `RCall`:
ERROR: LoadError: R_HOME is not a directory.
Stacktrace:
[1] error(s::String)
@ Base ./error.jl:33
[2] top-level scope
@ ~/.julia/packages/RCall/6kphM/deps/build.jl:53
[3] include(fname::String)
@ Base.MainInclude ./client.jl:451
[4] top-level scope
@ none:5
in expression starting at /Users/stephenwild/.julia/packages/RCall/6kphM/deps/build.jl:11
Stacktrace:
[1] pkgerror(msg::String)
@ Pkg.Types /private/var/folders/r1/t2s9jjkj4k56jy6_29_s3svm0000gn/T/AppTranslocation/04BFCC29-CB89-48A4-97E7-49A73DB57EAC/d/Julia-1.7.app/Contents/Resources/julia/share/julia/stdlib/v1.7/Pkg/src/Types.jl:68
[2] (::Pkg.Operations.var"#62#67"{Bool, Pkg.Types.Context, String, Pkg.Types.PackageSpec})()
@ Pkg.Operations /private/var/folders/r1/t2s9jjkj4k56jy6_29_s3svm0000gn/T/AppTranslocation/04BFCC29-CB89-48A4-97E7-49A73DB57EAC/d/Julia-1.7.app/Contents/Resources/julia/share/julia/stdlib/v1.7/Pkg/src/Operations.jl:962
[3] withenv(::Pkg.Operations.var"#62#67"{Bool, Pkg.Types.Context, String, Pkg.Types.PackageSpec}, ::Pair{String, String}, ::Vararg{Pair{String}})
@ Base ./env.jl:172
[4] (::Pkg.Operations.var"#99#103"{String, Bool, Bool, Bool, Pkg.Operations.var"#62#67"{Bool, Pkg.Types.Context, String, Pkg.Types.PackageSpec}, Pkg.Types.PackageSpec})()
@ Pkg.Operations /private/var/folders/r1/t2s9jjkj4k56jy6_29_s3svm0000gn/T/AppTranslocation/04BFCC29-CB89-48A4-97E7-49A73DB57EAC/d/Julia-1.7.app/Contents/Resources/julia/share/julia/stdlib/v1.7/Pkg/src/Operations.jl:1506
[5] with_temp_env(fn::Pkg.Operations.var"#99#103"{String, Bool, Bool, Bool, Pkg.Operations.var"#62#67"{Bool, Pkg.Types.Context, String, Pkg.Types.PackageSpec}, Pkg.Types.PackageSpec}, temp_env::String)
@ Pkg.Operations /private/var/folders/r1/t2s9jjkj4k56jy6_29_s3svm0000gn/T/AppTranslocation/04BFCC29-CB89-48A4-97E7-49A73DB57EAC/d/Julia-1.7.app/Contents/Resources/julia/share/julia/stdlib/v1.7/Pkg/src/Operations.jl:1390
[6] (::Pkg.Operations.var"#98#102"{Bool, Bool, Bool, Pkg.Operations.var"#62#67"{Bool, Pkg.Types.Context, String, Pkg.Types.PackageSpec}, Pkg.Types.Context, Pkg.Types.PackageSpec, String, Pkg.Types.Project, String})(tmp::String)
@ Pkg.Operations /private/var/folders/r1/t2s9jjkj4k56jy6_29_s3svm0000gn/T/AppTranslocation/04BFCC29-CB89-48A4-97E7-49A73DB57EAC/d/Julia-1.7.app/Contents/Resources/julia/share/julia/stdlib/v1.7/Pkg/src/Operations.jl:1469
[7] mktempdir(fn::Pkg.Operations.var"#98#102"{Bool, Bool, Bool, Pkg.Operations.var"#62#67"{Bool, Pkg.Types.Context, String, Pkg.Types.PackageSpec}, Pkg.Types.Context, Pkg.Types.PackageSpec, String, Pkg.Types.Project, String}, parent::String; prefix::String)
@ Base.Filesystem ./file.jl:750
[8] mktempdir(fn::Function, parent::String) (repeats 2 times)
@ Base.Filesystem ./file.jl:748
[9] sandbox(fn::Function, ctx::Pkg.Types.Context, target::Pkg.Types.PackageSpec, target_path::String, sandbox_path::String, sandbox_project_override::Pkg.Types.Project; force_latest_compatible_version::Bool, allow_earlier_backwards_compatible_versions::Bool, allow_reresolve::Bool)
@ Pkg.Operations /private/var/folders/r1/t2s9jjkj4k56jy6_29_s3svm0000gn/T/AppTranslocation/04BFCC29-CB89-48A4-97E7-49A73DB57EAC/d/Julia-1.7.app/Contents/Resources/julia/share/julia/stdlib/v1.7/Pkg/src/Operations.jl:1435
[10] sandbox(fn::Function, ctx::Pkg.Types.Context, target::Pkg.Types.PackageSpec, target_path::String, sandbox_path::String, sandbox_project_override::Pkg.Types.Project)
@ Pkg.Operations /private/var/folders/r1/t2s9jjkj4k56jy6_29_s3svm0000gn/T/AppTranslocation/04BFCC29-CB89-48A4-97E7-49A73DB57EAC/d/Julia-1.7.app/Contents/Resources/julia/share/julia/stdlib/v1.7/Pkg/src/Operations.jl:1432
[11] build_versions(ctx::Pkg.Types.Context, uuids::Set{Base.UUID}; verbose::Bool)
@ Pkg.Operations /private/var/folders/r1/t2s9jjkj4k56jy6_29_s3svm0000gn/T/AppTranslocation/04BFCC29-CB89-48A4-97E7-49A73DB57EAC/d/Julia-1.7.app/Contents/Resources/julia/share/julia/stdlib/v1.7/Pkg/src/Operations.jl:943
[12] build(ctx::Pkg.Types.Context, uuids::Set{Base.UUID}, verbose::Bool)
@ Pkg.Operations /private/var/folders/r1/t2s9jjkj4k56jy6_29_s3svm0000gn/T/AppTranslocation/04BFCC29-CB89-48A4-97E7-49A73DB57EAC/d/Julia-1.7.app/Contents/Resources/julia/share/julia/stdlib/v1.7/Pkg/src/Operations.jl:822
[13] build(ctx::Pkg.Types.Context, pkgs::Vector{Pkg.Types.PackageSpec}; verbose::Bool, kwargs::Base.Pairs{Symbol, Base.TTY, Tuple{Symbol}, NamedTuple{(:io,), Tuple{Base.TTY}}})
@ Pkg.API /private/var/folders/r1/t2s9jjkj4k56jy6_29_s3svm0000gn/T/AppTranslocation/04BFCC29-CB89-48A4-97E7-49A73DB57EAC/d/Julia-1.7.app/Contents/Resources/julia/share/julia/stdlib/v1.7/Pkg/src/API.jl:992
[14] build(pkgs::Vector{Pkg.Types.PackageSpec}; io::Base.TTY, kwargs::Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}})
@ Pkg.API /private/var/folders/r1/t2s9jjkj4k56jy6_29_s3svm0000gn/T/AppTranslocation/04BFCC29-CB89-48A4-97E7-49A73DB57EAC/d/Julia-1.7.app/Contents/Resources/julia/share/julia/stdlib/v1.7/Pkg/src/API.jl:149
[15] build(pkgs::Vector{Pkg.Types.PackageSpec})
@ Pkg.API /private/var/folders/r1/t2s9jjkj4k56jy6_29_s3svm0000gn/T/AppTranslocation/04BFCC29-CB89-48A4-97E7-49A73DB57EAC/d/Julia-1.7.app/Contents/Resources/julia/share/julia/stdlib/v1.7/Pkg/src/API.jl:144
[16] #build#99
@ /private/var/folders/r1/t2s9jjkj4k56jy6_29_s3svm0000gn/T/AppTranslocation/04BFCC29-CB89-48A4-97E7-49A73DB57EAC/d/Julia-1.7.app/Contents/Resources/julia/share/julia/stdlib/v1.7/Pkg/src/API.jl:142 [inlined]
[17] build
@ /private/var/folders/r1/t2s9jjkj4k56jy6_29_s3svm0000gn/T/AppTranslocation/04BFCC29-CB89-48A4-97E7-49A73DB57EAC/d/Julia-1.7.app/Contents/Resources/julia/share/julia/stdlib/v1.7/Pkg/src/API.jl:142 [inlined]
[18] #build#98
@ /private/var/folders/r1/t2s9jjkj4k56jy6_29_s3svm0000gn/T/AppTranslocation/04BFCC29-CB89-48A4-97E7-49A73DB57EAC/d/Julia-1.7.app/Contents/Resources/julia/share/julia/stdlib/v1.7/Pkg/src/API.jl:141 [inlined]
[19] build(pkg::String)
@ Pkg.API /private/var/folders/r1/t2s9jjkj4k56jy6_29_s3svm0000gn/T/AppTranslocation/04BFCC29-CB89-48A4-97E7-49A73DB57EAC/d/Julia-1.7.app/Contents/Resources/julia/share/julia/stdlib/v1.7/Pkg/src/API.jl:141
[20] top-level scope
@ REPL[15]:1
EDIT: Forgot to put in the location from R.home(). it's "/Library/Frameworks/R.framework/Resources"
I'm on an M1, macOS 12.2.1, using julia built natively against the master branch (currently 1.9.0-Dev). I'm using R 4.1.2, downloaded and installed separately, aarch64 native.
After starting Julia, I set ENV["R_HOME"] = "/Library/Frameworks/R.framework/Resources"
before moving to the Pkg prompt for add RCall
. This installed without issues.
After adding RDatasets
, I ran through the example with mtcars and ggplot2 also without issues.
I wonder if not using the conda install but downloading and installing R separately would address some of the above issues.
Are you on an M1 or Intel Mac?
M1. Error message is the same whether using the native R install or a conda install.
So I tried Julia 1.7.1 on my M1. I'd generated a separate project directory/environment, called "rcall" under which I'd successfully added RCall as above with Julia 1.9-Dev (built for M1). After starting julia in that directory, I activated the project. Then using RCall
, generated the error below under 1.7.1. But this is because I downloaded the x86_64 version of julia 1.7.1 and am trying to use the arm version of R with it -- leading to incompatibility.
Any possibility that is your issue?
There was no problem with Julia/arm working with R/arm. The other possibility is that Julia 1.8+ has fixes for this issue that 1.7 does not.
Error message
julia> using RCall
ERROR: could not load library "/Library/Frameworks/R.framework/Resources/lib/libR.dylib"
dlopen(/Library/Frameworks/R.framework/Resources/lib/libR.dylib, 0x0001): tried: '/Library/Frameworks/R.framework/Resources/lib/libR.dylib' (mach-o file, but is an incompatible architecture (have 'arm64', need 'x86_64')), '/usr/local/lib/libR.dylib' (no such file), '/usr/lib/libR.dylib' (no such file), '/Library/Frameworks/R.framework/Versions/4.1-arm64/Resources/lib/libR.dylib' (mach-o file, but is an incompatible architecture (have 'arm64', need 'x86_64')), '/usr/local/lib/libR.dylib' (no such file), '/usr/lib/libR.dylib' (no such file)
ERROR: InitError: Try adding /Library/Frameworks/R.framework/Resources/lib to the "LD_LIBRARY_PATH" environmental variable and restarting Julia.
Stacktrace:
[1] error(s::String)
@ Base ./error.jl:33
[2] validate_libR(libR::String)
@ RCall ~/.julia/packages/RCall/6kphM/deps/setup.jl:26
[3] __init__()
@ RCall ~/.julia/packages/RCall/6kphM/src/setup.jl:174
[4] _include_from_serialized(path::String, depmods::Vector{Any})
@ Base ./loading.jl:768
[5] _require_search_from_serialized(pkg::Base.PkgId, sourcepath::String)
@ Base ./loading.jl:854
[6] _require(pkg::Base.PkgId)
@ Base ./loading.jl:1097
[7] require(uuidkey::Base.PkgId)
@ Base ./loading.jl:1013
[8] require(into::Module, mod::Symbol)
@ Base ./loading.jl:997
during initialization of module RCall
caused by: could not load library "/Library/Frameworks/R.framework/Resources/lib/libR.dylib"
dlopen(/Library/Frameworks/R.framework/Resources/lib/libR.dylib, 0x0001): tried: '/Library/Frameworks/R.framework/Resources/lib/libR.dylib' (mach-o file, but is an incompatible architecture (have 'arm64', need 'x86_64')), '/usr/local/lib/libR.dylib' (no such file), '/usr/lib/libR.dylib' (no such file), '/Library/Frameworks/R.framework/Versions/4.1-arm64/Resources/lib/libR.dylib' (mach-o file, but is an incompatible architecture (have 'arm64', need 'x86_64')), '/usr/local/lib/libR.dylib' (no such file), '/usr/lib/libR.dylib' (no such file)
Stacktrace:
[1] dlopen(s::String, flags::UInt32; throw_error::Bool)
@ Base.Libc.Libdl ./libdl.jl:117
[2] dlopen (repeats 2 times)
@ ./libdl.jl:117 [inlined]
[3] validate_libR(libR::String)
@ RCall ~/.julia/packages/RCall/6kphM/deps/setup.jl:16
[4] __init__()
@ RCall ~/.julia/packages/RCall/6kphM/src/setup.jl:174
[5] _include_from_serialized(path::String, depmods::Vector{Any})
@ Base ./loading.jl:768
[6] _require_search_from_serialized(pkg::Base.PkgId, sourcepath::String)
@ Base ./loading.jl:854
[7] _require(pkg::Base.PkgId)
@ Base ./loading.jl:1097
[8] require(uuidkey::Base.PkgId)
@ Base ./loading.jl:1013
[9] require(into::Module, mod::Symbol)
@ Base ./loading.jl:997
What does
R RHOME
give?
@George9000 is correct: I had the wrong version of R installed. Would have saved myself a few headaches over the last couple days if I remembered that.
Updating R 4.1.2 to use the arm version addressed this issue.
Apologies for the noise.
With Julia also having native M1 binaries now, this probably should be even lesser of an issue.