Pytest версия для Python 2.6.6 - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь настроить pytest на Python 2.6.6 RHEL 6.10.

Как указано в официальном журнале изменений 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.Если это случай зависимости, то какая версия pytest рекомендуется для Python 2.6.6?

1 Ответ

0 голосов
/ 05 июня 2019

pytest == 3.2.5 - это версия, которая по-прежнему поддерживает Python 2.6, однако то, что pytest == 3.2.5 поддерживает Python 2.6, не обязательно означает, что его зависимости, как авторы библиотек, указанные в их setup.py, поддерживают Python2.6.

Большинство пакетов определяют свои зависимости, используя ограничение больше чем, например, libxxx> = 1.2.3, чтобы гарантировать, что вы будете автоматически получать более новые версии зависимостей, когда автор зависимых библиотек выпустит их, но вы никогда не будетезагрузите несовместимую старую версию.В большинстве случаев это замечательно, так как уменьшает рабочую нагрузку для авторов библиотеки, но это означает, что если эта зависимая библиотека выпустила более новую версию, в которой прекращена поддержка определенной версии, которая еще поддерживается зависимой библиотекой, вы будете извлекать это из, поскольку существует не менее чем ограничение, чтобы предотвратить это.

В этом случае, согласно показанной вами трассировке, библиотека py.io, которая была извлечена, не поддерживает python 2.6.Вам нужно понизить версию и прикрепить py.io к более старой версии, которая все еще поддерживает 2.6.

Согласно py.io changelog , последняя версия, которая все еще поддерживает Python 2.6, - это py.io == 1.4.34.

Если для вас важно поддерживать старое программное обеспечение, вы должны создать файл require.txt, чтобы заморозить список зависимостей, а не полагаться на автоматическое разрешение версий из пакетов.

...