WSL2, Windows, Python and Node: resolving some conflicts
Fine tuning of $PATH makes life easier
Lately I’ve been working with Python and Node both on Windows on WSL (WSL2 specifically) and I noticed a certain number of inconveniences with WSL when having Python and Node installed on both systems. For example, some node packages were found when running node on WSL, even if I never installed them there. When that happened, the performances were horrible.
The reason is that, by default, Windows injects Windows path environment variable into WSL path.
For Node I was able to solve almost any problem using nvm, but with Python I had more challenges, so I decided to solve the problem right from at source.
First, tell WSL not to automatically add windows path to WSL. This can be done via
wsl.conf file, as documented in the Advanced settings configuration in WSL.
Edit (or create if not already existing) the file:
sudo nano /etc/wsl.conf
and then add the interop setting:
appendWindowsPath = false
Then close all WSL windows, open a Powershell or Command prompt and make sure WSL subsystem has shut down:
Now you can re-open WSL session and check that the path doesn’t automatically contain Windows paths:
echo $PATH | tr ":" "\n"
The second — and last — step is to manually add path to the Windows tools you want to use with WSL too, for example VS Code. I’m using ZSH so I needed to update the
.zshrc file and add VS Code path:
export PATH="$PATH:/mnt/c/Users/damauri/AppData/Local/Programs/Microsoft VS Code/bin"
Done. No more conflicts or slow performances, but I can still use Windows tool on WSL. Perfect!