如何在 运行 tox 时修复 'envreport' 中的 'UnicodeDecodeError'?

How to fix 'UnicodeDecodeError' in 'envreport' when running tox?

我想使用 tox 来自动测试我的 python 包。截至目前,仅在本地。当 运行 tox 时,测试通过,但随后抛出 UnicodeDecodeError。 tox --version 是 3.13.2.

错误信息(完整回溯如下):

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe4 in position 70: invalid continuation byte

当 运行 tox 时测试成功,这是我期望的 -vvvvvv 可视化。这些函数什么都不做,目前只是一个虚拟函数(使用 cookiecutter-pypackage 自动创建)。我将 envlist 中的项目减少到只有 py37。 Anaconda 在我的 PATH 变量中,没有安装常规 python。我尝试通过编写 .bat(我正在使用 Windows)来使用不同的 python 版本,就像在官方 tox 文档中一样。这与 py37 的工作原理相同。测试通过并抛出以下内容。

我在 tox documentation 中找不到关于 UnicodeDecodeErrors 的任何内容。

powershell 或我的命令行都无法按照 post 中的建议执行 export LANG=en_US.UTF-8。在 tox.ini 中设置 setenv = LANG=en_US.UTF-8 也没有改变任何东西。

下面的 Traceback 是针对 py37 环境的,它在将 skipdist = true 添加到 tox.ini 时被调用。忽略它仍然会 return 完全相同的错误,具有几乎相同的回溯。

错误是从 codecy.py 文件中抛出的。在 Traceback 中向上移动并查看每个文件对我没有帮助,因为我无法找出哪个文件被编码或其他任何可能有帮助的东西。如果没有 post 成功创建 virtualenv 的整个控制台输出,有些东西可能会有所帮助。摘要中的 envreport 抛出错误。 tox-envreport 如果重要,则不会安装。测试 sdist 时,它位于 GLOB sdist-make: 部分。

py37 finish: finishvenv  after 0.02 seconds
py37 start: envreport
setting PATH=C:\Users\cosmo\OneDrive - Universität zu Köln\package\.tox\py37\Scripts;C:\Users\cosmo\Anaconda3;C:\Users\cosmo\Anaconda3\Library\mingw-w64\bin;C:\Users\cosmo\Anaconda3\Library\usr\bin;C:\Users\cosmo\Anaconda3\Library\bin;C:\Users\cosmo\Anaconda3\Scripts;C:\Users\cosmo\Anaconda3\bin;C:\Users\cosmo\Anaconda3\condabin;C:\ProgramData\DockerDesktop\version-bin;C:\Program Files\Docker\Docker\Resources\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0;C:\WINDOWS\System32\OpenSSH;C:\Program Files\Git\cmd;C:\Program Files\MATLAB\R2019a\bin;C:\Program Files\PuTTY;C:\Program Files\MiKTeX 2.9\miktex\bin\x64;C:\Users\cosmo\AppData\Local\Microsoft\WindowsApps;C:\Users\cosmo\AppData\Local\Programs\Microsoft VS Code\bin;C:\Users\cosmo\AppData\Local\GitHubDesktop\bin;C:\Users\cosmo\Anaconda3\Scripts;C:\Users\cosmo\Anaconda3;.
[7836] C:\Users\cosmo\OneDrive - Universität zu Köln\package$ 'C:\Users\cosmo\OneDrive - Universität zu Köln\package\.tox\py37\Scripts\python.EXE' -m pip freeze >.tox\py37\log\py37-0.log
_________________________________________________________________________ summary __________________________________________________________________________
  py37: commands succeeded
  congratulations :)
Traceback (most recent call last):
  File "c:\users\cosmo\anaconda3\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "c:\users\cosmo\anaconda3\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\Users\cosmo\Anaconda3\Scripts\tox.exe\__main__.py", line 9, in <module>
  File "c:\users\cosmo\anaconda3\lib\site-packages\tox\session\__init__.py", line 44, in cmdline
    main(args)
  File "c:\users\cosmo\anaconda3\lib\site-packages\tox\session\__init__.py", line 68, in main
    exit_code = session.runcommand()
  File "c:\users\cosmo\anaconda3\lib\site-packages\tox\session\__init__.py", line 192, in runcommand
    return self.subcommand_test()
  File "c:\users\cosmo\anaconda3\lib\site-packages\tox\session\__init__.py", line 220, in subcommand_test
    run_sequential(self.config, self.venv_dict)
  File "c:\users\cosmo\anaconda3\lib\site-packages\tox\session\commands\run\sequential.py", line 20, in run_sequential
    runenvreport(venv, config)
  File "c:\users\cosmo\anaconda3\lib\site-packages\tox\session\commands\run\sequential.py", line 60, in runenvreport
    packages = config.pluginmanager.hook.tox_runenvreport(venv=venv, action=action)
  File "c:\users\cosmo\anaconda3\lib\site-packages\pluggy\hooks.py", line 289, in __call__
    return self._hookexec(self, self.get_hookimpls(), kwargs)
  File "c:\users\cosmo\anaconda3\lib\site-packages\pluggy\manager.py", line 87, in _hookexec
    return self._inner_hookexec(hook, methods, kwargs)
  File "c:\users\cosmo\anaconda3\lib\site-packages\pluggy\manager.py", line 81, in <lambda>
    firstresult=hook.spec.opts.get("firstresult") if hook.spec else False,
  File "c:\users\cosmo\anaconda3\lib\site-packages\pluggy\callers.py", line 208, in _multicall
    return outcome.get_result()
  File "c:\users\cosmo\anaconda3\lib\site-packages\pluggy\callers.py", line 80, in get_result
    raise ex[1].with_traceback(ex[2])
  File "c:\users\cosmo\anaconda3\lib\site-packages\pluggy\callers.py", line 187, in _multicall
    res = hook_impl.function(*args)
  File "c:\users\cosmo\anaconda3\lib\site-packages\tox\venv.py", line 780, in tox_runenvreport
    output = venv._pcall(args, cwd=venv.envconfig.config.toxinidir, action=action, returnout=True)
  File "c:\users\cosmo\anaconda3\lib\site-packages\tox\venv.py", line 574, in _pcall
    report_fail=not is_test_command,
  File "c:\users\cosmo\anaconda3\lib\site-packages\tox\action.py", line 107, in popen
    lines = out_path.read_text("UTF-8").split("\n")
  File "c:\users\cosmo\anaconda3\lib\site-packages\py\_path\common.py", line 165, in read_text
    return f.read()
  File "c:\users\cosmo\anaconda3\lib\codecs.py", line 322, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe4 in position 70: invalid continuation byte

我的问题:

只是猜测。 将您的应用程序放在此文件夹之外:OneDrive - Universität zu Köln 我认为科隆的问题。

这是对 tox bug 报告的很好的回溯。