えむにわリソース

ITのスキマ的なあれこれを書きます。

WSLのpipenvでpython3.7を使う

Windowsネイティブで動かないpythonプロジェクトを動かすために、
WSLでpythonを導入しましたが、けっこう嵌ったので正常に動く方法をここに記します。

TL;DR

pyenvに全てを委ねよ。さすれば救われん。

WSLの一番痛いポイントは、pipenvがWindowsネイティブのpython.exeを掴みに行って死ぬところです。
これじゃぁ救われねぇ…

2019/12/13追記: pyenv反証記事*1が色々あるので*2、pyenv一択に断言することを辞めます。誰かこの戦争を終わらせてくれ…

セットアップ手順(正常系)

pythonのインストール

まずpythonをインストールします。
※ここは好みの問題ですが、本稿ではpython3.7を導入しています。

sudo apt install python3.7 python3.7-dev
sudo apt install python3-pip
sudo ln -s /usr/bin/python3 /usr/bin/python
sudo ln -s /usr/bin/pip3 /usr/bin/pip
sudo ln -fs /usr/bin/python3.7 /usr/bin/python3 

pyenvのインストール

次にpyenvをインストールします

curl https://pyenv.run | bash

.bashrcファイルを更新します。

vim ~/.bashrc

で、以下を追記しましょう。

export PATH="${HOME}/.pyenv/bin:${PATH}"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

pyenv,pipenvで使うライブラリのインストール

sudo apt install zlib1g-dev
sudo apt install libssl-dev libbz2-dev libreadline-dev libsqlite3-dev

pipenvのインストール

sudo pip install pipenv
sudo pip install pre-commit

pipenvの運用

運用で使うバージョンのpythonをインストール

pyenv install 3.7.5

作業ディレクトリで使うバージョンを指定

pyenv local 3.7.5

pipenvを実行

pipenv install

よくはまる地獄集

pipenvがvirtualenvの構築に失敗する

Windowsネイティブのpythonを掴みに行ってしまう

pythonインタプリタを明示的に指定しましょう

pyenv local 3.7.5

python3.7環境のvirtualenv構築に失敗してしまう

WSLの apt install python3 でインストールされるpythonはpython3.6.7です
python3.6で3.7のvirtualenvを作ろうとすると失敗します(なんで?)
pythonを3.7にしましょう

pyenv local 3.7.5

もしくは

sudo apt install python3.7 python3.7-dev
sudo apt install python3-pip
sudo ln -s /usr/bin/python3 /usr/bin/python
sudo ln -s /usr/bin/pip3 /usr/bin/pip
sudo ln -fs /usr/bin/python3.7 /usr/bin/python3