pythonの標準ライブラリtkinterをインポートして簡単な画面を作ろうとしたときに、枠だけ作って起動したところ変なエラーがでて悩んでしまったので共有したいと思います。
原因は、タイトル通りファイル名をtkinter.pyという名前で作ってしまった頃が原因でした。
ソースコード
ソースコードは、tkinterをインポートして400×300の枠だけを表示させるエラーになりようがないコードです。
import tkinter as tk
main = tk.Tk()
main.title("テスト画面")
main.geometry("400x300")
main.mainloop()
こんな画面が表示される想定でした。

エラー内容
vscodeで実行したところ以下のエラーが表示されました。
[Done] exited with code=0 in 133.089 seconds
[Running] python -u "c:\python\GUI\tkinter.py"
Traceback (most recent call last):
File "c:\python\GUI\tkinter.py", line 1, in <module>
import tkinter as tk
File "c:\python\GUI\tkinter.py", line 3, in <module>
main = tk.Tk()
AttributeError: partially initialized module 'tkinter' has no attribute 'Tk' (most likely due to a circular import). Did you mean: 'tk'?
[Done] exited with code=1 in 0.198 seconds
翻訳すると
部分的に初期化されたモジュール'tkinter'には属性'Tk'がありません(おそらく循環インポートが原因です)
意味が分からない・・・・。今まで見たことないエラー
原因
原因はコードではなくファイル名の問題でした。
tkinter.pyというファイル名だと、1行目のimport tkinter as tkの時に実行しているフォルダ内のファイルを読み込もうとしてエラーになっているみたいです。
tkinterを使うからと言ってファイル名をtkinterにしてはダメでした。
試しにpandas.pyというファイル名でpandasをimportしているプログラムを実行してみたところ
同じエラーになりました。
import pandas as pd
excelfile = r'C:\test\test.xlsx'
df = pd.read_excel(excelfile)
df
[Running] python -u "c:\python\GUI\pandas.py"
Traceback (most recent call last):
File "c:\python\GUI\pandas.py", line 1, in <module>
import pandas as pd
File "c:\python\GUI\pandas.py", line 4, in <module>
df = pd.read_excel(excelfile)
AttributeError: partially initialized module 'pandas' has no attribute 'read_excel' (most likely due to a circular import)
[Done] exited with code=1 in 0.206 seconds
まとめ
全部のライブラリがそうなるかは試していませんが結論として、
importで使用しているライブラリ名をファイル名として使用するのはNG
適当なファイル名でテスト実行したいときのあるあるなので気を付けようと思います。
コメント