我在 Ubuntu 22.04 上使用 Python 3.10 从事一个使用 Farama Foundation 的 gymnasium 图书馆 的项目。导入gymnasium时,它使用importlib获取entry points,但是当我将
import gymnasium
运行到IDLE时,出现以下错误:
Traceback (most recent call last):
File "/usr/lib/python3.10/idlelib/run.py", line 578, in runcode
exec(code, self.locals)
File "<pyshell#2>", line 1, in <module>
File "/usr/local/lib/python3.10/dist-packages/gymnasium/__init__.py", line 12, in <module>
from gymnasium.envs.registration import (
File "/usr/local/lib/python3.10/dist-packages/gymnasium/envs/__init__.py", line 382, in <module>
load_plugin_envs()
File "/usr/local/lib/python3.10/dist-packages/gymnasium/envs/registration.py", line 565, in load_plugin_envs
for plugin in metadata.entry_points(group=entry_point):
File "/usr/lib/python3.10/importlib/metadata/__init__.py", line 1009, in entry_points
return SelectableGroups.load(eps).select(**params)
File "/usr/lib/python3.10/importlib/metadata/__init__.py", line 459, in load
ordered = sorted(eps, key=by_group)
File "/usr/lib/python3.10/importlib/metadata/__init__.py", line 1006, in <genexpr>
eps = itertools.chain.from_iterable(
File "/usr/lib/python3.10/importlib/metadata/_itertools.py", line 16, in unique_everseen
k = key(element)
File "/usr/lib/python3.10/importlib/metadata/__init__.py", line 941, in _normalized_name
return self._name_from_stem(stem) or super()._normalized_name
File "/usr/lib/python3.10/importlib/metadata/__init__.py", line 622, in _normalized_name
return Prepared.normalize(self.name)
File "/usr/lib/python3.10/importlib/metadata/__init__.py", line 871, in normalize
return re.sub(r"[-_.]+", "-", name).lower().replace('-', '_')
File "/usr/lib/python3.10/re.py", line 209, in sub
return _compile(pattern, flags).sub(repl, string, count)
TypeError: expected string or bytes-like object
我在 GitHub 上向 gymnasium 的一位创建者询问了这个问题,他们要求我打印出入口点列表,所以我运行了以下命令:
from importlib.metadata import *
eps = entry_points()
并得到以下错误:
Traceback (most recent call last):
File "/usr/lib/python3.10/idlelib/run.py", line 578, in runcode
exec(code, self.locals)
File "<pyshell#1>", line 1, in <module>
File "/usr/lib/python3.10/importlib/metadata/__init__.py", line 1009, in entry_points
return SelectableGroups.load(eps).select(**params)
File "/usr/lib/python3.10/importlib/metadata/__init__.py", line 459, in load
ordered = sorted(eps, key=by_group)
File "/usr/lib/python3.10/importlib/metadata/__init__.py", line 1006, in <genexpr>
eps = itertools.chain.from_iterable(
File "/usr/lib/python3.10/importlib/metadata/_itertools.py", line 16, in unique_everseen
k = key(element)
File "/usr/lib/python3.10/importlib/metadata/__init__.py", line 941, in _normalized_name
return self._name_from_stem(stem) or super()._normalized_name
File "/usr/lib/python3.10/importlib/metadata/__init__.py", line 622, in _normalized_name
return Prepared.normalize(self.name)
File "/usr/lib/python3.10/importlib/metadata/__init__.py", line 871, in normalize
return re.sub(r"[-_.]+", "-", name).lower().replace('-', '_')
File "/usr/lib/python3.10/re.py", line 209, in sub
return _compile(pattern, flags).sub(repl, string, count)
TypeError: expected string or bytes-like object
这似乎表明
entry_points()
正在搜索的其中一个名称的格式不正确。我不确定如何解决这个问题。我愿意完全卸载 Python 3.10 并从头开始重新安装它和所有其他软件包,但我更喜欢一种不那么激进的方法。