環境
Windows 10 Home
python 3.10
状況
小さなコードをテスト実行中に遭遇した。
その時のコードと、実行したときのエラー内容を以下に示す。
gym.py
import gym
env = gym.make('Pendulum-v1')
env.reset()
for i in range(20):
action = env.action_space.sample()
state, reward, done, info = env.step(action)
print(f"action:{action}, state:{state}, reward:{reward}, done:{done}")
Traceback (most recent call last):
File "C:\Users\work\gym.py", line 1, in <module>
import gym
File "C:\Users\work\gym.py", line 3, in <module>
env = gym.make('Pendulum-v1')
AttributeError: partially initialized module 'gym' has no attribute 'make'
(most likely due to a circular import)
「部分的な初期化」とは何を意味するのだろう?
circular importが原因と言われても、具体的にどうすれば?
結論
問題なのはgym.pyというファイル名である。
インストールしたモジュール(もしくは標準モジュール)と同じファイル名をつけていると、循環参照が発生しAttributeErrorが起きる。ファイル名を「gym_test.py」など適当に変更するとエラーが消える。
参照
後ほど調べたところ、ファイル名とモジュール名を同じにした時にエラーが起きる旨が書かれていた。
記事投稿者様へ
参考としてコードを載せることが頻繁にあると思います。その時にファイル名にも(ほんの少しだけ)気を払っていただくと、予期せぬエラーで新しく学ぶ方が詰まるということが減るかもしれません。