Open jonashaag opened 10 months ago
I found a solution to automatically activate an environment specified by an environment.yml
file through micromamba
in VSCode's integrated terminal.
First, turn off the automatic activation of conda envs: https://github.com/prefix-dev/pixi/discussions/415#discussioncomment-7393489
I then used this solution from Stack Overflow to execute a custom command every time an integrated terminal is launched. The answer suggests to include a conditional execution in your zsh/bash
setup.
My updated .zshrc
:
# This function uses micromamba to activate an environment that is specified in `environment.yml`.
function ma {
if [ -f environment.yml ]; then
env_name=$(cat environment.yml | yq .name)
if [ "$env_name" = "null" ] || [ -z "$env_name" ]; then
echo "Error: No environment name defined."
return 1
else
mm activate "$env_name"
fi
else
echo "Error: 'environment.yml' file not found."
return 1
fi
}
alias activate_micromamba_env='ma' # better output when launching VSCode's integrated terminal
# ...
# Used in VSCode's integrated terminal
if [[ -n $ZSH_INIT_COMMAND ]]; then
echo "Running: $ZSH_INIT_COMMAND"
eval "$ZSH_INIT_COMMAND"
fi
I then added the following configuration to user settings in VSCode:
{
# ...
"terminal.integrated.env.osx": {
"ZSH_INIT_COMMAND": "activate_micromamba_env"
},
}
When launching a new integrated terminal, the variable is set and executed (as specified in my .zshrc
):
Running: activate_micromamba_env
(mytestenv) -------------------------------------------------------------------------------------------------------------------
~/Documents/Q/testproject »
When I set python.terminal.activateEnvironment
to be true
, I cannot open the terminal correctly. How do you solve this?
# >>>>>>>>>>>>>>>>>>>>>> ERROR REPORT <<<<<<<<<<<<<<<<<<<<<<
Traceback (most recent call last):
File "/Users/mini/mambaforge/lib/python3.10/site-packages/conda/exceptions.py", line 1118, in __call__
return func(*args, **kwargs)
File "/Users/mini/mambaforge/lib/python3.10/site-packages/conda/cli/main.py", line 94, in main_sourced
print(activator.execute(), end="")
File "/Users/mini/mambaforge/lib/python3.10/site-packages/conda/activate.py", line 171, in execute
return getattr(self, self.command)()
File "/Users/mini/mambaforge/lib/python3.10/site-packages/conda/activate.py", line 143, in activate
builder_result = self.build_activate(self.env_name_or_prefix)
File "/Users/mini/mambaforge/lib/python3.10/site-packages/conda/activate.py", line 304, in build_activate
return self._build_activate_stack(env_name_or_prefix, False)
File "/Users/mini/mambaforge/lib/python3.10/site-packages/conda/activate.py", line 384, in _build_activate_stack
deactivate_scripts = self._get_deactivate_scripts(old_conda_prefix)
File "/Users/mini/mambaforge/lib/python3.10/site-packages/conda/activate.py", line 695, in _get_deactivate_scripts
entry.path for entry in os.scandir(join(prefix, "etc", "conda", "deactivate.d"))
File "/Users/mini/mambaforge/lib/python3.10/posixpath.py", line 76, in join
a = os.fspath(a)
TypeError: expected str, bytes or os.PathLike object, not NoneType
`$ /Users/mini/mambaforge/bin/conda shell.posix activate py310`
environment variables:
CIO_TEST=<not set>
CONDA_EXE=/Users/mini/mambaforge/bin/conda
CONDA_PREFIX_2=/Users/mini/mambaforge/envs/py310
CONDA_PREFIX_3=/Users/mini/mambaforge
CONDA_PROMPT_MODIFIER=
CONDA_PYTHON_EXE=/Users/mini/mambaforge/bin/python
CONDA_ROOT=/Users/mini/mambaforge
CONDA_SHLVL=4
CURL_CA_BUNDLE=<not set>
INFOPATH=/opt/homebrew/share/info:
LD_PRELOAD=<not set>
MANPATH=/opt/homebrew/share/man:/usr/share/man:/usr/local/share/man:/opt/homeb
rew/share/man::
PATH=/opt/homebrew/opt/llvm/bin:/Users/mini/.local/share/zinit/plugins/star
ship---starship:/Users/mini/.local/share/zinit/polaris/bin:/opt/homebr
ew/bin:/opt/homebrew/sbin:/usr/local/bin:/System/Cryptexes/App/usr/bin
:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/share/dotnet:/var/run/com.ap
ple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/co
m.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.
apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/
Users/mini/.cargo/bin:/Users/mini/.orbstack/bin
REQUESTS_CA_BUNDLE=<not set>
SSL_CERT_FILE=<not set>
active environment : None
shell level : 4
user config file : /Users/mini/.condarc
populated config files : /Users/mini/.condarc
conda version : 22.11.1
conda-build version : not installed
python version : 3.10.9.final.0
virtual packages : __archspec=1=arm64
__osx=13.6=0
__unix=0=0
base environment : /Users/mini/mambaforge (writable)
conda av data dir : /Users/mini/mambaforge/etc/conda
conda av metadata url : None
channel URLs : https://repo.anaconda.com/pkgs/main/osx-arm64
https://repo.anaconda.com/pkgs/main/noarch
https://repo.anaconda.com/pkgs/r/osx-arm64
https://repo.anaconda.com/pkgs/r/noarch
package cache : /Users/mini/mambaforge/pkgs
/Users/mini/.conda/pkgs
envs directories : /Users/mini/mambaforge/envs
/Users/mini/.conda/envs
platform : osx-arm64
user-agent : conda/22.11.1 requests/2.28.2 CPython/3.10.9 Darwin/22.6.0 OSX/13.6
UID:GID : 501:20
netrc file : None
offline mode : False
An unexpected error has occurred. Conda has prepared the above report.
Here's error when I use VSCode to open a shell on other volumes (expect the root) on macOS:
# >>>>>>>>>>>>>>>>>>>>>> ERROR REPORT <<<<<<<<<<<<<<<<<<<<<<
Traceback (most recent call last):
File "/opt/homebrew/Caskroom/miniforge/base/lib/python3.10/site-packages/conda/exception_handler.py", line 17, in __call__
return func(*args, **kwargs)
File "/opt/homebrew/Caskroom/miniforge/base/lib/python3.10/site-packages/conda/cli/main.py", line 110, in main_sourced
print(activator.execute(), end="")
File "/opt/homebrew/Caskroom/miniforge/base/lib/python3.10/site-packages/conda/activate.py", line 203, in execute
return getattr(self, self.command)()
File "/opt/homebrew/Caskroom/miniforge/base/lib/python3.10/site-packages/conda/activate.py", line 168, in activate
builder_result = self.build_activate(self.env_name_or_prefix)
File "/opt/homebrew/Caskroom/miniforge/base/lib/python3.10/site-packages/conda/activate.py", line 346, in build_activate
return self._build_activate_stack(env_name_or_prefix, False)
File "/opt/homebrew/Caskroom/miniforge/base/lib/python3.10/site-packages/conda/activate.py", line 436, in _build_activate_stack
deactivate_scripts = self._get_deactivate_scripts(old_conda_prefix)
File "/opt/homebrew/Caskroom/miniforge/base/lib/python3.10/site-packages/conda/activate.py", line 768, in _get_deactivate_scripts
for entry in os.scandir(join(prefix, "etc", "conda", "deactivate.d"))
File "/opt/homebrew/Caskroom/miniforge/base/lib/python3.10/posixpath.py", line 76, in join
a = os.fspath(a)
TypeError: expected str, bytes or os.PathLike object, not NoneType
`$ /opt/homebrew/Caskroom/miniforge/base/bin/conda shell.posix activate base`
environment variables:
CIO_TEST=<not set>
CONDA_EXE=/opt/homebrew/Caskroom/miniforge/base/bin/conda
CONDA_PREFIX_2=/opt/envs/main
CONDA_PREFIX_3=/opt/homebrew/Caskroom/miniforge/base
CONDA_PROMPT_MODIFIER=
CONDA_PYTHON_EXE=/opt/homebrew/Caskroom/miniforge/base/bin/python
CONDA_ROOT=/opt/homebrew/Caskroom/miniforge/base
CONDA_SHLVL=4
CURL_CA_BUNDLE=<not set>
INFOPATH=/opt/homebrew/share/info:
LD_PRELOAD=<not set>
MANPATH=/opt/homebrew/share/man:/usr/share/man:/usr/local/share/man:/Applicati
ons/Wireshark.app/Contents/Resources/share/man:/opt/homebrew/share/man
::
PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/System/Cryptexes/
App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.
cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.secur
ity.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.securit
y.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/Library/Apple
/usr/bin:/Applications/Wireshark.app/Contents/MacOS:/Applications/VMwa
re Fusion.app/Contents/Public:/usr/local/share/dotnet:~/.dotnet/tools:
/Users/gztime/.cargo/bin:/Users/gztime/.orbstack/bin
REQUESTS_CA_BUNDLE=<not set>
SSL_CERT_FILE=<not set>
active environment : None
shell level : 4
user config file : /Users/gztime/.condarc
populated config files : /opt/homebrew/Caskroom/miniforge/base/.condarc
/Users/gztime/.condarc
conda version : 24.1.2
conda-build version : not installed
python version : 3.10.14.final.0
solver : libmamba (default)
virtual packages : __archspec=1=m1
__conda=24.1.2=0
__osx=14.4.1=0
__unix=0=0
base environment : /opt/homebrew/Caskroom/miniforge/base (writable)
conda av data dir : /opt/homebrew/Caskroom/miniforge/base/etc/conda
conda av metadata url : None
channel URLs : https://conda.anaconda.org/conda-forge/osx-arm64
https://conda.anaconda.org/conda-forge/noarch
https://repo.anaconda.com/pkgs/main/osx-arm64
https://repo.anaconda.com/pkgs/main/noarch
https://repo.anaconda.com/pkgs/r/osx-arm64
https://repo.anaconda.com/pkgs/r/noarch
package cache : /Volumes/GZDisk/Envs/pkgs
/opt/homebrew/Caskroom/miniforge/pkgs
envs directories : /opt/envs
/Volumes/GZDisk/Envs
/opt/homebrew/Caskroom/miniforge/envs
/opt/homebrew/Caskroom/miniforge/base/envs
/Users/gztime/.conda/envs
platform : osx-arm64
user-agent : conda/24.1.2 requests/2.31.0 CPython/3.10.14 Darwin/23.4.0 OSX/14.4.1 solver/libmamba conda-libmamba-solver/24.1.0 libmambapy/1.5.8
UID:GID : 501:20
netrc file : None
offline mode : False
An unexpected error has occurred. Conda has prepared the above report.
If you suspect this error is being caused by a malfunctioning plugin,
consider using the --no-plugins option to turn off plugins.
Example: conda --no-plugins install <package>
Alternatively, you can set the CONDA_NO_PLUGINS environment variable on
the command line to run the command without plugins enabled.
Example: CONDA_NO_PLUGINS=true conda install <package>
Timeout reached. No report sent.
Let's collect some setup instructions here. I want to make a proper docs page from that