"ValueError: compile(): unrecognised flags" when running doctest on module using __future__.annotations
"ValueError: compile(): unrecognised flags" when running doctest on module using __future__.annotations
我有一个奇怪的行为,恐怕不容易重现。也许你可以给我一个提示..
在 Ubuntu 18.04 机器上和 venv 内部,我 运行ning pytest --doctest-modules
在使用 [=13= 的模块上使用 Python 3.8.0 ]
pipenv run pytest --doctest-modules my_module.py
没有问题。
现在我 运行 在 Docker 环境(使用 ubuntu:20.04
)中执行相同的命令,映射包含 .venv
文件夹的目录。安装了相同的 Python 版本并且 pipenv graph
的输出没有差异我得到一个异常:
pipenv run pytest --doctest-modules my_module.py
____________________ [doctest] my_module _____________________________________
[some doctest code]
UNEXPECTED EXCEPTION: ValueError('compile(): unrecognised flags')
Traceback (most recent call last):
File "/usr/lib/python3.8/doctest.py", line 1336, in __run
exec(compile(example.source, filename, "single",
ValueError: compile(): unrecognised flags
/path/to/my_module.py:1234: UnexpectedException
我尝试比较 /usr/lib/python3.8/__future__.py
和在 Docker 环境内外使用的 doctest.py
,但它们是相同的(它们也包含在 .venv
目录中无论如何..).
然后我尝试调查 Doctests exec(compile(...))
调用中使用的 compileflags
,发现在一种情况下(Docker 之外)是 2^20
,而在另一种情况下如果是 2^24
.
深入挖掘,我发现在Docker-环境中__future__.annotations
的str()
值是
_Feature((3, 7, 0, 'beta', 1), (3, 10, 0, 'alpha', 0), 16777216)
同时
_Feature((3, 7, 0, 'beta', 1), (4, 0, 0, 'alpha', 0), 1048576)
在 Docker 容器之外。
为什么我会有这些差异?我该如何制作这个 Pytest-Test 运行?
这个也许不应该在cpython 3.8中被反向移植——https://github.com/python/cpython/pull/19835
标志在 3.8.2 和 3.8.3 之间以不兼容的方式更改,这意味着如果您有来自较新版本的 pyc 文件,它将无法与旧版本一起正常工作(尽管被标记为与 cpython 3.8 兼容)
上面链接的补丁调整了标志以避免与其他编译器标志冲突
我有一个奇怪的行为,恐怕不容易重现。也许你可以给我一个提示..
在 Ubuntu 18.04 机器上和 venv 内部,我 运行ning pytest --doctest-modules
在使用 [=13= 的模块上使用 Python 3.8.0 ]
pipenv run pytest --doctest-modules my_module.py
没有问题。
现在我 运行 在 Docker 环境(使用 ubuntu:20.04
)中执行相同的命令,映射包含 .venv
文件夹的目录。安装了相同的 Python 版本并且 pipenv graph
的输出没有差异我得到一个异常:
pipenv run pytest --doctest-modules my_module.py
____________________ [doctest] my_module _____________________________________
[some doctest code]
UNEXPECTED EXCEPTION: ValueError('compile(): unrecognised flags')
Traceback (most recent call last):
File "/usr/lib/python3.8/doctest.py", line 1336, in __run
exec(compile(example.source, filename, "single",
ValueError: compile(): unrecognised flags
/path/to/my_module.py:1234: UnexpectedException
我尝试比较 /usr/lib/python3.8/__future__.py
和在 Docker 环境内外使用的 doctest.py
,但它们是相同的(它们也包含在 .venv
目录中无论如何..).
然后我尝试调查 Doctests exec(compile(...))
调用中使用的 compileflags
,发现在一种情况下(Docker 之外)是 2^20
,而在另一种情况下如果是 2^24
.
深入挖掘,我发现在Docker-环境中__future__.annotations
的str()
值是
_Feature((3, 7, 0, 'beta', 1), (3, 10, 0, 'alpha', 0), 16777216)
同时
_Feature((3, 7, 0, 'beta', 1), (4, 0, 0, 'alpha', 0), 1048576)
在 Docker 容器之外。
为什么我会有这些差异?我该如何制作这个 Pytest-Test 运行?
这个也许不应该在cpython 3.8中被反向移植——https://github.com/python/cpython/pull/19835
标志在 3.8.2 和 3.8.3 之间以不兼容的方式更改,这意味着如果您有来自较新版本的 pyc 文件,它将无法与旧版本一起正常工作(尽管被标记为与 cpython 3.8 兼容)
上面链接的补丁调整了标志以避免与其他编译器标志冲突