Skip to content

ESP-IDF Setup: The path for ESP-IDF is not valid: /tools/idf.py not found: EACCES Access denied (VSC-1766) #1665

@samuel-hunter

Description

@samuel-hunter

OS

Linux

Operating System version

Manjaro Linux 25.0.8

Visual Studio Code version

1.98.2

ESP-IDF version

5.5

Python version

3.13.7

Doctor command output

---------------------------------------------- ESP-IDF Extension for Visual Studio Code report ---------------------------------------------
OS undefined undefined undefined 
System environment variable IDF_PYTHON_ENV_PATH 
 undefined 
System environment variable PATH 
 undefined 
System environment variable PYTHON 
 undefined 
Visual Studio Code Remote name undefined 
Visual Studio Code version undefined 
Visual Studio Code language undefined 
Visual Studio Code shell undefined 
ESP-IDF Extension version undefined 
Workspace folder No workspace folder is open 
---------------------------------------------------- Extension configuration settings ------------------------------------------------------
ESP-ADF Path (idf.espAdfPath) undefined
ESP-IDF Path (idf.espIdfPath) undefined
ESP-MDF Path (idf.espMdfPath) undefined
ESP-Matter Path (idf.espMatterPath) undefined
ESP-HomeKit-SDK Path (idf.espHomeKitSdkPath) undefined
Custom extra paths undefined
System python Path (idf.pythonInstallPath) undefined
Virtual environment Python path (computed) undefined
Serial port (idf.port) undefined
OpenOCD Configs (idf.openOcdConfigs) undefined
OpenOCD log level (idf.openOcdDebugLevel) undefined
OpenOCD launch arguments (idf.openOcdLaunchArgs) undefined
ESP-IDF Tools Path (idf.toolsPath) undefined
Git Path (idf.gitPath) undefined
Notification Mode (idf.notificationMode) undefined
Flash type (idf.flashType) undefined
Flash partition to use (idf.flashPartitionToUse) undefined
-------------------------------------------------------- Configurations access -------------------------------------------------------------
Access to ESP-ADF Path (idf.espAdfPath) undefined
Access to ESP-IDF Path (idf.espIdfPath) undefined
Access to ESP-MDF Path (idf.espMdfPath) undefined
Access to ESP-Matter Path (idf.espMatterPath) undefined
Access to ESP-HomeKit Path (idf.espHomeKitSdkPath) undefined
Access to ESP-IDF Custom extra paths
Access to System python Path (idf.pythonInstallPath) undefined
Access to Virtual environment Python path (computed) undefined
Access to CMake in environment PATH undefined
Access to Ninja in environment PATH undefined
Access to ESP-IDF Tools Path (idf.toolsPath) undefined
-------------------------------------------------------- Configurations has spaces -------------------------------------------------------------
Spaces in system environment Path undefined
Spaces in ESP-ADF Path (idf.espAdfPath) undefined
Spaces in ESP-IDF Path (idf.espIdfPath) undefined
Spaces in ESP-MDF Path (idf.espMdfPath) undefined
Spaces in ESP-Matter Path (idf.espMatterPath) undefined
Spaces in ESP-HomeKit-SDK Path (idf.espHomeKitSdkPath) undefined
Spaces in ESP-IDF Custom extra paths
Spaces in System python Path (idf.pythonInstallPath) undefined
Spaces in Virtual environment Python path (computed) undefined
Spaces in ESP-IDF Tools Path (idf.toolsPath) undefined
----------------------------------------------------------- Executables Versions -----------------------------------------------------------
Git version undefined
ESP-IDF version undefined
Python version undefined
Python's pip version undefined
-------------------------------------------------- Project configuration settings ----------------------------------------------------------
-------------------------------------------------- Python packages in Virtual environment Python path (computed) ---------------------------
Python packages undefined
---------------------------------------------------- Check ESP-IDF python requirements.txt -------------------------------------------------
Check ESP-IDF Python packages undefined
---------------------------------------------------- Check ESP-IDF debug adapter requirements.txt ------------------------------------------
Check Debug AdapterPython packages undefined
----------------------------------------------------------- Latest error -----------------------------------------------------------------
{
  "errno": -2,
  "code": "ENOENT",
  "syscall": "spawn python",
  "path": "python",
  "spawnargs": [
    "-c",
    "import sys; print('{}.{}'.format(sys.version_info.major, sys.version_info.minor))"
  ],
  "cmd": "python -c import sys; print('{}.{}'.format(sys.version_info.major, sys.version_info.minor))"
}
--------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------- Logfile -----------------------------------------------------------------
{"message":"Cannot access filePath: <HOMEPATH>/.vscode/extensions/espressif.esp-idf-extension-1.10.2/CMakeLists.txt","stack":"Error: ENOENT: no such file or directory, access '<HOMEPATH>/.vscode/extensions/espressif.esp-idf-extension-1.10.2/CMakeLists.txt'\n\tat Object.accessSync (node:fs:246:11)\n\tat t.accessSync (node:electron/js2c/node_init:2:9332)\n\tat ct (<HOMEPATH>/.vscode/extensions/espressif.esp-idf-extension-1.10.2/dist/extension.js:2:1471825)\n\tat <HOMEPATH>/.vscode/extensions/espressif.esp-idf-extension-1.10.2/dist/extension.js:2:1473563\n\tat yt (<HOMEPATH>/.vscode/extensions/espressif.esp-idf-extension-1.10.2/dist/extension.js:2:1473749)\n\tat bt (<HOMEPATH>/.vscode/extensions/espressif.esp-idf-extension-1.10.2/dist/extension.js:2:1474159)\n\tat et (<HOMEPATH>/.vscode/extensions/espressif.esp-idf-extension-1.10.2/dist/extension.js:2:1469514)\n\tat Wt.configureWithDefaultValues (<HOMEPATH>/.vscode/extensions/espressif.esp-idf-extension-1.10.2/dist/extension.js:2:1488269)\n\tat new Wt (<HOMEPATH>/.vscode/extensions/espressif.esp-idf-extension-1.10.2/dist/extension.js:2:1484822)\n\tat Wt.init (<HOMEPATH>/.vscode/extensions/espressif.esp-idf-extension-1.10.2/dist/extension.js:2:1484771)\n\tat gd (<HOMEPATH>/.vscode/extensions/espressif.esp-idf-extension-1.10.2/dist/extension.js:2:1884643)\n\tat Ww.kb (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:116:15216)\n\tat Ww.jb (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:116:14923)\n\tat file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:116:13081\n\tat async pw.n (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:112:13415)\n\tat async pw.m (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:112:13378)\n\tat async pw.l (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:112:12834)","category":"src utils canAccessFile","level":"error","timestamp":"2025-09-13T22:32:22.660Z"}
{"message":"Cannot access filePath: <HOMEPATH>/.vscode/extensions/espressif.esp-idf-extension-1.10.2/sdkconfig","stack":"Error: ENOENT: no such file or directory, access '<HOMEPATH>/.vscode/extensions/espressif.esp-idf-extension-1.10.2/sdkconfig'\n\tat Object.accessSync (node:fs:246:11)\n\tat t.accessSync (node:electron/js2c/node_init:2:9332)\n\tat ct (<HOMEPATH>/.vscode/extensions/espressif.esp-idf-extension-1.10.2/dist/extension.js:2:1471825)\n\tat bt (<HOMEPATH>/.vscode/extensions/espressif.esp-idf-extension-1.10.2/dist/extension.js:2:1474173)\n\tat async et (<HOMEPATH>/.vscode/extensions/espressif.esp-idf-extension-1.10.2/dist/extension.js:2:1469508)\n\tat async Wt.configureWithDefaultValues (<HOMEPATH>/.vscode/extensions/espressif.esp-idf-extension-1.10.2/dist/extension.js:2:1488263)","category":"src utils canAccessFile","level":"error","timestamp":"2025-09-13T22:32:22.672Z"}
{"message":"Cannot access filePath: <HOMEPATH>/.vscode/extensions/espressif.esp-idf-extension-1.10.2/CMakeLists.txt","stack":"Error: ENOENT: no such file or directory, access '<HOMEPATH>/.vscode/extensions/espressif.esp-idf-extension-1.10.2/CMakeLists.txt'\n\tat Object.accessSync (node:fs:246:11)\n\tat t.accessSync (node:electron/js2c/node_init:2:9332)\n\tat ct (<HOMEPATH>/.vscode/extensions/espressif.esp-idf-extension-1.10.2/dist/extension.js:2:1471825)\n\tat <HOMEPATH>/.vscode/extensions/espressif.esp-idf-extension-1.10.2/dist/extension.js:2:1473563\n\tat yt (<HOMEPATH>/.vscode/extensions/espressif.esp-idf-extension-1.10.2/dist/extension.js:2:1473749)\n\tat bt (<HOMEPATH>/.vscode/extensions/espressif.esp-idf-extension-1.10.2/dist/extension.js:2:1474159)\n\tat et (<HOMEPATH>/.vscode/extensions/espressif.esp-idf-extension-1.10.2/dist/extension.js:2:1469514)\n\tat Bt (<HOMEPATH>/.vscode/extensions/espressif.esp-idf-extension-1.10.2/dist/extension.js:2:1481146)\n\tat async Wt.configureWithDefaultValues (<HOMEPATH>/.vscode/extensions/espressif.esp-idf-extension-1.10.2/dist/extension.js:2:1488321)","category":"src utils canAccessFile","level":"error","timestamp":"2025-09-13T22:32:22.715Z"}
{"message":"Cannot access filePath: <HOMEPATH>/.vscode/extensions/espressif.esp-idf-extension-1.10.2/sdkconfig","stack":"Error: ENOENT: no such file or directory, access '<HOMEPATH>/.vscode/extensions/espressif.esp-idf-extension-1.10.2/sdkconfig'\n\tat Object.accessSync (node:fs:246:11)\n\tat t.accessSync (node:electron/js2c/node_init:2:9332)\n\tat ct (<HOMEPATH>/.vscode/extensions/espressif.esp-idf-extension-1.10.2/dist/extension.js:2:1471825)\n\tat bt (<HOMEPATH>/.vscode/extensions/espressif.esp-idf-extension-1.10.2/dist/extension.js:2:1474173)\n\tat async et (<HOMEPATH>/.vscode/extensions/espressif.esp-idf-extension-1.10.2/dist/extension.js:2:1469508)\n\tat async Bt (<HOMEPATH>/.vscode/extensions/espressif.esp-idf-extension-1.10.2/dist/extension.js:2:1481140)\n\tat async Wt.configureWithDefaultValues (<HOMEPATH>/.vscode/extensions/espressif.esp-idf-extension-1.10.2/dist/extension.js:2:1488321)","category":"src utils canAccessFile","level":"error","timestamp":"2025-09-13T22:32:22.715Z"}
{"message":"Cannot access filePath: <HOMEPATH>/esp/esp-idf/tools/idf.py","stack":"Error: ENOENT: no such file or directory, access '<HOMEPATH>/esp/esp-idf/tools/idf.py'\n\tat Object.accessSync (node:fs:246:11)\n\tat t.accessSync (node:electron/js2c/node_init:2:9332)\n\tat ct (<HOMEPATH>/.vscode/extensions/espressif.esp-idf-extension-1.10.2/dist/extension.js:2:1471825)\n\tat Th.value (<HOMEPATH>/.vscode/extensions/espressif.esp-idf-extension-1.10.2/dist/extension.js:2:1569294)\n\tat P.B (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:27:2375)\n\tat P.fire (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:27:2593)\n\tat xB.$onMessage (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:135:90266)\n\tat qy.S (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:29:116244)\n\tat qy.Q (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:29:116024)\n\tat qy.M (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:29:115113)\n\tat qy.L (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:29:114351)\n\tat Th.value (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:29:113015)\n\tat P.B (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:27:2375)\n\tat P.fire (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:27:2593)\n\tat Gn.fire (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:29:9459)\n\tat Th.value (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:190:13324)\n\tat P.B (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:27:2375)\n\tat P.fire (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:27:2593)\n\tat Gn.fire (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:29:9459)\n\tat MessagePortMain.<anonymous> (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:190:11616)\n\tat MessagePortMain.emit (node:events:518:28)\n\tat MessagePortMain._internalPort.emit (node:electron/js2c/utility_init:2:2949)","category":"src utils canAccessFile","level":"error","timestamp":"2025-09-13T22:32:32.778Z"}
{"message":"Cannot access filePath: /opt/esp-idf/tools/idf.py","stack":"Error: EACCES: permission denied, access '/opt/esp-idf/tools/idf.py'\n\tat Object.accessSync (node:fs:246:11)\n\tat t.accessSync (node:electron/js2c/node_init:2:9332)\n\tat ct (<HOMEPATH>/.vscode/extensions/espressif.esp-idf-extension-1.10.2/dist/extension.js:2:1471825)\n\tat Th.value (<HOMEPATH>/.vscode/extensions/espressif.esp-idf-extension-1.10.2/dist/extension.js:2:1569294)\n\tat P.B (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:27:2375)\n\tat P.fire (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:27:2593)\n\tat xB.$onMessage (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:135:90266)\n\tat qy.S (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:29:116244)\n\tat qy.Q (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:29:116024)\n\tat qy.M (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:29:115113)\n\tat qy.L (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:29:114351)\n\tat Th.value (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:29:113015)\n\tat P.B (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:27:2375)\n\tat P.fire (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:27:2593)\n\tat Gn.fire (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:29:9459)\n\tat Th.value (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:190:13324)\n\tat P.B (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:27:2375)\n\tat P.fire (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:27:2593)\n\tat Gn.fire (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:29:9459)\n\tat MessagePortMain.<anonymous> (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:190:11616)\n\tat MessagePortMain.emit (node:events:518:28)\n\tat MessagePortMain._internalPort.emit (node:electron/js2c/utility_init:2:2949)","category":"src utils canAccessFile","level":"error","timestamp":"2025-09-13T22:32:38.366Z"}
{"command":"python","message":"spawn python ENOENT","stack":"Error: spawn python ENOENT\n\tat ChildProcess._handle.onexit (node:internal/child_process:285:19)\n\tat onErrorNT (node:internal/child_process:483:16)\n\tat process.processTicksAndRejections (node:internal/process/task_queues:82:21)","category":"utils execChildProcess","level":"error","timestamp":"2025-09-13T22:34:27.361Z"}
{"message":"spawn python ENOENT","stack":"Error: spawn python ENOENT\n\tat ChildProcess._handle.onexit (node:internal/child_process:285:19)\n\tat onErrorNT (node:internal/child_process:483:16)\n\tat process.processTicksAndRejections (node:internal/process/task_queues:82:21)","category":"extension DoctorCommand","level":"error","timestamp":"2025-09-13T22:34:27.361Z"}
{"user":true,"level":"warn","message":"Extension configuration report has been copied to clipboard with errors","timestamp":"2025-09-13T22:34:27.361Z"}
--------------------------------------------------------------------------------------------------------------------------------------------

Extension

No such file or directory

Description

Extension fails on setup because it cannot find the file /opt/esp-idf/tools/idf.py that exists.

ESP-IDF was installed by the system through the esp-idf package from the Arch User Repository.

This file does exist and I can run idf.py via the command line:

$ ls -l /opt/esp-idf/tools/idf.py
-rwxr-xr-x 1 root root 38086 Sep 13 14:40 /opt/esp-idf/tools/idf.py
$ . /opt/esp-idf/export.sh
Checking "python3" ...
Python 3.13.7
"python3" has been detected
Activating ESP-IDF 5.5
Setting IDF_PATH to '/opt/esp-idf'.
* Checking python version ... 3.13.7
* Checking python dependencies ... OK
* Deactivating the current ESP-IDF environment (if any) ... OK
* Establishing a new ESP-IDF environment ... OK
* Identifying shell ... bash
* Detecting outdated tools in system ... OK - no outdated tools found
* Shell completion ... Autocompletion code generated

Done! You can now compile ESP-IDF projects.
Go to the project directory and run:

  idf.py build
[tower@ws-mnj01 ~]$ idf.py help
Executing action: help
Usage: idf.py [OPTIONS] COMMAND1 [ARGS]... [COMMAND2 [ARGS]...]...

...

This message from ESP-IDF doctor likely points to the root cause:

{"message":"Cannot access filePath: /opt/esp-idf/tools/idf.py","stack":"Error: EACCES: permission denied, access '/opt/esp-idf/tools/idf.py'\n\tat Object.accessSync (node:fs:246:11)\n\tat t.accessSync (node:electron/js2c/node_init:2:9332)\n\tat ct (<HOMEPATH>/.vscode/extensions/espressif.esp-idf-extension-1.10.2/dist/extension.js:2:1471825)\n\tat Th.value (<HOMEPATH>/.vscode/extensions/espressif.esp-idf-extension-1.10.2/dist/extension.js:2:1569294)\n\tat P.B (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:27:2375)\n\tat P.fire (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:27:2593)\n\tat xB.$onMessage (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:135:90266)\n\tat qy.S (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:29:116244)\n\tat qy.Q (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:29:116024)\n\tat qy.M (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:29:115113)\n\tat qy.L (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:29:114351)\n\tat Th.value (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:29:113015)\n\tat P.B (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:27:2375)\n\tat P.fire (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:27:2593)\n\tat Gn.fire (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:29:9459)\n\tat Th.value (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:190:13324)\n\tat P.B (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:27:2375)\n\tat P.fire (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:27:2593)\n\tat Gn.fire (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:29:9459)\n\tat MessagePortMain.<anonymous> (file:///opt/visual-studio-code/resources/app/out/vs/workbench/api/node/extensionHostProcess.js:190:11616)\n\tat MessagePortMain.emit (node:events:518:28)\n\tat MessagePortMain._internalPort.emit (node:electron/js2c/utility_init:2:2949)","category":"src utils canAccessFile","level":"error","timestamp":"2025-09-13T22:32:38.366Z"}

Because my OS installed ESP-IDF for me, I have read-only permissions to its files. This extension is possibly trying to access it with read/write permissions instead, prompting the EACCES error code.

Debug Message

n/a, this issue is outside the scope of any project

Other Steps to Reproduce

No response

I have checked existing issues, online documentation and the Troubleshooting Guide

  • I confirm I have checked existing issues, online documentation and Troubleshooting guide.

Metadata

Metadata

Assignees

Labels

bug-reportBug Report from users on Github (don't use this tag manually, its supposed to be used via the issue)

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions