【環境構築】Ubuntuでもpyenvでpythonを扱いたい
概要
普段はmacを使用していてpythonはhomebrewによってインストールしたpyenvを用いて扱っている。macでpythonをインストールする記事でも大抵はpyenvを紹介している。
windowsのPCからmacで作成したソースコードを操作することもしばしばあるので、同様の操作によって扱えるようにするためにpyenvをインストールする。
windowsでUbuntu(WSL2)を使えるようにする手順は以下記事の下部に書いた。
手順
説明を省いた手順。手順の詳細が必要な場合はここから。
# install pyenv $ curl https://pyenv.run | bash $ echo 'export PATH="$HOME/.pyenv/bin:$PATH"' >> ~/.bash_profile $ echo 'eval "$(pyenv init --path)"' >> ~/.bash_profile $ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile $ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile # WSL2でインストールしたUbuntuを使用している場合は、curlではなくwgetを使用するようにパッケージのソースコードに手を加える $ vi ~/.plugins/python-build/bin/python-build detect_http_client() { local client # for client in aria2c curl wget; do この行をコメントアウト for client in aria2c wget curl; do この行を追加 if type "$client" &>/dev/null; then echo "$client" return fi done echo "error: please install \`aria2c\`, \`curl\`, or \`wget\` and try again" >&2 return 1 } # pyenvの依存関係を満足させる $ sudo apt-get update; sudo apt-get install make build-essential libssl-dev zlib1g-dev \ libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \ libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev # install python by pyenv $ pyenv install 3.9.9 $ pyenv local 3.9.9
pyenvをインストール
gitに公開されているので手順に従うのみ。
https://github.com/pyenv/pyenv#installation
Ubuntuなので、Automatic installerもしくはBasic GitHub Checkoutから好きな方を選べばよいと思う。僕はAutomatic installerにした。
https://github.com/pyenv/pyenv-installer
$ curl https://pyenv.run | bash
下記を.bashrc(.zshrc)に追記。
pyenvの使い方はこちらを参照。
local, global, install, versions 辺りをよく使う。
pyenv install x.x.xを実行したときのエラー対応
pyenv install x.x.xを実行するとエラーが出て失敗するので以下の対応をしておく。
1つ目(おそらくWSL2でインストールしたUbuntuを使用している場合のみ)
WSL2でインストールしたUbuntuを使用している場合、pyenvでpythonをインストールする際のcurlが悪さをして上手くいかない。(以下のようにtimeoutして失敗します。)
wgetであれば通るということなので、pyenvのソースコードの一部差し換えを行う。
pyenvがインストールされた~/.pyenv内をdetect_http_clientで検索すると、plugins/python-build/bin/python-buildに該当箇所があるとわかるので、以下のように差し換える。
こちらが参考になりました。WSLでのUbuntuに関する他の対応も書かれているので参考になる人が多そうです。
2つ目(依存パッケージをインストール)
次に依存関係が満たされていないとmake: command not foundのように失敗するのでmake等をインストールするが、pyenvが依存するパッケージは公式に明記されているのでこれに従ってインストールする。
$ sudo apt-get update; sudo apt-get install make build-essential libssl-dev zlib1g-dev \ libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \ libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
pythonをインストール
最後にpyenvを使ってpythonをインストールする。インストール可能なpythonのバージョンはpyenv install --listで確認できる。
$ pyenv versions * system (set by /home/username/.pyenv/version) $ pyenv install 3.9.9 Downloading Python-3.9.9.tar.xz... -> https://www.python.org/ftp/python/3.9.9/Python-3.9.9.tar.xz Installing Python-3.9.9... Installed Python-3.9.9 to /home/username/.pyenv/versions/3.9.9 $ pyenv versions * system (set by /home/username/.pyenv/version) 3.9.9 $ pyenv local 3.9.9 $ pyenv versions system * 3.9.9 (set by /mnt/c/Users/username/Program/salesman/.python-version) $ python -V Python 3.9.9
$ pip -V
pip 21.2.4 from /home/username/.pyenv/versions/3.9.9/lib/python3.9/site-packages/pip (python 3.9)
これにて完了。