polm / fugashi

A Cython MeCab wrapper for fast, pythonic Japanese tokenization and morphological analysis.
MIT License
389 stars 31 forks source link

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

Closed KENJI-JIN closed 1 year ago

KENJI-JIN commented 2 years ago

この記事の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 commented 2 years ago

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

polm commented 2 years ago

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

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

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

  1. Pythonはどうやってインストールしましたか?もしかしてWindows Store経由だったんですか?
  2. 一旦 pip uninstall fugashi してから pip install -vvv fugashi を実行すると出力はどうなりますか。
  3. virtualenvを使うと普通にインストールできますか。
KENJI-JIN commented 2 years ago
  1. pip uninstall fugashi してから pip install -vvv fugashi を実行するとこのような出力になりました。(https://github.com/polm/fugashi/files/7402092/output.txt)
KENJI-JIN commented 2 years ago
  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 commented 2 years ago

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

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

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

polm commented 2 years ago

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

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

t-yuki commented 2 years ago

こちら、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/ で解決しました。

polm commented 2 years ago

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

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

gembleman commented 1 year ago

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

polm commented 1 year ago

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