Python3.7运行脚本或pip安装报failed to map segment错误求解
问题现象
使用Python3.7时,运行脚本或执行pip安装命令均会触发如下报错:
root@geek:/# python3.7 -m pip install pandas --proxy=https:______ Traceback (most recent call last): File "/usr/local/lib/python3.7/runpy.py", line 193, in _run_module_as_main "__main__", mod_spec) File "/usr/local/lib/python3.7/runpy.py", line 85, in _run_code exec(code, run_globals) File "/usr/local/lib/python3.7/site-packages/pip/__main__.py", line 19, in <module> sys.exit(_main()) File "/usr/local/lib/python3.7/site-packages/pip/_internal/main.py", line 45, in main command = create_command(cmd_name, isolated=("--isolated" in cmd_args)) File "/usr/local/lib/python3.7/site-packages/pip/_internal/commands/__init__.py", line 96, in create_command module = importlib.import_module(module_path) File "/usr/local/lib/python3.7/importlib/__init__.py", line 127, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1006, in _gcd_import File "<frozen importlib._bootstrap>", line 983, in _find_and_load File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 677, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 728, in exec_module File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed File "/usr/local/lib/python3.7/site-packages/pip/_internal/commands/install.py", line 23, in <module> from pip._internal.cli.req_command import RequirementCommand File "/usr/local/lib/python3.7/site-packages/pip/_internal/cli/req_command.py", line 20, in <module> from pip._internal.network.session import PipSession File "/usr/local/lib/python3.7/site-packages/pip/_internal/network/session.py", line 17, in <module> from pip._vendor import requests, six, urllib3 File "/usr/local/lib/python3.7/site-packages/pip/_vendor/requests/__init__.py", line 115, in <module> from . import packages File "/usr/local/lib/python3.7/site-packages/pip/_vendor/requests/packages.py", line 8, in <module> locals()[package] = __import__(vendored_package) File "/usr/local/lib/python3.7/site-packages/pip/_vendor/idna/__init__.py", line 2, in <module> from .core import * File "/usr/local/lib/python3.7/site-packages/pip/_vendor/idna/core.py", line 3, in <module> import unicodedata ImportError: /usr/local/lib/python3.7/lib-dynload/unicodedata.cpython-37m-x86_64-linux-gnu.so: failed to map segment from shared object
故障为突发,上周之前运行正常。已尝试导出PATH环境变量、卸载/tmp挂载、调整ulimit -m/ulimit -v为unlimited、释放系统内存等操作,均未解决问题。
解决方案
- 验证动态库文件完整性
执行命令ls -l /usr/local/lib/python3.7/lib-dynload/unicodedata.cpython-37m-x86_64-linux-gnu.so确认文件权限为644,所属用户组与Python安装用户一致,文件大小正常(约300KB左右)。若文件损坏,可从同架构同版本的正常Python3.7环境复制该文件到对应路径,或直接重新编译安装Python3.7修复。 - 检查目录挂载权限
执行mount | grep /usr/local/lib/python3.7查看对应挂载分区是否带有noexec标识,该标识会阻止动态库加载执行。如果存在该标识,执行mount -o remount,rw,exec /usr/local/lib/python3.7临时修复,如需永久生效需修改/etc/fstab中对应挂载项的参数,移除noexec配置。 - 排查安全策略限制
临时关闭SELinux验证:执行setenforce 0后重新运行pip命令排查是否恢复。如果是AppArmor环境,执行aa-status查看是否存在Python相关的限制规则,临时禁用对应规则测试。 - 重装对应版本pip
若以上操作均无效,可直接下载适配Python3.7版本的get-pip.py脚本,执行python3.7 get-pip.py直接重装pip,绕过现有损坏的pip模块调用逻辑。
内容的提问来源于stack exchange,提问作者geek
相关产品推荐
相关产品推荐

