首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法再运行pytest,因为导入库元数据entry_points()在configparser.DuplicateOptionError中失败

无法再运行pytest,因为导入库元数据entry_points()在configparser.DuplicateOptionError中失败
EN

Stack Overflow用户
提问于 2019-06-07 09:06:42
回答 1查看 1.4K关注 0票数 1

pluggypytest使用。最近,pluggy更改为使用importlib-metadata而不是pkg-resources。从那以后我就不能再做测试了。像往常一样,我直接从库(bliss)源目录启动bliss,但现在它在开始时失败了:

代码语言:javascript
复制
Traceback (most recent call last):
  File "/opt/conda/envs/testenv/bin/pytest", line 11, in <module>
    sys.exit(main())
  File "/opt/conda/envs/testenv/lib/python3.7/site-packages/_pytest/config/__init__.py", line 63, in main
    config = _prepareconfig(args, plugins)
  File "/opt/conda/envs/testenv/lib/python3.7/site-packages/_pytest/config/__init__.py", line 207, in _prepareconfig
    pluginmanager=pluginmanager, args=args
  File "/opt/conda/envs/testenv/lib/python3.7/site-packages/pluggy/hooks.py", line 289, in __call__
    return self._hookexec(self, self.get_hookimpls(), kwargs)
  File "/opt/conda/envs/testenv/lib/python3.7/site-packages/pluggy/manager.py", line 87, in _hookexec
    return self._inner_hookexec(hook, methods, kwargs)
  File "/opt/conda/envs/testenv/lib/python3.7/site-packages/pluggy/manager.py", line 81, in <lambda>
    firstresult=hook.spec.opts.get("firstresult") if hook.spec else False,
  File "/opt/conda/envs/testenv/lib/python3.7/site-packages/pluggy/callers.py", line 203, in _multicall
    gen.send(outcome)
  File "/opt/conda/envs/testenv/lib/python3.7/site-packages/_pytest/helpconfig.py", line 94, in pytest_cmdline_parse
    config = outcome.get_result()
  File "/opt/conda/envs/testenv/lib/python3.7/site-packages/pluggy/callers.py", line 80, in get_result
    raise ex[1].with_traceback(ex[2])
  File "/opt/conda/envs/testenv/lib/python3.7/site-packages/pluggy/callers.py", line 187, in _multicall
    res = hook_impl.function(*args)
  File "/opt/conda/envs/testenv/lib/python3.7/site-packages/_pytest/config/__init__.py", line 687, in pytest_cmdline_parse
    self.parse(args)
  File "/opt/conda/envs/testenv/lib/python3.7/site-packages/_pytest/config/__init__.py", line 895, in parse
    self._preparse(args, addopts=addopts)
  File "/opt/conda/envs/testenv/lib/python3.7/site-packages/_pytest/config/__init__.py", line 836, in _preparse
    self._consider_importhook(args)
  File "/opt/conda/envs/testenv/lib/python3.7/site-packages/_pytest/config/__init__.py", line 784, in _consider_importhook
    self._mark_plugins_for_rewrite(hook)
  File "/opt/conda/envs/testenv/lib/python3.7/site-packages/_pytest/config/__init__.py", line 806, in _mark_plugins_for_rewrite
    for name in _iter_rewritable_modules(package_files):
  File "/opt/conda/envs/testenv/lib/python3.7/site-packages/_pytest/config/__init__.py", line 625, in _iter_rewritable_modules
    for fn in package_files:
  File "/opt/conda/envs/testenv/lib/python3.7/site-packages/_pytest/config/__init__.py", line 802, in <genexpr>
    if any(ep.group == "pytest11" for ep in dist.entry_points)
  File "/opt/conda/envs/testenv/lib/python3.7/site-packages/importlib_metadata/__init__.py", line 226, in entry_points
    return EntryPoint._from_text(self.read_text('entry_points.txt'))
  File "/opt/conda/envs/testenv/lib/python3.7/site-packages/importlib_metadata/__init__.py", line 109, in _from_text
    config.read_string(text)
  File "/opt/conda/envs/testenv/lib/python3.7/configparser.py", line 722, in read_string
    self.read_file(sfile, source)
  File "/opt/conda/envs/testenv/lib/python3.7/configparser.py", line 717, in read_file
    self._read(f, source)
  File "/opt/conda/envs/testenv/lib/python3.7/configparser.py", line 1091, in _read
    fpname, lineno)
configparser.DuplicateOptionError: While reading from '<string>' [line 16]: option 'bliss' in section 'console_scripts' already exists

我的setup.py看起来是这样的:

代码语言:javascript
复制
def main():
  ...
  setup(name=meta['name'],
        ...
        entry_points={
            "console_scripts": [
                "bliss = bliss.shell.cli.main:main",
                ...
            ]
        },
        ...
   )

部分中没有复制

我不知道为什么我会收到这个错误信息..。

我把问题缩小到了importlib-metadata,特别是它创建了一个ConfigParser对象来“解析”一个entry_points.txt文件(这个文件不存在!我不知道它是从哪里来的),如果我在构造函数中通过strict=False,它会使我的测试再次运行。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-07 15:43:55

关于更多信息,console_scripts有两个条目,如下所示:

代码语言:javascript
复制
    entry_points={
        "console_scripts": [
            "bliss = bliss.shell.cli.main:main",
            ...
            "Bliss = ...",
        ]

导入库-元数据有一个当前错误,它以不区分大小写的方式解析该文件。

下面是修复这个问题的修补程序:requests/76

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56491266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档