【エラー】「No module named ‘websocket’」からの「externally-managed-environment」からの「ImportError: cannot import name ‘WebSocketApp’ from ‘websocket’」

スポンサーリンク
tech系(python)
スポンサーリンク

「No module named ‘websocket’」が発生

事態はラズベリーパイにておきました。

pythonコードを実行しようとしたら以下のエラー。

No module named 'websocket'

「websocketのmoduleが必要なのか」と思い、pipでinstallしようとすると以下のエラー

$ pip install websocket
error: externally-managed-environment

× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
    python3-xyz, where xyz is the package you are trying to
    install.
    
    If you wish to install a non-Debian-packaged Python package,
    create a virtual environment using python3 -m venv path/to/venv.
    Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
    sure you have python3-full installed.
    
    For more information visit http://rptl.io/venv

note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.

「error: externally-managed-environment」が発生

$ pip install --break-system-packages websocket

と「–break-system-packages」を付けて実行してもできるらしいけど、リスクがあるらしいです。

The installer should have a way for the user to override these rules, such as a command-line flag –break-system-packages. This option should not be enabled by default and should carry some connotation that its use is risky.

https://peps.python.org/pep-0668/

上書きされちゃうかもしれないって書いてあります。

ということで、仮想環境を用意する方法で対応します。

$ python -m venv test

仮想環境の名前は今回はtestにしています。

以降、testのところは個々人で設定した仮想環境名に置き換えてください。

では、websocketをインストールします。

$ test/bin/pip install websocket

しかしここで新たなエラーが発生しました。

「ImportError: cannot import name ‘WebSocketApp’ from ‘websocket’ (/home/xxxx/.local/lib/python3.11/site-packages/websocket/init.py)」発生

再度、pythonコードを実行しようとすると、

ImportError: cannot import name 'WebSocketApp' from 'websocket' (/home/xxxx/.local/lib/python3.11/site-packages/websocket/init.py)

が発生しました。

これはこちらのページが参考になりました。

websocketではなくて、websocket-clientと言うことなので、websocketをアンインストールして、websocket-clientをインストールします。

$ test/bin/pip uninstall websocket
$ test/bin/pip install websocket-client

これで解消されるかと思います。

ちなみに、実際にpythonコードを実行するときは以下のような形で実行します。

$ test/bin/python test.py

タイトルとURLをコピーしました