Describe the Bug
When using zsh as the default shell, Cursor AppImage ignores configured Python virtual environments and always uses its bundled Python interpreter (/opt/cursor.appimage).
Switching to bash makes Cursor correctly respect the venv.
This suggests a Cursor vs zsh compatibility issue on Linux.
Steps to Reproduce
-
Create a new project folder and set up a venv:
python3 -m venv .venv source .venv/bin/activate pip install requests -
Create
.vscode/settings.json:{ "python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python" } -
Open the folder in Cursor (AppImage build) with zsh as the integrated shell.
-
Run inside Cursor:
import sys, pathlib print("Executable:", sys.executable) print("In venv?", ".venv" in pathlib.Path(sys.executable).parts) print("sys.path:", sys.path) -
Observe that
sys.executableis/opt/cursor.appimage, not the.venvinterpreter. -
Switch integrated shell to bash and repeat step 4:
sys.executablenow correctly points to.venv/bin/python.
Expected Behavior
Cursor should respect "python.defaultInterpreterPath" and use the project’s .venv/bin/python, regardless of the integrated shell.
Actual Behavior
- With zsh: Cursor always uses
/opt/cursor.appimageand ignores.venv. - With bash: Cursor correctly uses
.venv/bin/python. - Integrated terminal activates
.venv, but code execution still runs via the bundled Python.
Operating System
Linux
Current Cursor Version (Menu → About Cursor → Copy)
- Cursor: 1.2.4
- VSCode Core: 1.99.3 (commit a8e95743c5268be73767c46944a71f4465d05c90)
- Electron: 34.5.1
- Chromium: 132.0.6834.210
- Node.js: 20.19.0
- V8: 13.2.152.41-electron.0
- OS: Ubuntu 24.04.2 LTS x64 (Linux 6.14.0-24-generic)
- Python in project venv: 3.12.3
- Default shell: zsh (
/usr/bin/zsh)
Additional Information
Quick Diagnostic Section
Run inside Cursor (zsh):
import sys, pathlib, os
print("Executable:", sys.executable)
print("In venv?", ".venv" in pathlib.Path(sys.executable).parts)
print("PATH:", os.environ.get("PATH"))
print("VIRTUAL_ENV:", os.environ.get("VIRTUAL_ENV"))
Then repeat in bash.
Difference: with bash, sys.executable uses .venv/bin/python; with zsh, it falls back to /opt/cursor.appimage.
Workarounds Tried
-
Setting
"python.defaultInterpreterPath"and"python.venvPath". -
Enabling
"python.terminal.activateEnvironment": true. -
Activating
.venvmanually in integrated terminal. -
Restarting Cursor and OS.
-
Hardcoding venv path in
.vscode/settings.json. -
Running Cursor with
PATHmodified to include.venv/binfirst. -
Verified venv works correctly in external terminal (
sys.executablepoints to.venv/bin/python). -
Changing integrated shell:
- zsh: always uses
/opt/cursor.appimage. - bash: correctly uses
.venv/bin/python.
- zsh: always uses
Possible Cause / Developer Notes
-
Likely a zsh-related environment inheritance issue:
- Cursor’s AppImage doesn’t correctly pick up
PATHorVIRTUAL_ENVunder zsh. - With bash, environment propagation works as expected.
- Cursor’s AppImage doesn’t correctly pick up
-
Could be related to how AppImage launches subprocesses or differences in initialization between bash and zsh.
Impact
- Prevents using project-specific Python packages in zsh.
- Makes Cursor inconsistent with both bash and standard VS Code behavior.
- Requires either changing shell to bash or patching Cursor startup scripts to work around.
Does this stop you from using Cursor
Yes - Cursor is unusable