Making Homebrew works with Anaconda in 2023

How to setup Homebrew to play nicely with Anaconda

Sasiwut Chaiyadecha
4 min readJan 4, 2023
Homebrew works with Anaconda in 2023 install anaconda using homebrew brew install cask jupyter notebook python in mac macos setup python packages manager macos packages manager

สำหรับ Mac user ปฎิเสธไม่ได้เลยว่าต้องใช้งาน Homebrew ในการเป็น Packages manager เหมือนเป็นการติดปีกให้เครื่อง Mac ที่ใช้งานง่ายอยู่แล้ว ให้ง่ายขึ้นไปอีกขั้น แต่สำหรับ Data scientist ทั้งหลายอาจเจอปัญหาอยู่บ้าง เพราะจำเป็นต้องใช้งาน Packages manager สำหรับ Python ในการจัดการ Environments หรือ Dependencies ต่าง ๆ

ปัญหาที่เกิดขึ้นคือ Homebrew และ Anaconda ทำงานด้วยกันไม่ค่อยลงรอยเท่าไหร่ ถึงขนาดที่มีแจ้งเตือนว่าอาจเป็น Bug เกิดขึ้นเมื่อใช้งานร่วมกัน Blog ตอนนี้เลยเสนอเป็นวิธีที่ทำให้ทั้ง 2 Packages managers นี้ สามารถทำงานร่วมกันได้

Homebrew works with Anaconda in 2023 install anaconda using homebrew brew install cask jupyter notebook python in mac macos setup python packages manager macos packages manager

Python packages manager

เคยเขียน Blog ที่เป็นเนื้อหาแบบนี้มาแล้ว โดยก่อนหน้านี้หลีกเลี่ยงการใช้ Anaconda เป็น Packages manager และใช้ Homebrew ทำงานเพียงอย่างเดียว แต่เมื่อใช้งานไปสักพักแล้วพบว่า การใช้ Homebrew สำหรับจัดการ Environments หรือ Dependencies ของ Python หรือ Data science project มันไม่สะดวกเลย

เนื้อหาที่เคยเขียนไว้ก่อนหน้านี้คือ การใช้ Homebrew ติดตั้ง Python library ที่มีชื่อว่า virtualenv เพื่อสร้างเป็น Virtual environment จากนั้นค่อย ๆ ติดตั้ง Library สำหรับการทำงานเป็นโปรเจค ๆ ไป ถือว่าเป็นวิธีที่ไม่ได้แย่มาก แต่การ Maintain ค่อนข้างลำบาก แต่ Link ด้านล่าง ก็มีเนื้อหาอื่นที่เป็นประโยชน์ เช่น การติดตั้ง Homebrew รวมถึงการ Config ค่าต่าง ๆ สามารถอ่านดูเพิ่มเติมได้เช่นกัน

Anaconda

Homebrew works with Anaconda in 2023 install anaconda using homebrew brew install cask jupyter notebook python in mac macos setup python packages manager macos packages manager

กลับมาที่เรื่องของ Anaconda มาถึงปี 2023 นี้เชื่อว่าคงไม่มีใครไม่รู้จัก Packages manager เจ้านี้แล้ว เพราะเป็นเจ้าที่โด่งดังที่สุดในสายงาน Data science แล้ว ข้อดีหรือจุดแข็งของ Anaconda คือการรวม Libraries ที่จำเป็นสำหรับ Data science project ไว้อย่างครบถ้วน (บางคนบอกว่าเยอะเกินไป) รวมไปถึงระบบการจัดการ Maintain dependencies ต่าง ๆ ก็สามารถทำได้ยอดเยี่ยม

Anaconda มี Command conda ที่เอาไว้ใช้จัดการสิ่งต่าง ๆ ใน Environments ไม่ว่าจะเป็นการสร้าง Environment ใหม่ การติดตั้ง Library ที่รองรับทั้ง pip install และ conda install รวมไปถึงการอัพเดต Dependencies ต่าง ๆ ที่สามารถทำได้อย่างสะดวกรวดเร็วด้วย conda update --all เป็นต้น Blog ตอนนี้ไม่ได้ต้องการนำเสนอเกี่ยวกับการใช้งาน Anaconda แต่หากต้องการศึกษาเพิ่มเติม สามารถดูได้ที่ Cheat sheet เพิ่มเติม

Homebrew works with Anaconda in 2023 install anaconda using homebrew brew install cask jupyter notebook python in mac macos setup python packages manager macos packages manager

Setup

มาพูดถึงขั้นตอนการทำให้ Homebrew ทำงานร่วมกับ Anaconda ได้สิ่งแรกที่ต้องทำคือตั้งแต่ Homebrew ซึ่งสามารถทำได้ง่าย ๆ ด้วย Shell script คำสั่งเดียว โดยสามารถ Copy command ด้านล่างแล้ว Paste ที่ Prompt ที่ใช้งานอยู่ได้ทันที

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

เมื่อติดตั้งเสร็จ Prompt จะรู้จัก Command ขึ้นมาอีก 1 Command คือ brew ซึ่งเป็น Command ไว้เรียกใช้งานฟังก์ชั่นต่าง ๆ ของ Homebrew 1 ในสิ่งที่ต้องใช้คือ Homebrew-Cask ซึ่งเป็นเหมือนที่รวม Application ต่าง ๆ มากมายของ macOS และ Anaconda ก็ถูกรวมไว้ที่นี่เช่นกัน

Homebrew works with Anaconda in 2023 install anaconda using homebrew brew install cask jupyter notebook python in mac macos setup python packages manager macos packages manager

สามารถค้นหา Anaconda แล้วติดตั้งผ่าน Homebrew Cask ด้วยคำสั่งด้านล่าง

brew install --cask anaconda

ใช้เวลาพักใหญ่ Anaconda จะถูกติดตั้งไว้ในเครื่อง หลังจากนี้ทั้งหมดจะเป็นปัญหาที่เจอ ซึ่งของรวบรวมเขียนไว้ใน Section ด้านล่างทั้งหมดทีเดียว

Fix

หลังจากที่ติดตั้งสมบูรณ์แล้ว macOS จะยังไม่รู้จัก Command conda เช่นเมื่อลองพิมพ์คำสั่ง conda --version ค่าที่ได้ Return เป็น zsh: command not found: conda ซึ่งสามารถแก้ไขได้ด้วยการ Add path เข้าไปใน Profile ที่ใช้งาน

Homebrew works with Anaconda in 2023 install anaconda using homebrew brew install cask jupyter notebook python in mac macos setup python packages manager macos packages manager

สามารถใช้ Build-in editor อย่าง nano ~/.zshrc หรือ vim ~/.zshrc เพิ่ม Add path ของ Anaconda เข้าไป สามารถ Add path ได้ด้วย Code ด้านล่าง

export PATH="/usr/local/anaconda3/bin:$PATH"
Homebrew works with Anaconda in 2023 install anaconda using homebrew brew install cask jupyter notebook python in mac macos setup python packages manager macos packages manager
PATH อาจแตกต่างกันตาม Location ที่ติดตั้ง Anaconda ไว้

จากนั้นให้ Save profile แล้วใช้คำสั่ง source ~/.zshrc เพื่อ Refresh profile หรือปิดแล้วเปิด Prompt ก็ได้เช่นกัน จากนั้นให้ Initial conda command ด้วย conda init zsh (สำหรับ zsh profile) ให้ปิดแล้วเปิด Prompt อีกครั้ง สิ่งที่ได้คือการ Activate conda base environment ใน Terminal prompt

Homebrew works with Anaconda in 2023 install anaconda using homebrew brew install cask jupyter notebook python in mac macos setup python packages manager macos packages manager
สังเกตว่าจะได้ (base) เป็นการบอกว่า ตอนนี้กำลังใช้งาน Anaconda อยู่ไม่ใช่ Homebrew

ถึงตอนนี้ Anaconda สามารถใช้งานได้อย่างสมบูรณ์แล้ว แต่ในทางกลับกันคือเกิดปัญหาขึ้นที่ Homebrew แทน เมื่อทดลองรันคำสั่ง brew doctor จะได้หน้าต่าง Warning ขึ้นมาตามด้านล่าง

Warning: "config" scripts exist outside your system or Homebrew directories.
`./configure` scripts often look for *-config scripts to determine if
software packages are installed, and which additional flags to use when
compiling and linking.

Having additional scripts in your path can confuse software installed via
Homebrew if the config script overrides a system or Homebrew-provided
script of the same name. We found the following "config" scripts:
/usr/local/anaconda3/bin/icu-config
/usr/local/anaconda3/bin/krb5-config
/usr/local/anaconda3/bin/freetype-config
/usr/local/anaconda3/bin/xslt-config
/usr/local/anaconda3/bin/libpng16-config
/usr/local/anaconda3/bin/python3.7-config
/usr/local/anaconda3/bin/libpng-config
/usr/local/anaconda3/bin/xml2-config
/usr/local/anaconda3/bin/python3.7m-config
/usr/local/anaconda3/bin/python3-config
/usr/local/anaconda3/bin/curl-config
/usr/local/anaconda3/bin/ncursesw6-config
/usr/local/anaconda3/bin/pcre-config
/usr/local/anaconda3/bin/nspr-config
/usr/local/anaconda3/bin/ncurses6-config
/usr/local/anaconda3/bin/nss-config

Warning นี้มาจากข้อความที่ Homebrew-Cask ได้เขียนเตือนเอาไว้ โดยที่เป็นการ Config ใน Path ที่มีการเรียกใช้งาน brew สามารถปิด Warning นี้ได้ด้วยการเพิ่ม Code ด้านล่างเข้าใน Profile .zshrc

brew() {
local -a conda_envs
while [ "$CONDA_SHLVL" -gt 0 ]; do
conda_envs=("$CONDA_DEFAULT_ENV" $conda_envs)
conda deactivate
done
command brew $@
local brew_status=$?
for env in $conda_envs; do
conda activate "$env"
done
unset env
return "$brew_status"
}

การทำงานของ Code นี้คือการ Deactivate conda environment เมื่อมีการเรียกใช้งานคำสั่ง brew หลังจากนั้นให้ Activate conda environment ขึ้นใหม่หลังจากที่ brew ทำงานเสร็จสิ้นแล้ว เมื่อเพิ่ม Code เสร็จให้ source ~/.zshrc และปิดแล้วเปิด Terminal prompt ขึ้นใหม่

สิ่งที่เกิดขึ้นตามมาหลังจากเปิด Terminal prompt คือ Conda environment มีการ Auto activate เพื่อเป็นการปิด Conda และใช้ brew เป็น Command หลัก สามารถปิดได้ด้วยคำสั่งด้านล่าง

conda config --set auto_activate_base false

สุดท้ายเมื่อปิด Auto activate conda environment แล้ว หลังจากนี้ถ้ามีการรัน brew doctor ควรจะได้ Return เป็น Your system is ready to brew. ตามรูปด้านล่าง

Homebrew works with Anaconda in 2023 install anaconda using homebrew brew install cask jupyter notebook python in mac macos setup python packages manager macos packages manager

Conclusion

จบแล้ว… สำหรับขั้นตอนการ Setup เพื่อให้ใช้งาน Homebrew ร่วมกับ Anaconda มีหลาย Comment บอกว่าไม่ควรติดตั้ง Anaconda ด้วย install --cask เพราะ Location ในการติดตั้งอาจไม่เหมือนกับ Anaconda installation ปกติ และอาจทำให้เกิดปัญหาเรื่อง Path ขึ้นได้ แต่หลังจากที่ได้ลองทำตามที่นำเสนอไปใน Blog ตอนนี้ ยังไม่พบปัญหาใด ๆ สามารถใช้งานได้ตามปกติ

--

--

Sasiwut Chaiyadecha
Sasiwut Chaiyadecha

No responses yet