Django エラーModuleNotFoundError: No module named 'virtualenvwrapper'

こんなエラーがでた。 環境 MAC OS 10.15.2 python 3.5 Django 2.2

ModuleNotFoundError: No module named 'virtualenvwrapper'

Djangoで開発中の、デバッグ中に発生する

virtualenvwrapperとは

公式サイト virtualenvwrapper.readthedocs.io

virtualenvwrapper の特徴

すべての virtualenv 環境を一元管理できる
便利な各種コマンド
環境の切り替えがコマンドひとつでタブによるコマンド補完
カスタマイズ可能なフック
拡張機能も自由に開発可

便利な開発環境を提供してくれます。 これは従来

pip install virtualenvwrapper

でインストールできていた。

.bash_profile

//pyenv関係
export PATH="$HOME/.pyenv/shims:$PATH"
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"

//システム標準のpython
export PATH=$PATH:/Users/imac2/Library/Python/3.7/bin
alias python="python3"

export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3

brew では、pyenv がインストールされている

$ brew list
autoconf        libimobiledevice    openssl@1.1
automake        libplist        pkg-config
aws-elasticbeanstalk    libtasn1        pyenv //ここにある
carthage        libtool         python //pythonも

pyenvとは

pythonのバージョンを同一PC内で使い分けることが可能。

pyenvで利用される shimコマンドとは

shimコマンドは、 $HOME/.pyenv/shims/ に配置されるコマンド群

  • 環境のpythonのバージョンを調べて、そのバージョンを利用する
  • .python-version ファイルがあればそのpythonのバージョンを利用する

これにより、環境を構築したフォルダに .python-version があれば、そのバージョンを開発に利用できる

virtualenvの構成

virtualenvのコマンドで、任意のディレクトリにPython の実行環境を作成できる pythonコマンドは、自身の親ディレクトリにある include,libディレクトリを参照する。 現在これを利用していた。 f:id:happy_teeth_ago:20200103104601p:plain

参考にさせていただきました。

stackoverflow.com

この記事によると

最近のHomebrewの更新後も同じ問題が発生しました。

過去には、ほとんどの人がpip install virtualenvwrapperをシステムサイトパッケージに実行していましたが、それは機能していました。

Homebrewは、

1)システムpythonをシャドウイングしなくなり、

2)pipをpip2 / pip3にシンボリックリンクしなくなった.

上記理由により、このワークフローが中断されました。

ほとんどのユーザーは、pipが見つからないときにこれを認識し、pip2 / pip3を使用しようとします。 しかし、virtualenvwrapperはpython2 / python3ではなくpython2 / python3にインストールされるため、pip2 / pip3を使用すると問題が発生します。 そのため、virtualenvwrapperを実行してpythonを呼び出すと、システムpythonのサイトパッケージでvirtualenvwrapper / virtualenv pythonパッケージが見つかりません。のエラーが発生する。

VIRTUALENVWRAPPER_PYTHONを明示的に設定することは最もクリーンな修正である。 ふむふむ

仮想環境を利用するときのactivateは何をしているのか?

//activateより
PATH="$VIRTUAL_ENV/bin:$PATH"
export PATH
どこにpipでインストールされているのか pip show コマンドで調べる
//これでpipのインストール場所を調査できる
$ pip show virtualenvwrapper

Name: virtualenvwrapper
Version: 4.8.4
Summary: Enhancements to virtualenv
Home-page: https://virtualenvwrapper.readthedocs.io/
Author: Doug Hellmann
Author-email: doug@doughellmann.com
License: MIT

//これはおかしい
Location: /Users/imac2/.pyenv/versions/3.5.2/lib/python3.5/site-packages
Requires: virtualenv, virtualenv-clone, stevedore

.pyenvに入っている!!

現在の開発の仮想環境にインストールされていない。 解決方法は2つ

1-今の環境を指定してVIRTUALENVWRAPPERをpipインストールする。

-t オプションでインストール可能

2-VIRTUALENVWRAPPER_PYTHONのpathを設定してあげる

.bashrc

bashrcはbashを起動するたびに毎回呼ばれる。 シェル関数を定義したりする。 .bash_profileは起動時1回しか呼ばれない。

export WORKON_HOME=$HOME/.virtualenvs
source /Users/hideyasuimac2/.pyenv/shims/virtualenv/virtualenvwrapper.sh

参考にさせていただきました。

qiita.com