virtualenvのエラー解消(アップデート)

久々にPythonで作業しようとしたらvirtualenvがエラーを出すようになっていたので、その内容の確認と解消をしました。

エラーの内容

発生したエラーメッセージは以下の通りです。

$ virtualenv --version
-bash: /usr/local/bin/virtualenv: /usr/local/opt/python/bin/python3.7: bad interpreter: No such file or directory
$

python3.7のファイル・ディレクトリが存在しないというエラーメッセージのようです。

エラーの原因

pythonがインストールされているか、バージョンがどうなっているかを確認しました。

$ python3 --version
Python 3.9.6
$

バージョンがエラーメッセージのものと違うようです。さらにファイルの状態を確認してみました。

$ ls -1 /usr/local/opt/python/bin/python*
/usr/local/opt/python/bin/python3
/usr/local/opt/python/bin/python3-config
/usr/local/opt/python/bin/python3.9
/usr/local/opt/python/bin/python3.9-config
$

python3.7のファイルは無いようです。記憶にはないですが、おそらくpythonのバージョンアップか何かでアンマッチが起きたようです。

次にvirtualenvが探している3.7がどこから参照されているのかを見てみます。まずコマンドの場所を見てみます。

$ which virtualenv
/usr/local/bin/virtualenv
$

そして上記のファイルの中身を見てみます。

less /usr/local/bin/virtualenv

結果は以下のようになっていました。

#!/usr/local/opt/python/bin/python3.7
# -*- coding: utf-8 -*-
import re
import sys
from virtualenv.__main__ import run_with_catch
if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
    sys.exit(run_with_catch())

インストール時に配置されたファイル自体にpython3.7が明記されているようです。

エラーの解消

原因としてはインストールしたvirtualenvのファイル自体にアンマッチがあるみたいなので、単純にvirtualenvを更新します。

$ sudo pip3 install -U virtualenv
Password:
WARNING: The directory '/Users/masaki/Library/Caches/pip' or its parent directory is not owned or is not writable by the current user. The cache has been disabled. Check the permissions and owner of that directory. If executing pip with sudo, you should use sudo's -H flag.
Collecting virtualenv
  Downloading virtualenv-20.14.0-py2.py3-none-any.whl (8.8 MB)
     |████████████████████████████████| 8.8 MB 8.0 MB/s
Collecting distlib<1,>=0.3.1
  Downloading distlib-0.3.4-py2.py3-none-any.whl (461 kB)
     |████████████████████████████████| 461 kB 9.4 MB/s
Collecting filelock<4,>=3.2
  Downloading filelock-3.6.0-py3-none-any.whl (10.0 kB)
Collecting six<2,>=1.9.0
  Downloading six-1.16.0-py2.py3-none-any.whl (11 kB)
Collecting platformdirs<3,>=2
  Downloading platformdirs-2.5.1-py3-none-any.whl (14 kB)
Installing collected packages: six, platformdirs, filelock, distlib, virtualenv
Successfully installed distlib-0.3.4 filelock-3.6.0 platformdirs-2.5.1 six-1.16.0 virtualenv-20.14.0
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
WARNING: You are using pip version 21.1.3; however, version 22.0.4 is available.
You should consider upgrading via the '/usr/local/opt/python@3.9/bin/python3.9 -m pip install --upgrade pip' command.
$

アップデート完了後に再度virtualenvコマンドを実行してみます。

$ virtualenv --version
virtualenv 20.14.0 from /usr/local/lib/python3.9/site-packages/virtualenv/__init__.py
$

今度は無事に実行できました。これで解決です。

コメント

タイトルとURLをコピーしました