Skip to content

Looks for R.dll in wrong location on Windows 11 ARM64 #40

@matthewbegun

Description

@matthewbegun

Hi, after a fresh install of R from winget and radian via uv on a Microsoft Surface (Windows 11, ARM64), I get the following error when attempting to run radian:

winget install RProject.R
winget install astral-sh.uv

uv tool install --python 3.13 radian
Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "C:\Users\matth\.local\bin\radian.exe\__main__.py", line 10, in <module>
    sys.exit(main())
             ~~~~^^
  File "C:\Users\matth\AppData\Roaming\uv\tools\radian\Lib\site-packages\radian\app.py", line 239, in main
    RadianApplication(r_home, ver=__version__).run(options, cleanup=cleanup)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\matth\AppData\Roaming\uv\tools\radian\Lib\site-packages\radian\app.py", line 345, in run
    rchitect.init(args=args, register_signal_handlers=True)
    ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\matth\AppData\Roaming\uv\tools\radian\Lib\site-packages\rchitect\setup.py", line 43, in init
    libr_path = get_libr_path(rhome, ensure_path=True)
  File "C:\Users\matth\AppData\Roaming\uv\tools\radian\Lib\site-packages\rchitect\utils.py", line 120, in get_libr_path
    raise RuntimeError("R share library ({}) does not exist.".format(libr_path))
RuntimeError: R share library (C:\PROGRA~2\R\R-45~1.1\bin\R.dll) does not exist.

The R.dll file is actually located at C:\PROGRA~2\R\R-45~1.1\bin\x64\R.dll, which is the default location for all Windows 64-bit installs (x64 and ARM64).

After changing get_libr_path in utils.py to point to the correct directory, everything runs fine.

def get_libr_path(rhome, ensure_path=False):
    # TODO: better support R_ARCH
    if sys.platform.startswith("win"):
        # if is_arm():
        #     libr_path = os.path.join(rhome, "bin", "R.dll")
        # elif is_64bit():
        if is_64bit():
            libr_path = os.path.join(rhome, "bin", "x64", "R.dll")
        else:
            libr_path = os.path.join(rhome, "bin", "i386", "R.dll")

Not sure if this is a recent change, or if using winget makes a difference.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions