终端执行Python脚本时absl等模块加载失败求助
问题:终端执行absl脚本报错但Jupyter正常运行
我用如下简单脚本(debug_only.py)复现问题:
from absl import app from absl import flags FLAGS = flags.FLAGS flags.DEFINE_string('config', None, 'Path to the experiment configuration file.') def main(argv): del argv print(FLAGS.config) if __name__ == "__main__": app.run(main)
在Jupyter Notebook中调用main函数可正常运行,但在终端执行python debug_only.py时出现如下错误:
Traceback (most recent call last): File "projects/hecktor2022/only_debug.py", line 1, in <module> from absl import app File "/home/qian/.local/lib/python3.8/site-packages/absl/app.py", line 38, in <module> from absl import logging File "/home/qian/.local/lib/python3.8/site-packages/absl/logging/__init__.py", line 99, in <module> from absl.logging import converter File "/home/qian/.local/lib/python3.8/site-packages/absl/logging/converter.py", line 49, in <module> STANDARD_CRITICAL = logging.CRITICAL AttributeError: module 'logging' has no attribute 'CRITICAL' Error in sys.excepthook: Traceback (most recent call last): File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 72, in apport_excepthook from apport.fileutils import likely_packaged, get_recent_crashes File "/usr/lib/python3/dist-packages/apport/__init__.py", line 5, in <module> from apport.report import Report File "/usr/lib/python3/dist-packages/apport/report.py", line 32, in <module> import apport.fileutils File "/usr/lib/python3/dist-packages/apport/fileutils.py", line 12, in <module> import os, glob, subprocess, os.path, time, pwd, sys, requests_unixsocket File "/usr/lib/python3/dist-packages/requests_unixsocket/__init__.py", line 1, in <module> import requests File "/usr/lib/python3/dist-packages/requests/__init__.py", line 43, in <module> import urllib3 File "/usr/lib/python3/dist-packages/urllib3/__init__.py", line 7, in <module> from .connectionpool import HTTPConnectionPool, HTTPSConnectionPool, connection_from_url File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 29, in <module> from .connection import ( File "/usr/lib/python3/dist-packages/urllib3/connection.py", line 41, in <module> from .util.ssl_ import ( File "/usr/lib/python3/dist-packages/urllib3/util/__init__.py", line 20, in <module> from .retry import Retry File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 20, in <module> log = logging.getLogger(__name__) AttributeError: module 'logging' has no attribute 'getLogger' Original exception was: Traceback (most recent call last): File "projects/hecktor2022/only_debug.py", line 1, in <module> from absl import app File "/home/qian/.local/lib/python3.8/site-packages/absl/app.py", line 38, in <module> from absl import logging File "/home/qian/.local/lib/python3.8/site-packages/absl/logging/__init__.py", line 99, in <module> from absl.logging import converter File "/home/qian/.local/lib/python3.8/site-packages/absl/logging/converter.py", line 49, in <module> STANDARD_CRITICAL = logging.CRITICAL AttributeError: module 'logging' has no attribute 'CRITICAL'
我发现Python加载absl等库时无法正确加载子模块,尝试argparse等其他包也出现类似AttributeError,不清楚该如何解决,也不理解为何终端报错但Jupyter可正常运行。
解决方法
- 检查同名文件:查看当前执行脚本的目录下是否存在
logging.py或logging.pyc文件,这类文件会覆盖Python标准库的logging模块,直接删除即可。 - 统一Python环境:对比终端和Jupyter使用的Python环境:
- 终端执行
which python查看当前Python路径 - Jupyter中执行
import sys; print(sys.executable)查看路径
若路径不一致,切换到Jupyter使用的环境(比如激活对应虚拟环境,或使用python3等指定版本)。
- 终端执行
- 检查sys.path:终端执行
python -c "import sys; print(sys.path)",确认当前目录是否排在标准库路径之前,避免优先加载本地同名模块。 - 重装损坏库:执行
pip install --upgrade --force-reinstall absl-py,修复可能损坏的absl库文件。
内容的提问来源于stack exchange,提问作者sebastianqian
相关产品推荐
相关产品推荐

