wsl2 で homebrew ベースで python 実行環境 (by pyenv) を揃える最小手順
こんにちは
WindowsでのPython環境導入は多数ありすぎて迷いませんか。私は迷いました。そこでタイトル通り、wsl2 内の homebrew ベースで python, R 環境 を揃える最小手順のメモを残すこととしました。手順が再現しない等の場合はコメントにてやりとりできれば嬉しい限りです。
この記事を書いた背景
- Windows環境でPythonを動かすためには、さまざまな方法がある(参考: Windows 10 での Python 汚染に気を付けよう )
- 自分メインの開発環境は pyenv & poetry with docker on Mac なので、これに追随するためには WSL2 環境一択
- 趣味として Ubuntu 上で homebrew をフル活用していきたい
実行環境
- WSL2のインストール、およびそのイメージの Ubuntuのインストール、 wsl conf などの設定は microsoft のページを参照し、設定済みとする
- なお
Ubuntu 20.04
の前提です。Windows 11 ビルド 22000 以上 での GUI (vGPU) の設定こちら。
- なお
- 以下は Windows Terminal 上の Ubuntu-20.04 で実行
30秒で結論
ハマりポイントは、デフォルトでは gcc
を ubuntu 側のものを認識してしまうので、明示的に brew側の gcc-11
を指定することが必要だった。
Homebrew (Linuxbrew) の準備
- 公式インストール通り
- Ubuntu & bash なので .profile を使用する
sudo apt update && sudo apt upgrade
# 公式では `sudo apt-get install build-essential procps curl file git` だったが、 `build-essential` だけで問題なかった
sudo apt-get install build-essential
# install homebrew, taking a few minutes
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# add to profile
echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"' >> ~/.profile
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
python install
- brewで導入したpyenvを経由してpythonをインストールする
pyenv install by linuxbrew
brew install gcc # for gcc-11
brew install sqlite
N.B. Linuxbrew で build に必要なライブラリーは sqlite 以外はインストール済みだった
Linuxbrew:
brew install bzip2 libffi libxml2 libxmlsec1 openssl readline sqlite xz zlib
brew install pyenv
次に pyenv の環境変数の設定だが、 WSL2 の Ubuntu bash の設定
に従い次を実行する。
# For Bash:
# If your ~/.profile sources ~/.bashrc (Debian, Ubuntu, Mint):
# the sed invocation inserts the lines at the start of the file
# after any initial comment lines
sed -Ei -e '/^([^#]|$)/ {a \
export PYENV_ROOT="$HOME/.pyenv"
a \
export PATH="$PYENV_ROOT/bin:$PATH"
a \
' -e ':a' -e '$!{n;ba};}' ~/.profile
echo 'eval "$(pyenv init --path)"' >>~/.profile
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
brew doctor
での warning を避けるため次を設定する
cat <<EOF >> ~/.bash_alias
# avoid brew doctor's warning
alias brew='env PATH="${PATH//$(pyenv root)\/shims:/}" brew'
EOF
install python by pyenv
# brew 側の gcc, g++ を指定する必要がある
CC=gcc-11 CXX=g++-11 pyenv install 3.9.11
# 主要な前処理系 package のインストール
pip install ipython pandas polars duckdb vaex
install R by brew
mkdir -p ~/.R
cat <<EOF > ~/.R/Makevars
CC=gcc-11
CXX=g++-11
CXX98=g++-11
CXX11=g++-11
CXX14=g++-11
EOF
brew install r
r 立ち上げ後に package 導入
install.packages("tidyverse")
# 以下は事前に `brew install apache-arrow` が必要
install.packages("arrow")
install.packages("duckdb")
なお、Rのいくつかのpackageは systemd が PID1 である前提なことに注意。対応するには
genie ではなく distrod がおススメ(が、この2か月間くらいupdateないのでちょい将来性不明)。
r のデフォルトREPLは使いづらいので radian を入れる
pip install radian
その他
brew install source-highlight
cat <<EOF >> ~/.bashrc
# source-highlight by linuxbrew for less
export LESSOPEN="|/usr/bin/lesspipe | /home/linuxbrew/.linuxbrew/bin/src-hilite-lesspipe.sh %s"
export LESS="-X -R"
EOF
まとめ
とりあえずインストール(コンパイル)では brew の gcc-11, g++-11 を使う指定を忘れずに。
以上
Author And Source
この問題について(wsl2 で homebrew ベースで python 実行環境 (by pyenv) を揃える最小手順), 我々は、より多くの情報をここで見つけました https://qiita.com/hkzm/items/d264946e1d5a52e5165a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .