pyenvで予期せぬエラーが起こり、自分なりに解決できたので残しておきます。
なぜ起こったのか
pyenvで環境構築をしてたのですが、env作って、ライブラリ入れるまでは完璧だったのですが、
PyTorchをimportする時に以下のエラーが吐き出されました。
>>> import torch
File "<stdin>", line 1, in <module>
File "/home/OOOO/.pyenv/versions/3.8.9/lib/python3.8/site-packages/torch/__init__.py", line 16, in <module>
import ctypes
File "/home/OOOO/.pyenv/versions/3.8.9/lib/python3.8/ctypes/__init__.py", line 7, in <module>
from _ctypes import Union, Structure, Array
ModuleNotFoundError: No module named '_ctypes'
PyTorchうんぬんではなく、_ctypes
っていうライブラリが上手く入ってないようでした。
(難しい...)
ネットを漁ると、当該envを消し、libffi-dev
をインストールした後、再度envを入れ直すと直るらしいのですが、私の環境では上手くいかず...
結果的にpyenvのバージョンを下げたら上手くいきました。
使用環境
OS: Pop!_OS 21.10(Ubuntu)
CUDA: 11.6
Python: 3.8.9
(3.8.10, 3.9.10, 3.10.2でも同じ現象が発生しました。)
やったこと(今回、上手くいかなかった手順)
とりあえずこれをやってみると良いと思います。
pyenv uninstall 3.8.9
sudo apt install libffi-dev
pyenv install 3.8.9
私はこれでもダメで、泣きそうになりながらpyenvのバージョンを変えてたらうまくいきました。
やったこと(上手くいった手順)
rm -r ~/.pyenv
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
cd ~/.pyenv
git checkout v2.1.0
pyenv install 3.8.9
# (↓virtualenv使う人用)
git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
v2.1.0より上はダメでした。(2022/02/04調べ)
あとはpyenv install ...
とかして、import _ctypes
が通ればOKです。
まとめ
解決はしましたが、なぜだったのかわからずでした、、、
書いた時点(2022/02/04)ではv2.1.0より上はダメでしたが、もし更新情報などなどがありましたら教えて下さい。
参考
- pyenvとpyenv-virtualenvの自分流使い方
- Pythonでの _ctype の依存関係エラー対策の備忘録 / ModuleNotFoundError: No module named _ctypes 対策
- pipenvのinstall時に、No module named '_ctypes'が発生する
とても参考になりました。ありがとうございました。