gTTSを使おうとしたら No module named ‘six’が出たので直したお話

こんにちはエスプレッソです。練習兼動画作成でgTTSを使用したら面白そうだと思いpythonでPyPlのチュートリアルを真似てこんな感じでプログラミングを組みました。

実行しようとしたら以下のようにエラーを吐きました

ModuleNotFoundError: No module named ‘six’が出てしまい直すのに母国語問わず検索かけても出てこなくて苦戦したのでメモとしてその解決方法を共有したいと思います。

Module NotFoundErrorとはなんなのか?

importキーワードで指定したモジュールが存在しない場合に発生する例外です。 import 〜〜 と入力することで解決することができます。またimportと入力しても出てくる場合は、そもそも、そのmoduleをインストールしていない可能性があります。大体はモジュールを再インストールすれば解決できますが私が陥ったのは、モジュール’six’は元々インストールされており、gTTSを再インストールしても使えないし、sixを再インストールしても使えない gTTsを使わないプロジェクトには、モジュール’six’は反応していたので意味が分からない状態になっていました。

Module Sixとは何か?

そもそもModule エラーを起こしているsix とは一体なんなのか、どんな役割を持っているのかが分からないと対処のしようがありません。幸いsixについてドキュメントがでているので、そこから引用しますと

Sixは、Python 2 と Python 3 の間の違いを吸収するためのシンプルなユーティリティを提供します。それらは、Python 2 と Python 3 の両方でコードベースの変更なく動作することをサポートするよう意図されています。six はたった一つの Python ファイルだけで構成されていますから、プロジェクトへコピーして利用することに苦痛はありません。

https://hhsprings.bitbucket.io/docs/translations/python/six-doc-ja/

つまりpython2と3のプログラミングコードを統一する働きを持っているようです。

解決方法 pattern1

本題ですがまず「import six のモジュールがないよ」と言っています。

そもそもsixを使わなければいい話です。ですが gTTSには、’six’内にあるurllibというURL を扱うモジュールを集めたパッケージが必要になります。そこでgtts をインストールした際にできる tts.pyファイルを開き from six.move の項目を削除。代わりにimport urllibを書き込みます。そうすることで別口でurllibを接続することで解決しました。

tts.py ビフォー
tts.py アフター

解決方法 ぱたーん2

pip install [six error がでたもの] –upgrade –ignore-installed six

バージョンアップを行い、対応させること他の djangoのsns認証など細々したところにsixが使われているためいちいち消してsix が使われいるところにpython3用に書き換えるなんて非常にめんどくさいので、バージョンを合わせてしまった方が楽である。

まとめ

自分みたいなエラーは中々ないとは思いますが、もしインストールしているのにModule NotFoundError ‘six’と出てしまったら試してみてください。もっといい解決方法があったらコメントください。


 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA