fugashi icon indicating copy to clipboard operation
fugashi copied to clipboard

DLL load failed: 指定されたモジュールが見つかりません。[windows]

Open KENJI-JIN opened this issue 3 years ago • 8 comments

この記事のgoogle colabのコードをダウンロードしてjupyter notebookで動かそうとしています。 https://qiita.com/sonoisa/items/1df94d0a98cd4f209051 (google colabでは問題なく動くことを確認しました。)

下記でインストールをしました。 pip install fugashi[unidic] python -m unidic download

しかし、下記のエラーが起きてfugashiが使えないようです。

使用している環境は下記です。 windows10 pro python 3.7.8 fugashi 1.1.1

どうすればいいか教えていただけないでしょうか?

エラー内容

ImportError                               Traceback (most recent call last)
<ipython-input-2-5dae7eb78200> in <module>
----> 1 model = SentenceBertJapanese("sonoisa/sentence-bert-base-ja-mean-tokens")

<ipython-input-1-1cb8424fffdf> in __init__(self, model_name_or_path, device)
      4 class SentenceBertJapanese:
      5     def __init__(self, model_name_or_path, device=None):
----> 6         self.tokenizer = BertJapaneseTokenizer.from_pretrained(model_name_or_path)
      7         self.model = BertModel.from_pretrained(model_name_or_path)
      8         self.model.eval()

~\AppData\Roaming\Python\Python37\site-packages\transformers\tokenization_utils_base.py in from_pretrained(cls, pretrained_model_name_or_path, *init_inputs, **kwargs)
   1718 
   1719         return cls._from_pretrained(
-> 1720             resolved_vocab_files, pretrained_model_name_or_path, init_configuration, *init_inputs, **kwargs
   1721         )
   1722 

~\AppData\Roaming\Python\Python37\site-packages\transformers\tokenization_utils_base.py in _from_pretrained(cls, resolved_vocab_files, pretrained_model_name_or_path, init_configuration, *init_inputs, **kwargs)
   1789         # Instantiate tokenizer.
   1790         try:
-> 1791             tokenizer = cls(*init_inputs, **init_kwargs)
   1792         except OSError:
   1793             raise OSError(

~\AppData\Roaming\Python\Python37\site-packages\transformers\models\bert_japanese\tokenization_bert_japanese.py in __init__(self, vocab_file, do_lower_case, do_word_tokenize, do_subword_tokenize, word_tokenizer_type, subword_tokenizer_type, never_split, unk_token, sep_token, pad_token, cls_token, mask_token, mecab_kwargs, **kwargs)
    150             elif word_tokenizer_type == "mecab":
    151                 self.word_tokenizer = MecabTokenizer(
--> 152                     do_lower_case=do_lower_case, never_split=never_split, **(mecab_kwargs or {})
    153                 )
    154             else:

~\AppData\Roaming\Python\Python37\site-packages\transformers\models\bert_japanese\tokenization_bert_japanese.py in __init__(self, do_lower_case, never_split, normalize_text, mecab_dic, mecab_option)
    229 
    230         try:
--> 231             import fugashi
    232         except ModuleNotFoundError as error:
    233             raise error.__class__(

~\AppData\Roaming\Python\Python37\site-packages\fugashi\__init__.py in <module>
----> 1 from .fugashi import *
      2 

ImportError: DLL load failed: 指定されたモジュールが見つかりません。

KENJI-JIN avatar Oct 21 '21 05:10 KENJI-JIN

intallしたfugashiのフォルダの中身は下記のようになっています。 image

KENJI-JIN avatar Oct 21 '21 05:10 KENJI-JIN

#33 と同じ問題みたいです。以上のフォルダーに libmecab.dll というファイルはインストールされるはずですがなぜか付いていません。今自分の Windows PC で確認してみたんですが、再インストールしてもDLLは普通に入っています。

根本的な解決策ではありませんが、wheel をここから直接ダウンロードして、その中から DLL を拾って以上のフォルダに置くと動くはずです。それでもし解決できなかったら教えてください。

後、解決できたらこれは無視して良いですが、原因究明のため、下記を教えていただけたら助かります。

  1. Pythonはどうやってインストールしましたか?もしかしてWindows Store経由だったんですか?
  2. 一旦 pip uninstall fugashi してから pip install -vvv fugashi を実行すると出力はどうなりますか。
  3. virtualenvを使うと普通にインストールできますか。

polm avatar Oct 22 '21 03:10 polm

  1. pip uninstall fugashi してから pip install -vvv fugashi を実行するとこのような出力になりました。(https://github.com/polm/fugashi/files/7402092/output.txt)

KENJI-JIN avatar Oct 23 '21 02:10 KENJI-JIN

  1. 大分前にインストールしたので記憶が定かではありませんが、PythonはVS code経由でインストールしたと思います。 (https://www.python.jp/python_vscode/windows/setup/install_vscode.html) C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64 にpython.exeやScriptsがあって、 c:\users\999999\appdata\roaming\python\python37\site-packages にfugashiがインストールされています。

KENJI-JIN avatar Oct 23 '21 02:10 KENJI-JIN

libmecab.dllを入れたら解決しました。ありがとうございます。

  1. virtualvenvではないですが、ご参考までに。 丁度python3.9に乗り換えようと思っていたので、pythonの公式サイトからインストールしたpython3.9で pip install fugashi[unidic] python -m unidic download でインストールしたらpython 3.9の方では問題なく動き、libmecab.dllもインストールされていました。

pythonのインストール方法が影響しているかもしれません。

KENJI-JIN avatar Oct 23 '21 02:10 KENJI-JIN

解決できて良かったです。他の情報ありがとうございます、大変参考になります。

pipの開発者に問い合わせたところ、fugashi の setup.py での DLL のパスの指定方法が間違っているみたいですが、正しい指定方法やなぜ効く場合と効かない場合があるかは不明のままです。なので修正方法はあるはずですが、修正できるまで少し時間がかかりそうです。

polm avatar Oct 25 '21 14:10 polm

こちら、Python 3.9 + Windowsで同じ問題に遭遇しました。 どうやら、 libmecab.dll~/AppData/Roaming/Python/lib/site-packages/fugashi/ にインストールされてしまっているようでした。

インストール先の問題なのか、DLL検索パスの問題かどうかわかりませんが、その場しのぎとしては cp -f ~/appdata/Roaming/Python/lib/site-packages/fugashi/libmecab.dll ~/appdata/Roaming/Python/Python39/site-packages/fugashi/ で解決しました。

t-yuki avatar May 18 '22 07:05 t-yuki

ご報告ありがとうございます!dllのコピーで解決できて良かったです。

残念ですがこの件の根本的な解決についてまだ進歩はありません。

polm avatar May 19 '22 06:05 polm

私も同じ問題が発生し、原因が見つかったようです。 pU0n0Io2Q9 pipコマンドでインストールすると、無効なファイル パスでインストールされます。 lib/site-packagesフォルダをpython311/site-packagesに移動して解決しました。 とにかくあなたの作品は素晴らしいです。 応援します。

gembleman avatar Jan 29 '23 21:01 gembleman

この問題の原因について未だに厳密な原因は把握していませんが、今までのケースでvirtualenvの使用で解決できることは確かのようなので、とりあえずこのissueをcloseします。

polm avatar Aug 03 '23 10:08 polm