物理のベンチ by mitta

学んだことを発信します。備忘録も書きます。間違いがあればコメントください。

【備忘録】Pythonのserialモジュールは似たようなものが2つある

はじめに

このくそ忙しい時期にRS-232Cのシリアル通信で実験機器のパラメータを早急に変える必要があった。
滅多に行わない処理で、常設のコードなんてものはないので、Pythonでパラメータを先に変えてしまおうと判断した。

問題

シリアル通信のモジュールをpip installし、いざ

import serial
conn = serial.Serial("COM3", baudrate=9600)

>>> AttributeError: module 'serial' has no attribute 'Serial'

serialにSerialがないと怒られる。

原因

Pythonのシリアル通信モジュールには2種類ある
・pySerial
・serial
このうち、pyserialには「Serial」があり、serialにはないらしい。
両方ともimport serialでモジュールをインポートするので、「Serial」が呼ばれない。

対策

pip uninstall serial
pip uninstall pyserial
pip install pyserial

一度全部消してからpyserialのほうをインストールすればよい

所感

少しだけ調べた限り、pyserialを使った記事のほうが多いのでpyserialのみを使用したほうが無難。
筆者のようなネット記事のサンプルコードのimport文だけを見て「pip install serial」をしてしまうPythonをちょっとかじった人がハマりそう。