【问题标题】:How to solve OpenAI gym's 'Module has no attribute error'如何解决 OpenAI gym 的“Module has no attribute error”
【发布时间】:2022-06-21 03:52:45
【问题描述】:

我遵循与 OpenAI Gym 完全相同的文件夹结构,但在使用 gym.make() 时仍然出现未找到属性错误。我的文件夹结构如下。

my_gym
  -->examples
      ---MAIN_ENV 
  -->my_rl_gym
        --->envs
               ---__init__
               ---main_env    #contains a class called Myxyz as registered below
        ---__init__

  -->setup.ipynb

以下是我在 envs 文件夹内的 __init__ 中注册的方法

from gym.envs.registration import register

register(
     id='XYZ-v0',
     entry_point='my_rl_gym.envs:Myxyz'
)

以下内容位于 my_rl_gym 文件夹内的__init__ 中,即在环境之外

# from my_rl_gym.envs.main_env import Myxyz

#### THIS above line is actually correct BUT gives error as No module named 
#####'my_rl_gym.envs.main_env ' . Hence, I changed this to below line.

import main_env 

调用make命令时出现错误

env = gym.make('XYZ-v0', **env_args)

追溯是:

----> 6 env = gym.make('XYZ-v0', **env_args)
      
~\anaconda3\lib\site-packages\gym\envs\registration.py in make(id, **kwargs)
    674 # fmt: on
    675 def make(id: str, **kwargs) -> "Env":
--> 676     return registry.make(id, **kwargs)
    677 
    678 

~\anaconda3\lib\site-packages\gym\envs\registration.py in make(self, path, **kwargs)
    518         spec = self.spec(path)
    519         # Construct the environment
--> 520         return spec.make(**kwargs)
    521 
    522     def all(self):

~\anaconda3\lib\site-packages\gym\envs\registration.py in make(self, **kwargs)
    137             env = self.entry_point(**_kwargs)
    138         else:
--> 139             cls = load(self.entry_point)
    140             env = cls(**_kwargs)
    141 

~\anaconda3\lib\site-packages\gym\envs\registration.py in load(name)
     54     mod_name, attr_name = name.split(":")
     55     mod = importlib.import_module(mod_name)
---> 56     fn = getattr(mod, attr_name)
     57     return fn
     58 

AttributeError: module 'my_rl_gym.envs' has no attribute 'Myxyz'

这里有什么问题?文件夹目录正确,定义方式也正确。例如见https://github.com/MartinThoma/banana-gym 是因为我需要任何设置文件吗?因为如果是这样,那么我做了并得到了有问题的类型错误Getting Type error with setup file in OpenAI gym

【问题讨论】:

  • 我认为你需要切换两个__init__.py文件的内容,并且内部文件的内容为from my_rl_gym.envs.main_env import Myxyz。
  • @Sharan 感谢您的回复。但是你确定切换是正确的吗?我做到了,而且没有任何区别,而且,在每个 Gym 示例中,我看到他们在外部初始化文件中执行 register(),这也是我所做的,并且在附加的示例链接中也给出了。
  • @Sharan 您对 import 语句的看法是正确的,但正如我在问题中所说的那样,我不知道为什么,但它给出了 no module found 错误。这就是为什么我只写了简单的 import 语句,因为它们都在同一个文件夹中并且错误消失了。但我知道这是错误的,因为没有其他 GYM 示例这样做。也许解决了。到问题也会自动解决这个问题
  • 你能把你的代码推送到github吗?我可以发送 PR 并进行所需的适当更改。
  • @Sharan 哦,好吧,我从来没有这样做过,而且我也不认为我会很乐意将代码放在那里。因为我正在复制一些纸质代码(已经在 github 中)以便我理解它,然后根据我的应用程序进行更改。所以,我在问题中使用了不同的符号。避免与原始纸质代码相似,因为实际上它没有任何错误。我想看看我做错了什么。你不能在这里发表评论并让我知道吗?我会根据您的建议继续进行更改。这对我来说也是一种练习。

标签: python jupyter-notebook anaconda jupyter-lab openai-gym


【解决方案1】:

你能解决吗? 因为我也被困住了,希望能得到帮助

【讨论】:

    猜你喜欢
    • 2022-08-24
    • 2022-09-29
    • 2023-02-17
    • 1970-01-01
    • 2023-02-24
    • 1970-01-01
    • 2022-11-07
    • 2022-12-01
    • 2023-03-28
    相关资源
    最近更新 更多