类型错误:模块中缺少必填字段“type_ignores”

ntl*_*rry 6 python ipython jupyter-notebook

注意:我已阅读Python: TypeError: required field "type_ignores" missing from Module in Jupyter notebook,其中包含类似的问题。但是,我仍然被困住了。

问题:我刚刚从 Python 3.7.5 更新到 Python 3.8.5。但是,当我在 Jupyter Notebook 中运行代码时,会显示以下错误消息:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
/usr/local/opt/python@3.8/Frameworks/Python.framework/Versions/3.8/lib/python3.8/codeop.py in __call__(self, source, filename, symbol)
    139 
    140     def __call__(self, source, filename, symbol):
--> 141         codeob = compile(source, filename, symbol, self.flags, 1)
    142         for feature in _features:
    143             if codeob.co_flags & feature.compiler_flag:

TypeError: required field "type_ignores" missing from Module
Run Code Online (Sandbox Code Playgroud)

当我运行代码时,我收到此消息

i = 1
Run Code Online (Sandbox Code Playgroud)

或代码如

import numpy as np
Run Code Online (Sandbox Code Playgroud)

或代码如

from platform import python_version

print(python_version()) 
Run Code Online (Sandbox Code Playgroud)

我已阅读Python: TypeError: required field "type_ignores" missing from Module in Jupyter notebook,其中包含类似的问题。但是,该问题中的海报有一个过时的 ipython 版本。我做了一个

pip freeze
Run Code Online (Sandbox Code Playgroud)

并发现我有最新版本(7.2.0),这意味着该问题的解决方案不适用于该问题。

如果您需要,以下是一些额外信息:

我的尝试:我首先尝试从 Python 3.8 恢复到 Python 3.7。这是因为错误消息提到错误来自 /usr/local/opt/ python@3.8 /Frameworks/Python.framework/Versions/3.8/lib/ python3.8 /codeop.py 我试图通过下载来做到这一点pyenv 和 python 3.7(我之前有 python 3.7 但它已经消失了)并通过配置 .zshenv 文件将 python 版本设置为 3.7.5。然而,这导致 jupyter notebook 甚至像 emacs 这样的程序停止处理诸如

command not found: jupyter
Run Code Online (Sandbox Code Playgroud)

command not found: emacs
Run Code Online (Sandbox Code Playgroud)

我终于通过从 python 网站下载 python 3.7.5 pkg 文件做到了:

python --version
Run Code Online (Sandbox Code Playgroud)

输出:

Python 3.7.5
Run Code Online (Sandbox Code Playgroud)

但是,当我启动 Jupyter Notebook 时,我仍然收到与以前相同的错误(“TypeError:模块中缺少必填字段“type_ignores””)。我担心安装 Python 3.8 会造成一些永久性损坏。

这是我的 .zshenv 文件配置:

export SACAUX=SACHOME/aux
export SACHOME=/usr/local/sac
export PATH=${PATH}:${SACHOME}/bin
export PATH=SACHOME/bin
export PATH=/usr/bin:/bin:/usr/sbin:/sbin:SACHOME/bin
export PATH=/usr/bin:/bin:/usr/sbin:/sbin:SACHOME/bin:HOME/.pyenv/bin
export PATH=~/.pyenv/versions/3.7.5/bin:${PATH}
export PYTHONPATH=/usr/local/lib/python3.7/site-packages
Run Code Online (Sandbox Code Playgroud)

仅供参考,(如果这有用),我需要的所有包(tensorflow、numpy、scipy)都在 /usr/local/lib/python3.7/site-packages,一个 python 3.7 文件夹中,所以我必须明确设置PYTHONPATH 到 /usr/local/lib/python3.7/site-packages 以便 Python 可以找到要导入的包。

有哪些修复可以解决此“TypeError:模块中缺少必填字段“type_ignores””?

小智 5

尝试使用 werkzeug update 修复它,但没有成功。在 ubuntu 20.04.2 上

发现这个问题是针对一个我不确定我正在使用的包,但提到了更新 iPython。

pip3 install ipython --upgrade
Run Code Online (Sandbox Code Playgroud)

然后它更新了一些 python 包,但没有更新其他包。现在它似乎起作用了。


小智 3

我并不是要复活一个死问题,但我看到最近有人评论要求回答这个问题,这是搜索这个问题时的最佳结果。

我遇到了这个问题,显然这是旧版本中 Werkzeug 包实现的问题,我通过使用 pip 将其从版本 0.15.4 更新到 1.0.1 来修复它:

pip install werkzeug --upgrade
Run Code Online (Sandbox Code Playgroud)

这应该可以解决你的问题;如果您想知道您使用的是哪个版本,请terminal使用以下命令启动并启动 Python 交互式终端python

import werkzeug
werkzeug.__version__
Run Code Online (Sandbox Code Playgroud)