mamba-org / mamba

The Fast Cross-Platform Package Manager
https://mamba.readthedocs.io
BSD 3-Clause "New" or "Revised" License
6.85k stars 353 forks source link

VS Code and PyCharm integration best practices #3052

Open jonashaag opened 10 months ago

jonashaag commented 10 months ago

Let's collect some setup instructions here. I want to make a proper docs page from that

ThomasMarwitzQC commented 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 »  
yanxiang-wang commented 7 months ago

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.
GZTimeWalker commented 6 months ago

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.