Ubuntu下运行Python应用遇tornado模块缺失及pip3.8错误求助
问题分析与解决方案
问题场景
1. 应用运行时的ModuleNotFoundError
执行./app.py时抛出tornado模块找不到的错误:
Traceback (most recent call last): File "./app.py", line 32, in <module> from pushservices.bootstrap import init_messaging_agents File "/home/airnotifier/airnotifier/pushservices/bootstrap.py", line 2, in <module> from .apns import * File "/home/airnotifier/airnotifier/pushservices/apns.py", line 5, in <module> from util import json_encode File "/home/airnotifier/airnotifier/util.py", line 37, in <module> import tornado ModuleNotFoundError: No module named 'tornado'
2. 安装tornado后的pip错误日志
执行python3 -m pip install tornado后,提示tornado已安装,但出现pip日志错误:
Requirement already satisfied: tornado in /usr/local/lib/python3.8/dist-packages (6.0.3)
随后的错误日志:
--- Logging error --- Traceback (most recent call last): File "/usr/local/lib/python3.8/dist-packages/pip/_internal/utils/logging.py", line 177, in emit self.console.print(renderable, overflow="ignore", crop=False, style=style) File "/usr/local/lib/python3.8/dist-packages/pip/_vendor/rich/console.py", line 1752, in print extend(render(renderable, render_options)) File "/usr/local/lib/python3.8/dist-packages/pip/_vendor/rich/console.py", line 1390, in render for render_output in iter_render: File "/usr/local/lib/python3.8/dist-packages/pip/_internal/utils/logging.py", line 134, in __rich_console__ for line in lines: File "/usr/local/lib/python3.8/dist-packages/pip/_vendor/rich/segment.py", line 245, in split_lines for segment in segments: File "/usr/local/lib/python3.8/dist-packages/pip/_vendor/rich/console.py", line 1368, in render renderable = rich_cast(renderable) File "/usr/local/lib/python3.8/dist-packages/pip/_vendor/rich/protocol.py", line 36, in rich_cast renderable = cast_method() File "/usr/local/lib/python3.8/dist-packages/pip/_internal/self_outdated_check.py", line 130, in __rich__ pip_cmd = get_best_invocation_for_this_pip() File "/usr/local/lib/python3.8/dist-packages/pip/_internal/utils/entrypoints.py", line 58, in get_best_invocation_for_this_pip if found_executable and os.path.samefile( File "/usr/lib/python3.8/genericpath.py", line 101, in samefile s2 = os.stat(f2) FileNotFoundError: [Errno 2] No such file or directory: '/usr/bin/pip3.8' Call stack: File "/usr/lib/python3.8/runpy.py", line 194, in _run_module_as_main return _run_code(code, main_globals, None, File "/usr/lib/python3.8/runpy.py", line 87, in _run_code exec(code, run_globals) File "/usr/local/lib/python3.8/dist-packages/pip/__main__.py", line 31, in <module> sys.exit(_main()) File "/usr/local/lib/python3.8/dist-packages/pip/_internal/cli/main.py", line 70, in main return command.main(cmd_args) File "/usr/local/lib/python3.8/dist-packages/pip/_internal/cli/base_command.py", line 101, in main return self._main(args) File "/usr/local/lib/python3.8/dist-packages/pip/_internal/cli/base_command.py", line 223, in _main self.handle_pip_version_check(options) File "/usr/local/lib/python3.8/dist-packages/pip/_internal/cli/req_command.py", line 148, in handle_pip_version_check pip_self_version_check(session, options) File "/usr/local/lib/python3.8/dist-packages/pip/_internal/self_outdated_check.py", line 237, in pip_self_version_check logger.info("[present-rich] %s", upgrade_prompt) File "/usr/lib/python3.8/logging/__init__.py", line 1446, in info self._log(INFO, msg, args, **kwargs) File "/usr/lib/python3.8/logging/__init__.py", line 1589, in _log self.handle(record) File "/usr/lib/python3.8/logging/__init__.py", line 1599, in handle self.callHandlers(record) File "/usr/lib/python3.8/logging/__init__.py", line 1661, in callHandlers hdlr.handle(record) File "/usr/lib/python3.8/logging/__init__.py", line 954, in handle self.emit(record) File "/usr/local/lib/python3.8/dist-packages/pip/_internal/utils/logging.py", line 179, in emit self.handleError(record) Message: '[present-rich] %s' Arguments: (UpgradePrompt(old='22.1.2', new='22.2.2'),)
原因分析
- tornado模块找不到的核心原因:运行应用的Python环境与安装
tornado的Python环境不一致。python3 -m pip安装的tornado位于/usr/local/lib/python3.8/dist-packages,但执行./app.py时使用的Python解释器未指向该环境,导致无法识别已安装的模块。 - pip日志错误的原因:pip在版本检查时,尝试查找
/usr/bin/pip3.8可执行文件,但该文件不存在,引发FileNotFoundError。这通常是pip安装路径或符号链接配置异常导致的。
解决方案
步骤1:统一Python环境,确保应用能找到tornado
- 确认运行应用的Python解释器版本:
查看脚本开头的shebang行(格式为#!/usr/bin/pythonX或#!/usr/bin/env pythonX),或执行:which python - 使用对应版本的pip重新安装tornado,例如应用使用
python3.8:python3.8 -m pip install tornado - 或直接用运行应用的Python解释器安装:
$(which python) -m pip install tornado
步骤2:修复pip符号链接问题(解决日志错误)
- 检查
/usr/bin下的pip相关链接:ls -la /usr/bin | grep pip - 若不存在
pip3.8,创建符号链接指向已安装的pip:sudo ln -s /usr/local/lib/python3.8/dist-packages/pip /usr/bin/pip3.8 - 或更新pip到最新版本,自动修复配置:
python3 -m pip install --upgrade pip
步骤3:验证修复效果
- 重新运行应用:
./app.py - 执行pip命令确认无错误:
python3 -m pip list
内容的提问来源于stack exchange,提问作者Amira Elsayed Ismail
相关产品推荐
相关产品推荐

