Summary
It's possible to configure macOS terminal to automatically start using x86 emulation. You can pair this with 2 miniconda installs, one for each architecture, and a custom .condarc profile to auto-launch the appropriate version based on the current profile/architecture.
Please note: If you use MacPorts, you only need the 1 installation; there is no separate versions for arm/x86. Just be aware that when calling the port command when in x86, it can overwrite an existing ARM port. I do not believe it installs these in differnet locations based on the architecture. Use with caution. If desired, 2 versions of homebrew can be installed and variables set for each within your .zshrc file.
Environment
- macOS
- Apple ARM Processors
- Anaconda/Miniconda/Conda
Directions
Creating Profiles
- Open Terminal
- Click Terminal in the top menu bar and select Settings
- Select the Profiles option at the top of the resulting window
- Add a new profile (or modify the default) and name it ARM
- Add another profile and label it x86
- In the "Window" tab, set the title to something like "x86 Terminal" and uncheck all boxes under the title section (if desired)
- Switch to the Shell tab and select the Run Command checkbox
- Enter the following in the input field:
arch -x86_64 zsh
- Customize the colors or other settings as desired to help visually differentiate between shells
A Note on Install Locations
While we'll be installing Conda at the user level, other installs may be system wide, such as homebrew or macports. In general, the install path based on architecture is as follows:
/usr/local for x86
/opt/local for arm
e.g. /usr/local/brew for x86 homebrew, /opt/local/brew for arm
Installing Conda for Each Architecture
Grab the latest version of Miniconda for the corresponding architecture, then within each profile, run the corresponding install script:
ARM
Please note: the very last prompt in the install script about initializing conda should be answered with "no".
$ curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-arm64.sh
$ chmod ug+x Miniconda3-latest-MacOSX-arm64.sh
$ ./Miniconda3-latest-MacOSX-arm64.sh
When prompted for install location: $HOME/miniconda3
When prompted to initialize: no
x86
Please note: the very last prompt in the install script about initializing conda should be answered with "no".
$ curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-x86_64.sh
$ chmod ug+x Miniconda3-latest-MacOSX-x86_64.sh
$ ./Miniconda3-latest-MacOSX-x86_64.sh
When prompted for install location: $HOME/miniconda3_x86
When prompted to initialize: no
Configuring conda init
We need to tell conda which version to activate based on the current shell architecture. To do this, we create a custom .condarc file and add to the .zshrc file.
Create the .condarc file
$ cd
$ mkdir .custrc
$ vim .custrc/.condarc
Please note: make sure to change the conda_path_m1 and conda_path_intel in the text below if you did not use the path's as outlined previously:
init_conda() {
# >>> conda initialize >>>
conda_path_m1="$HOME/miniconda3"
__conda_setup="$('${conda_path_m1}/bin/conda' 'shell.zsh' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
eval "$__conda_setup"
else
if [ -f "${conda_path_m1}/etc/profile.d/conda.sh" ]; then
. "${conda_path_m1}/etc/profile.d/conda.sh"
else
export PATH="${conda_path_m1}/bin:$PATH"
fi
fi
unset __conda_setup
# <<< conda initialize <<<
}
init_conda_intel() {
# >>> conda initialize >>>
conda_path_intel="$HOME/miniconda3_x86"
__conda_setup="$('${conda_path_intel}/bin/conda' 'shell.zsh' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
eval "$__conda_setup"
else
if [ -f "${conda_path_intel}/etc/profile.d/conda.sh" ]; then
. "${conda_path_intel}/etc/profile.d/conda.sh"
else
export PATH="${conda_path_intel}/bin:$PATH"
fi
fi
unset __conda_setup
# <<< conda initialize <<<
}
Add to .zshrc
$ cd
$ vim .zshrc
# init conda based on arch
source ~/.custrc/.condarc
if [[ $(uname -m) == 'x86_64' ]]; then
init_conda_intel
echo "conda x86_64 is activated"
# uncomment following line if using homebrew
# eval "$(/usr/local/bin/brew shellenv)"
else
init_conda
echo "conda m1 is activated"
# uncomment following line if using homebrew
# eval "$(/opt/homebrew/bin/brew shellenv)"
fi
All that should be left to do from here is source the .zshrc file or open up a new terminal window using either the arm or x86 profile.