はじめに
macでpyenv+pipenvでPythonのバージョン管理・ライブラリ管理・仮想環境の管理をしているのですが、ある日pipenvの仮想環境をアクティベートしようとしたら以下のようなエラーが出てアクティベートできなくなりました。
$ pipenv shell
Traceback (most recent call last):
File "/usr/local/Cellar/pipenv/2018.11.26_4/libexec/bin/pipenv", line 5, in <module>
from pipenv import cli
ModuleNotFoundError: No module named 'pipenv'
pipenvが見つからないというエラーですが、pipenvそのものが格納されているディレクトリを見に行くと、正常にそこに存在しているのでこのエラーが出る原因が全くわからないのです。
このエラーは他のどのディレクトリの仮想環境をアクティベートしようとしても出て、pipenvが壊れたことを悟りました。原因に心当たりがあるとすれば久しぶりにmacを再起動したことです。未確認ですが、もしかしたら仮想環境から抜けられていないものが残っている状態で再起動してこうなったのかもしれません。ちなみに数日前に後輩もこの症状に陥り、原因不明はわからないまま大学の先生にサポートされながらpyenvもpipenvもインストールし直すことで解決していたので自分もやってみたら治りました。一連の作業を備忘録として残しておきます。
既存の環境を削除
まず、既存のpyenvとpipenvを削除していきます。ここで、ライブラリ管理をしているPipfile等は削除する必要はありません。Pipfileに記述されている情報を基にすぐ再構築できるように残しておきます。
この記事ではpyenv+pipenvの仮想環境の再構築を主眼に置いてるので、元々これらの環境を使用しており、PipfileやPifile.lock、.bash_profileやzshrcの設定を特にいじる必要がないという前提で書きます。
- 使用しているPythonのパスを確認
- pyenvに関するディレクトリを削除
- pyenvを削除
- pipenvを削除
$ which python
>>> /Users/xxx/.pyenv/shims/python
$ rm -rf /Users/xxx/.pyenv
$ brew uninstall pyenv
$ brew uninstall pipenv
pyenv+pipenv, Pythonの入れ直し
ここからはツールの再インストールです。
$ brew install pyenv
$ brew install pipenv
- 元々使っていたバージョンを指定してPythonをインストール
- mac全体で3.7.5を使用するように設定
- Pythonのバージョンを確認(反映されていたら終わりかな?)
$ pyenv install 3.6.7
$ pyenv install 3.7.5
$ pyenv global 3.7.5
$ python -V
>>> Python 2.7.10
反映されていなかったのでどのPythonを使っているのか確認すると、macデフォルトのPythonを使っているようです。
$ which python
>>> /usr/bin/python
そういえば /Users/xxx/.pyenv/shims/python
のようなパス指定でpyenvのPythonを使えるようにする為に.bash_profile
に以下のような記述をしたことを思い出しました。zshユーザーは他のファイルです。
export PYENV_ROOT=${HOME}/.pyenv
if [ -d "${PYENV_ROOT}" ]; then
export PATH=${PYENV_ROOT}/bin:$PATH
eval "$(pyenv init -)"
fi
上記の設定をもう一度反映させ、改めてどのPythonを使っているか確認します。
$ source .bash_profile
$ which python
>>> /Users/xxx/.pyenv/shims/python
正常にpyenvのPythonを支えていることが確認できました。
仮想環境の再構築
ここからはpipenvで管理する仮想環境の再構築についてです。
- 元々使っていた、仮想環境を再構築したいディレクトリに移動
- Pythonのバージョンを指定してpipenv環境を作成
- 仮想環境のアクティベート
- 既存のPipfileを基にライブラリを一括インストール
cd 仮想環境を作りたいディレクトリ
pipenv --python 3.7.5
pipenv shell
pipenv install
以上で仮想環境の再構築は完了です。
最後に
冒頭に記述したエラーについて英語の文献も含めて検索しましたがなかなか同じ症状の人を見つけられず、未だに原因不明ではありますが、対症療法はあるので慌てず冷静に対処しましょう。