Python 2.6.6 的 Pytest 版本
Pytest version for Python 2.6.6
我正在尝试在 Python 2.6.6 RHEL 6.10 上设置 pytest。
正如 official change log 中所指出的,pytest 3.3.0
不支持 python 2.6,因此应考虑 pytest < 3.3
。我可以成功安装 pytest=3.2.5
,但是当我执行简单测试时出现以下错误:
Traceback (most recent call last):
File "/usr/lib64/python2.6/runpy.py", line 122, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/usr/lib64/python2.6/runpy.py", line 34, in _run_code
exec code in run_globals
File "/usr/lib/python2.6/site-packages/pytest.py", line 17, in <module>
raise SystemExit(pytest.main())
File "/usr/lib/python2.6/site-packages/_pytest/config.py", line 57, in main
return config.hook.pytest_cmdline_main(config=config)
File "/usr/lib/python2.6/site-packages/_pytest/vendored_packages/pluggy.py", line 745, in __call__
return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)
File "/usr/lib/python2.6/site-packages/_pytest/vendored_packages/pluggy.py", line 339, in _hookexec
return self._inner_hookexec(hook, methods, kwargs)
File "/usr/lib/python2.6/site-packages/_pytest/vendored_packages/pluggy.py", line 334, in <lambda>
_MultiCall(methods, kwargs, hook.spec_opts).execute()
File "/usr/lib/python2.6/site-packages/_pytest/vendored_packages/pluggy.py", line 614, in execute
res = hook_impl.function(*args)
File "/usr/lib/python2.6/site-packages/_pytest/main.py", line 127, in pytest_cmdline_main
return wrap_session(config, _main)
File "/usr/lib/python2.6/site-packages/_pytest/main.py", line 111, in wrap_session
config.notify_exception(excinfo, config.option)
File "/usr/lib/python2.6/site-packages/_pytest/config.py", line 936, in notify_exception
excinfo=excinfo)
File "/usr/lib/python2.6/site-packages/_pytest/vendored_packages/pluggy.py", line 745, in __call__
return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)
File "/usr/lib/python2.6/site-packages/_pytest/vendored_packages/pluggy.py", line 339, in _hookexec
return self._inner_hookexec(hook, methods, kwargs)
File "/usr/lib/python2.6/site-packages/_pytest/vendored_packages/pluggy.py", line 334, in <lambda>
_MultiCall(methods, kwargs, hook.spec_opts).execute()
File "/usr/lib/python2.6/site-packages/_pytest/vendored_packages/pluggy.py", line 614, in execute
res = hook_impl.function(*args)
File "/usr/lib/python2.6/site-packages/_pytest/terminal.py", line 163, in pytest_internalerror
for line in py.builtin.text(excrepr).split("\n"):
File "/usr/lib/python2.6/site-packages/_pytest/_code/code.py", line 664, in __unicode__
self.toterminal(tw)
File "/usr/lib/python2.6/site-packages/_pytest/_code/code.py", line 709, in toterminal
self.reprtraceback.toterminal(tw)
File "/usr/lib/python2.6/site-packages/_pytest/_code/code.py", line 725, in toterminal
entry.toterminal(tw)
File "/usr/lib/python2.6/site-packages/_pytest/_code/code.py", line 748, in toterminal
tw.write("".join(self.lines))
File "/usr/lib/python2.6/site-packages/py/_io/terminalwriter.py", line 250, in write
self._update_chars_on_current_line(msg)
File "/usr/lib/python2.6/site-packages/py/_io/terminalwriter.py", line 262, in _update_chars_on_current_line
current_line = current_line.decode('utf-8', errors='replace')
TypeError: decode() takes no keyword arguments
快速搜索表明 decode()
在 python 2.7 中接受参数。
如果这是依赖的情况,那么 Python 2.6.6 推荐使用哪个版本的 pytest?
pytest==3.2.5 是仍然支持 Python 2.6 的版本,但是仅仅因为 pytest==3.2.5 支持 Python 2.6,并不一定意味着它的依赖项作为setup.py 中指定的库作者支持 Python 2.6.
大多数软件包使用 greater-than 约束来指定它们的依赖关系,例如libxxx>=1.2.3,以确保当依赖库作者发布它们时,您将自动获得更新版本的依赖项,但您永远不会下载不兼容的旧版本。在大多数情况下,这很好,因为它减少了库作者的工作量,但这意味着如果该依赖库发布了一个较新的版本,该版本放弃了对依赖库仍然支持的特定版本的支持,您将把它拉进来,因为没有 less-than 约束来防止这种情况。
在这种情况下,根据您显示的回溯,提取的 py.io 库不支持 python 2.6。您需要降级并将 py.io 固定到仍支持 2.6 的旧版本。
根据py.io changelog,最后一个仍然支持Python 2.6的版本是py.io==1.4.34.
如果支持旧软件对您很重要,您应该创建一个 requirements.txt 文件来冻结依赖项列表,而不是依赖软件包的自动版本解析。
我正在尝试在 Python 2.6.6 RHEL 6.10 上设置 pytest。
正如 official change log 中所指出的,pytest 3.3.0
不支持 python 2.6,因此应考虑 pytest < 3.3
。我可以成功安装 pytest=3.2.5
,但是当我执行简单测试时出现以下错误:
Traceback (most recent call last):
File "/usr/lib64/python2.6/runpy.py", line 122, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/usr/lib64/python2.6/runpy.py", line 34, in _run_code
exec code in run_globals
File "/usr/lib/python2.6/site-packages/pytest.py", line 17, in <module>
raise SystemExit(pytest.main())
File "/usr/lib/python2.6/site-packages/_pytest/config.py", line 57, in main
return config.hook.pytest_cmdline_main(config=config)
File "/usr/lib/python2.6/site-packages/_pytest/vendored_packages/pluggy.py", line 745, in __call__
return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)
File "/usr/lib/python2.6/site-packages/_pytest/vendored_packages/pluggy.py", line 339, in _hookexec
return self._inner_hookexec(hook, methods, kwargs)
File "/usr/lib/python2.6/site-packages/_pytest/vendored_packages/pluggy.py", line 334, in <lambda>
_MultiCall(methods, kwargs, hook.spec_opts).execute()
File "/usr/lib/python2.6/site-packages/_pytest/vendored_packages/pluggy.py", line 614, in execute
res = hook_impl.function(*args)
File "/usr/lib/python2.6/site-packages/_pytest/main.py", line 127, in pytest_cmdline_main
return wrap_session(config, _main)
File "/usr/lib/python2.6/site-packages/_pytest/main.py", line 111, in wrap_session
config.notify_exception(excinfo, config.option)
File "/usr/lib/python2.6/site-packages/_pytest/config.py", line 936, in notify_exception
excinfo=excinfo)
File "/usr/lib/python2.6/site-packages/_pytest/vendored_packages/pluggy.py", line 745, in __call__
return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)
File "/usr/lib/python2.6/site-packages/_pytest/vendored_packages/pluggy.py", line 339, in _hookexec
return self._inner_hookexec(hook, methods, kwargs)
File "/usr/lib/python2.6/site-packages/_pytest/vendored_packages/pluggy.py", line 334, in <lambda>
_MultiCall(methods, kwargs, hook.spec_opts).execute()
File "/usr/lib/python2.6/site-packages/_pytest/vendored_packages/pluggy.py", line 614, in execute
res = hook_impl.function(*args)
File "/usr/lib/python2.6/site-packages/_pytest/terminal.py", line 163, in pytest_internalerror
for line in py.builtin.text(excrepr).split("\n"):
File "/usr/lib/python2.6/site-packages/_pytest/_code/code.py", line 664, in __unicode__
self.toterminal(tw)
File "/usr/lib/python2.6/site-packages/_pytest/_code/code.py", line 709, in toterminal
self.reprtraceback.toterminal(tw)
File "/usr/lib/python2.6/site-packages/_pytest/_code/code.py", line 725, in toterminal
entry.toterminal(tw)
File "/usr/lib/python2.6/site-packages/_pytest/_code/code.py", line 748, in toterminal
tw.write("".join(self.lines))
File "/usr/lib/python2.6/site-packages/py/_io/terminalwriter.py", line 250, in write
self._update_chars_on_current_line(msg)
File "/usr/lib/python2.6/site-packages/py/_io/terminalwriter.py", line 262, in _update_chars_on_current_line
current_line = current_line.decode('utf-8', errors='replace')
TypeError: decode() takes no keyword arguments
快速搜索表明 decode()
在 python 2.7 中接受参数。
如果这是依赖的情况,那么 Python 2.6.6 推荐使用哪个版本的 pytest?
pytest==3.2.5 是仍然支持 Python 2.6 的版本,但是仅仅因为 pytest==3.2.5 支持 Python 2.6,并不一定意味着它的依赖项作为setup.py 中指定的库作者支持 Python 2.6.
大多数软件包使用 greater-than 约束来指定它们的依赖关系,例如libxxx>=1.2.3,以确保当依赖库作者发布它们时,您将自动获得更新版本的依赖项,但您永远不会下载不兼容的旧版本。在大多数情况下,这很好,因为它减少了库作者的工作量,但这意味着如果该依赖库发布了一个较新的版本,该版本放弃了对依赖库仍然支持的特定版本的支持,您将把它拉进来,因为没有 less-than 约束来防止这种情况。
在这种情况下,根据您显示的回溯,提取的 py.io 库不支持 python 2.6。您需要降级并将 py.io 固定到仍支持 2.6 的旧版本。
根据py.io changelog,最后一个仍然支持Python 2.6的版本是py.io==1.4.34.
如果支持旧软件对您很重要,您应该创建一个 requirements.txt 文件来冻结依赖项列表,而不是依赖软件包的自动版本解析。