私はDebianを走らせている私のRaspberry PiでPython 2.6でシリアルポートにアクセスしようとしています。私のserial.py
という名前のスクリプトはpySerialをインポートしようとします。
import serial
ser = serial.Serial('/dev/ttyAMA0', 9600)
ser.write("hello world!")
何らかの理由で、このエラーでシリアル接続を確立することを拒否します。
AttributeError: 'module' object has no attribute 'Serial'
私が対話型のPythonインタプリタに同じコードを入力しようとしても、まだうまくいきません。
奇妙なことに、それは数時間前に動作していました。
問題は何でしょうか。私はしばらくの間、pySerialの再インストール、私のコードの書き換え、シリアルポートの再チェックなどのためにしばらくこれを直そうとしました。
前もって感謝します!
クラスではなくモジュールをインポートしています。だから、あなたは書く必要があります:
from serial import Serial
serial
モジュールを正しくインストールする必要があります:pip install pyserial
。
私がしたのと同じ間違いをした人々のためにこの解決策を加えています。
ほとんどの場合、プロジェクトファイルの名前を 'serial.py'に変更し、存在する場合はserial.pycを削除してください。そうすると、属性エラーなしで単純な 'import serial'を実行できます。
あなたのpythonファイル名が 'something.py'のときに 'something'をインポートすると問題が発生します。
誤って 'pySerial'(Sudo python -m pip install serial
)の代わりに 'serial'(Sudo python -m pip install pyserial
)をインストールしたため、同じエラーが発生します。
上記の解決策がうまくいかなかった場合は、正しいライブラリをインストールしたかどうかをもう一度確認してください。
間違ったパッケージ名 'serial'をインストールしました。
pip uninstall serial
を、python 3.xの場合はpip3 uninstall serial
を実行します。pip install pyserial
を、python 3.xの場合はpip3 install pyserial
を実行して、pyserialをインストールします。あなたが私のように無力なら、これを試してみてください。
ここで説明されている方法で "Serial"のすべてのサブモジュール(または問題のあるパッケージ)を一覧表示します。 pythonパッケージの一部であるすべてのモジュールの一覧を表示します
私の場合、問題は次々と解決しました。
...私にとってはバグのように見えます...
この問題はあなたのproyectがserial.pyという名前でインポートされたライブラリもserialという名前であることに由来しています、名前を変更し、それがすべてです。
はいこのトピックは少し古いですが、私はとにかくそれを必要とするかもしれない人のために私のために働いた解決策を共有したいと思いました
ALiが言ったように、端末から以下を使用してあなたのプログラムを見つけることを試みなさい:
Sudo python3
import serial
print(serial.__file__)
- >コピー
CTRL+D #(to get out of python)
Sudo python3
- >貼り付け/__init__.py
__init__.py
を有効にするとあなたのプログラムには "ok from python3"を使うつもりです。私の問題は私のpython3プログラムがpython 2.7からシリアルを使っていたことでした
他の解決策:他のpythonバージョンを削除する
曹操
Tryhard
このエラーは、依存関係が循環している場合にも発生する可能性があります。あなたの輸入をチェックして、あなたが少しのサイクルもないことを確認してください。