运行flask_restful编写的API时遇ImportError:无法导入opcode的__all__
问题:ImportError: cannot import name 'all' from opcode
编写的API代码
from flask_restful import Resource, request class UploadFile(Resource): def get(self): pass def post(self): is_header_present(request.headers, "User-Agent", None) def is_header_present(headers, search_term, correct_variable): for header in headers.keys(): print(header)
API运行代码
from flask import Flask from flask_restful import Api from lib.api import UploadFile app = Flask(__name__) api = Api(app) api.add_resource(UploadFile, "/cas", methods=["GET", "POST"]) app.run( host="127.0.0.1", port=6823 )
运行错误日志
Traceback (most recent call last): File "cas.py", line 262, in <module> from flask import Flask File "/home/sal/.local/lib/python3.6/site-packages/flask/__init__.py", line 16, in <module> from werkzeug.exceptions import abort File "/home/sal/.local/lib/python3.6/site-packages/werkzeug/__init__.py", line 15, in <module> from .serving import run_simple File "/home/sal/.local/lib/python3.6/site-packages/werkzeug/serving.py", line 50, in <module> from ._internal import _log File "/home/sal/.local/lib/python3.6/site-packages/werkzeug/_internal.py", line 11, in <module> import inspect File "/usr/lib/python3.6/inspect.py", line 36, in <module> import dis File "/usr/lib/python3.6/dis.py", line 9, in <module> from opcode import __all__ as _opcodes_all ImportError: cannot import name '__all__'
环境信息
- Python版本:3.6.9
- 安装的库版本:
- Flask==2.0.3
- Flask-RESTful==0.3.9
- Werkzeug==2.0.3
已尝试重装相关库、重装Python,问题仍存在,求修复方案。
修复方案
这个错误的核心原因是系统中存在自定义的opcode.py文件,覆盖了Python标准库的opcode模块。Python导入模块时,会优先搜索当前工作目录和PYTHONPATH中的文件,而非标准库路径。
具体步骤:
检查模块搜索路径中的自定义文件
执行以下命令查看Python的模块搜索路径:python3 -c "import sys; print('\n'.join(sys.path))"检查输出的路径列表中是否存在
opcode.py或opcode.pyc文件,重点关注当前工作目录(路径列表的第一个位置)。处理冲突文件
找到非标准库的opcode.py/opcode.pyc后,直接将其重命名(例如改为custom_opcode.py)或删除,避免与标准库模块冲突。验证修复效果
重新运行API代码,若错误消失则问题已解决。
额外排查方向:
如果未找到上述文件,可执行以下命令确认实际导入的opcode模块路径:
python3 -c "import opcode; print(opcode.__file__)"
正常情况下路径应为标准库路径(类似/usr/lib/python3.6/opcode.py)。若输出为自定义路径,直接处理该路径下的文件即可。
内容的提问来源于stack exchange,提问作者user12969777
相关产品推荐
相关产品推荐

