Pythonのモジュールで個人的に躓いたこと（自分用の忘備録）

こんにちは。

<br>

私はプログラミングの勉強を始めたばかりの超初心者（にわか）です。

初めての投稿になります。

どうかよろしくお願いします。

<br>

個人的な話です。

昨日の夜からずっとエラーと格闘してました。

# モジュールはインストール済みでもインポートしたらエラーになる

<br>

画像処理のためのライブラリーであるPythonのpillow。

事あるごとに？

「ModuleNotFoundError: No module named 'pillow'」というエラーが毎回発生。

ちゃんと正規に「pillow」をインストールしたはずなのにおかしい。

pip list コマンドで確認すればpillowが入ってることが確認できる。

<br>

<br>

```

Package                   Version
------------------------- ----------
altgraph                  0.17.4
asgiref                   3.7.2
build                     1.0.3
cachetools                5.3.2
certifi                   2023.11.17
charset-normalizer        3.3.2
colorama                  0.4.6
distlib                   0.3.7
Django                    5.0
filelock                  3.13.1
google-api-core           2.15.0
google-api-python-client  2.110.0
google-auth               2.25.2
google-auth-httplib2      0.2.0
googleapis-common-protos  1.62.0
httplib2                  0.22.0
idna                      3.6
image                     1.5.33
img                       2.5
oauth2client              4.1.3
packaging                 23.2
pafy                      0.5.5
pefile                    2023.2.7
**pillow**                10.1.0
pip                       23.3.1
pipenv                    2023.11.15
platformdirs              4.1.0
protobuf                  4.25.1
pyasn1                    0.5.1
pyasn1-modules            0.3.0
pygame                    2.5.2
pyinstaller               6.3.0
pyinstaller-hooks-contrib 2023.10
pyparsing                 3.1.1
pyproject_hooks           1.0.0
pywin32-ctypes            0.2.2
PyYAML                    6.0.1
requests                  2.31.0
rsa                       4.9
setuptools                69.0.2
six                       1.16.0
sqlparse                  0.4.4
terminal-img              0.0.3
tzdata                    2023.3
uritemplate               4.1.1
urllib3                   2.1.0
virtualenv                20.25.0

```
<br>

<br>

pipでインストールしたパッケージの一覧です。

一覧の中にpillowがあるので問題はどこにあるのだろう。

# 外国人の記事をくまなく検索してみても解決策が載ってないよね

「pillow」が入ってるのにも関わらず

"from PIL import Image"という具合に、「pillow」ではなく旧版の「PIL」を

使わないと、うまく出力されないようで納得がいかなかったんです。

ネットで検索してみて、アドバイスしてくれた方の方法を全部試しましたが

何をやっても同じ結果になり、No module named 'pillow'とコンソールに出ます。

Python3.12が現在のバージョンの最新版になっています。

pillowの最新版で見ますと10.1というのが一番新しいバージョンです。

この両者のバージョンの互換性が合わないのかと最初は疑っておりました。

どっちかが古すぎて、もう片方が新しいから、組み合わせが悪いのだろうか・・とか。

pillowの古いバージョンを再インストールし直したり？

Pythonをアンインストールしてバージョンを下げてみて様子をみてみたり？

でも結局は「>>>import pillow」と打って、エラーとなりまして

このモジュールは存在してませんってなるではないですか。

下に添付した通りの結果になるんです。

<br>


```cpp:Python
>>> import pillow
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'pillow'



```
困ってしまいました。

「pillow」が見つかりませんでしたというメッセージです。

でも「pillow(PIL)」は既にインストール済みなはず。

一体何が原因か。

誰か方法を提示してくれてる方がいらっしゃると思ってたのに。

どこにも書かれてない様子。

試せる手段は全て試したからあきらめようと思いました。

外国人の記事も参考にしてみたもののエラーを吐く結果は変わらない。

だがしかし？

なんとかなるはずと思い込みが激しい私は解決策を模索し続けるのです。

無我夢中でぶっ通しで7時間くらいエラーの解消方法を探し求め。

気づけば翌日の朝になってた。もうさすがに無理なんだと思い始めた。

でも、アイデアがふと私の頭の中に舞い降りてたのです。

## インポート先をフォルダー名から取得している？

すごい安易なやり方になってしまうものの。

これでいけるかもしれない。

試してみたことは以下の通り。

<br>

<br>

<br>

<br>

<br>

Pythonフォルダーの「site-packages」まで移動します。

<br>

ここに「PIL」フォルダが格納されています。

<br>

<br>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698531/cbbc7d42-431d-01fd-93f8-8a77ab151465.png)

<br>

<br>

画像をご覧ください。

デフォルトの状態では「PIL」がフォルダ名に指定されています。

このままでもいいですが、あえてフォルダー名を変更してみましょう。

以下の画像のように「PIL」→「pillow」にフォルダ名を変えました。

<br>

<br>

<br>

<br>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698531/9d2a1700-74f9-fe0d-76ea-0187d340ce80.png)

<br>

<br>

<br>

<br>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698531/bdcd06ad-3d68-04b9-a010-3fd9d0bb6c69.png)

<br>

<br>

<br>

<br>

<br>

<br>



たったこれだけです。

「site-packages」の中にある「PIL」フォルダーを

「pillow」フォルダに名前を変更する。

（バックアップのために

念のため「PIL」のフォルダのコピーを取っておく）

ちゃんと「pillow」でインストールしたのにも関わらず

何故なのかフォルダ名が「PIL」で保存されてしまうという出来事が発生。

PILをフォークした派生版が「pillow」ですし

使うモジュールがPILということもあるんでしょう。

「site-packages」の中にあるフォルダ名を変更しました。
であることに起因してエラーが発生している。

「PIL」というフォルダ名の中に実行するモジュールが入ってるから

「pillow」でインポートできないようになってるのではないのか。

「フォルダ名」を単純に変更さえすれば

「>>>import pillow」でもいけるんじゃないかと推測しました。

「PIL」以外でコマンドを使いたかったって発想から

フォルダ名を「pillow」に統一してみたら、エラーを出力

するのを回避できるはずだろうとテストしてみたわけでした。

<br>

<br>

<br>

<br>

Pythonのターミナルを開いて、試しに打ってみましょう。

<br>

```cpp:Python

>>>import pillow
>>>from pillow import Image
>>>img = Image.open("mytest/sweet.jpg")
>>>print(type(img))
>>>img.show()






```


<br>

<br>

<br>

出力に成功しています。

下の画像は

フォルダー名を変更した後に

確認した結果です。

<br>


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698531/78fd32d4-7f06-34d2-47e6-ef3564bfe068.png)

<br>

<br>


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2698531/983b3dde-945f-969c-3802-613e6ec6a01e.png)

<br>

<br>

<br>

<br>

やはりうまく行きましたね。

インポート先＝「フォルダー名」だったようです。

ですので「フォルダー名」を変えるだけでよかったんですね。

最初のデフォルトのままで使いたいのであれば

元の状態に戻せばいいだけ。

「Python」フォルダの「site-packages」内にある「pillow」を

元の名前に戻してフォルダ名を「PIL」にすれば「import PIL」コマンドや

「from PIL import Image」等で実行することになります。

「>>>import pillow」ができないことにどうしても納得がいかなかったので

これでようやく納得がいきました。

<br>

<br>

<br>

<br>




「フォルダー名」や「ファイル名」を変えれば一発で解決することってあるんだな～

ってだけの記事でした。

<br>

<br>

<br>

<br>

## 2023/12/13 [追記]
後で知ったことですが、Qiitaでの関連記事を見つけたので
最後にリンクを貼っておきます。
同じ個所で行き詰ってた方がここにもいらっしゃった。

<br>

[python初心者がimportエラー(ModuleNotFoundError)で詰みかけた話](https://qiita.com/kakari8888/items/86d9c255204b063c87ee)

┈┈┈┈┈┈┈┈┈┈┈┈┈
┈┈┈┈┈┈┈┈┈┈┈┈┈

kakari8888(bura muu)さんの2019年10月22日時点の記事