【エラー】pythonで単純なimport文が失敗する

スポンサーリンク

コンテンツ

コマンド

$ python serial.py 

エラーメッセージ例

python serial.py 
Traceback (most recent call last):
  File "serial.py", line 7, in <module>
    import serial
  File "/home/t/201402python/serial.py", line 9, in <module>
    ser = serial.Serial('/dev/ttyACM0', 9600, timeout=0)
AttributeError: 'module' object has no attribute 'Serial'

import serialで使うpyserialをインストールしていてもダメ

また、インタラクティブシェルですら失敗する

解決方法

現在のフォルダにある「serial.py」を別の名前(myserial.pyなど)にする

mv serial.py myserial.py

成功例

python
Python 2.7.3 (default, Aug  1 2012, 05:16:07) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import serial
>>>

ファイル名=モジュール名とすると、pythonがファイル名とモジュール名を勘違いして「そんなモジュール無いよ」と言い出します。

pythonがモジュールを探す順序が
・現在のフォルダ
・pipで入れたモジュールがあるフォルダ
のため、現在のフォルダにモジュール名と同じファイル(serial.py)があるとそれをモジュールと勘違いしてimportしようとする→でも実際にはモジュールでも何でもない、ただのpythonコード のため、エラーで死にます。

pythonでのファイル名はモジュール名とは違うものにした方がいいです。先頭が数字でもたしかimport時はダメなので、pythonのファイル名は気をつけたほうが良さそう