6
3

More than 3 years have passed since last update.

Homebrew で入れた Vim が Python 3.8 のエラーで起動しない問題メモ

Posted at

TL;DR:

LC_CTYPE 環境変数を ja_JP.UTF-8 にセットしたら直った。

調査

vim を起動すると以下のエラーが出てクラッシュするようになった。

% vim
Fatal Python error: config_get_locale_encoding: failed to get the locale encoding: nl_langinfo(CODESET) failed
Python runtime state: preinitialized

エラーメッセージで検索すると Python のバグトラッカーのスレッドが見つかった。 https://bugs.python.org/issue39397

ロケールの設定ミスが指摘されている。また LC_CTYPE 環境変数を削除するようアドバイスされている。報告者自身は LANG 環境変数を削除したら問題が解決したようだ。

自分の環境を確認する。

% locale
LANG="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_CTYPE="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_ALL=

% echo $LANG
ja_JP.UTF-8

% env | grep '^LC_ALL=' # 未定義
% env | grep '^LC_CTYPE=' # 未定義

LANG 環境変数が設定されている。 LC_CTYPE 環境変数は設定されていないため、 locale コマンドによればロケール設定 LC_CTYPEja_JP.UTF-8 になる。

自分の環境では LANG 環境変数の設定を変えたくないため他の解決策を探す。

ここで、エラーの発生箇所らしい nl_langinfo(CODESET) の意味を調べた。 https://linuxjm.osdn.jp/html/LDP_man-pages/man3/nl_langinfo.3.html

nl_langinfo() 関数は、 localeconv(3) より柔軟なロケール情報へのアクセス方法を提供する。 ロケールカテゴリーの個々の要素や追加の要素を問い合わせることができる。

CODESET (LC_CTYPE) 選択されたロケールで用いられる文字エンコード名を示す文字列を返す。

nl_langinfo(CODESET) はロケール設定 LC_CTYPE と関係があるようだ。その値は、 LC_CTYPE 環境変数の(未定義なら LC_ALL 環境変数の、それも未定義なら LANG 環境変数の)値と等しいはず。自分の環境であれば、 LANG 環境変数の値と同じ ja_JP.UTF-8 になるはずだが、取得がうまくいっていないように見える。

試しに LC_CTYPE 環境変数を ja_JP.UTF-8 にセットしてみる。

% export LC_CTYPE=ja_JP.UTF-8
% vim

これで問題なく Vim が起動するようになった。

環境

Vim

% brew info vim
vim: stable 8.2.0654 (bottled), HEAD
Vi 'workalike' with many additional features
https://www.vim.org/
Conflicts with:
  ex-vi (because vim and ex-vi both install bin/ex and bin/view)
  macvim (because vim and macvim both install vi* binaries)
/usr/local/Cellar/vim/8.2.0654 (1,888 files, 32.6MB) *
  Poured from bottle on 2020-05-02 at 10:16:41
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/vim.rb
==> Dependencies
Required: gettext ✔, lua ✔, perl ✔, python@3.8 ✔, ruby ✔

% grep '^Plug ' .vimrc
Plug 'Shougo/deoplete.nvim' " |deoplete_nvim|
Plug 'roxma/nvim-yarp'
Plug 'roxma/vim-hug-neovim-rpc'

deoplete.nvim プラグインは Python 3 に依存する。このプラグインが Python 3 をロードしようとしてクラッシュしているように見える。

Python

% brew info python@3.8
python@3.8: stable 3.8.2 (bottled) [keg-only]
Interpreted, interactive, object-oriented programming language
https://www.python.org/
/usr/local/Cellar/python@3.8/3.8.2 (4,196 files, 64MB)
  Poured from bottle on 2020-03-16 at 14:48:28
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/python@3.8.rb

macOS

% sw_vers
ProductName:    Mac OS X
ProductVersion: 10.15.3
BuildVersion:   19D76
6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3